Kick out annoying Ads by using Pi-Hole and your Synology NAS!

First things first: I did fell in love with my Synology NAS! After a year of running my DS-218+, I can’t believe how I used to work without it before. What is so special about the DS-218+ Synology DiskStation is not that it is an incredibly flexible network storage, BUT much more that it is capable of running docker containers!

When I first realized that I can seamlessly run my home assistant automation system as well as my MQTT broker right from my Synology NAS I was astonished.

No more additional hardware, no additional power consumption, just run it inside your NAS (which is powered on anyway).

But now, I came across another absolutely amazing use-case, which is to block all the annoying advertisements from every website I am reading. By running a Pi-Hole Docker container on my DiscStation, I can route all DNS requests through that local DNS server in order to block all the advertisement domains.

Sounds cool? It definitely is, as it is transparently blocking all ads for all your devices in your local network without any change within your browser.

Best thing is: As your browser is not even aware that all ads are automatically blocked by DNS, all the news sites can’t detect that you are blocking their content requests.

Blocking all the ads within the web pages you are loading by DNS is even speeding up your local network, as it simply avoids to load all the ad resources and annoying video ads and it renders web pages much faster than before.

How to set up Pi-Hole with your DiskStation?

See below the necessary steps for installing Pi-Hole on your NAS. I will go into detail for each of the steps in the following sections:

  1. Install Docker package within your DiskStation
  2. Install Pi-Hole docker image
  3. Launch Pi-Hole docker image on your NAS
  4. Configure your router to use your NAS as new DNS server
  5. Alternatively, configure your local devices network to use the NAS as new DNS server
  6. You are ready!

1. Install Docker package

First step, if you not already done so, install the docker package within your Synology package manager as shown below:

2. Install Pi-hole Docker image

After installing the docker package, you are ready to download your Pi-Hole docker image. You do so by navigating to the docker package, open it, search for the Pi-hole container, as shown below and download the image:

3. Configure and Launch Pi-Hole Image

Launch the Pi-hole docker image and configure all its ports to ‘Auto’ except the DNS ports, as shown below:

Once the Pi-hole image is launched, you can check which port was automatically assigned to the HTTP administration interface. In my case it’s the port 32781. If you open your web browser you can reach your local Pi-Hole web interface by typing your IP along with YOUR_NAS-IP:32781/admin.

Your Pi-Hole web interface will show statistics about how many ads were already blocked, as shown below:

4. Configure your Router to use Pi-Hole as DNS server

The router configuration depends on your own router model. Check your router manual and search for the configuration of the DNS servers. Typically, you will find a Google DNS server configured there, which you delete and replace with the IP of your own Synology DiskStation.

Once you replaced the DNS configuration on your router to point to the address of your DiskStation IP, all devices within your network will route the DNS queries through your DiskStation’s Pi-Hole DNS server. The Pi-Hole server will then only return a correct DNS address for non-advertising addresses, which leaves all your browsers to not show the embedded adverts.

5. Alternatively, configure your device to use Pi-Hole as DNS

In my case, unfortunately my router does not offer the possibility to configure the DNS address.

An alternative here is to change the config on all your local devices, such as laptop, PC and tablets, to use your own Pi-Hole DNS server, as it is shown below:

I hope that my short article did gave you some ideas how to get rid of all the annoying ads within the websites you are reading day by day.

Overall, the Pi-Hole DNS server is a great way of kicking out the ads and to speed up your browsing experience.

Again a fine solution running on my beloved Synology drive.

Finally, I want to thank the team around Pi-Hole for building and maintaining such a great solution!! 🚀 🚀

Unpacking and Testing my brand new Original Prusa MINI 3D Printer

When ordering my Original Prusa MINI way back in April this year, midst the Corona crisis, I did not anticipate the 4 months of inpatient waiting time. Prusa Research stopped the shipping of 3D printers during the Corona crisis, to produce the urgently needed face shields for hospitals, which stands for Josef Prusa’s innovative personality.

Now, I am assembling the arrived Prusa MINI 3D printer, which can be done with some minor and simple steps within around 30 minutes.

Acquiring an original Prusa model was a deliberate decision, as I am a big fan of local innovation. That said, Prague only 250 km away from my hometown, I loved to see that Josef Prusa did set up his Prusa Research company in the heart of the beautiful city of Prague, rather than producing in China or anywhere abroad.

The assembly instructions already prove this argument right, as it delivers a clear step-by-step guide, how to finalize the printer, interrupted by occasional intake of Haribo sweets (that came with the printer).

See below the finished assembly of the printer:

Finished assembly of my Original Prusa MINI printer
Finished assembly of my Original Prusa MINI printer

Starting the printer the first time, it starts the self-test that automatically checks if the critical parts are all working within the given tolerances. Once the self-test is finished, the printer needs a first calibration of the desired z-distance, which is critical for the overall quality of each print. By using the click wheel, the user has to adjust the offset position of the extruder towards the print bed.

Calibration process is really user friendly and the click wheel appears to be a simple and effective input method, which reminds me about the iPod wheel.

The color display and menu structure is exceptionally well defined, again a prove that an original Prusa printer is way ahead of no-name China competition.

Another great benefit of a Prusa printer is the lively community and active development of its firmware, that constantly thrives forward in terms of adding features and fine tuning of stability and usability.

After I performed my first print on the fresh calibrated 3D printer, I found that its level of detail and smooth surface is comparable, or even superior to the 2K Euro printer we operate at work.

Next step for me will be to explore the newly added Ethernet connectivity features, that came along with the Prusa Mini. A connection to your network means that you can remotely monitor the progress of your print and to read out some telemetry data during each print. Josef Prusa states that the networking capability is just a first glance of what is coming in the future, as we can imagine a lot of beneficial networked features that can come out of that statement. A networked 3D printer is definitely a must for operating large scale 3D printing farms, as print jobs can be distributed automatically.

Overall, I am happy that my decision to buy an original Prusa designed printer turned out as the best choice!

See below some examples of our first steps with the newly arrived Prusa Mini printer:

Pokemon print with Natural translucent Filament
Print of a small rabbit with Prusa Filament
Translucent, natural Filament

New TabShop Help Page

Within the last weeks I did prepare a completely new help and tutorial page for all our TabShop users, which can be found here:

The help page is focused on how to solve typical Point of Sale (POS) related use-cases within TabShop. Examples are how to define your own product stock lists, how to checkout and print an invoice and how to change the appearance of your TabShop Android Point of Sale system.

The help page will grow in terms of content over the next couple of weeks and cover more and more use-cases for mobile cashiers.

TabShop Point of Sale (POS) Celebrating 500K Downloads

TabShop began in 2012, when it was first published in Google Play store. Back then, I could not imagine how popular this Android application would become.

Now, 8 years later TabShop POS will reach 500K overall downloads, with hundreds of shops using TabShop day by day worldwide.

The app came a long way, adding feature after feature and battling with competitors such as Square POS for place one in Android Play Store year over year.

Recently, TabShop returned to its original single app strategy and removed the PRO version from Pay Store. Instead in-app upgrade to PRO mode is offered directly within the application. This allows users a more seamless conversion between free and Pro version without switching the app.

The free Android POS app TabShop still is offered without any annoying advertisements in free forever mode.

To celebrate the 500.000 TabShop downloads, we created a new intro video.

Covid-19 (Corona) Visualization for Austria

Dealing with data, statistics and visualization in my daily job and locked down at home through the governmental precautions, I thought I build a Covid-19 (Corona) virus information dashboard. The dashboard is built by using Johns Hopkins University (“2019 Novel Coronavirus COVID-19 (2019-nCoV) Data Repository by Johns Hopkins CSSE”, you can download and review the raw data in this Github repository.).

The dashboard is of course focused on Austria and its neighbor countries, as thats where I am living. See screenshot below:

Use a Telegram Bot to talk with your Smart Home Automation

Telegram is a great way to receive home assistant (HASS) smart home automation information directly pushed to your Android or iPhone. By creating your own Telegram bot you get a lot of flexibility on sending home automation messages or even images from your security cameras to your mobile phone.

The first step of attaching a Telegram bot with your own home assistant (HASS) environment is to create your own Telegram bot. Contact the BotFather in Telegram as it is shown below and follow the creation wizard to receive your bot secret.

Then configure your Home assistant system to communicate with your newly created bot, as it is shown below:

# Example configuration.yaml entry for the Telegram Bot


  – platform: polling

    api_key: !secret telegram


      – 123456789

      – 123456780

As a result you can extend all your Home assistant automation scripts to use your own Telegram bot to send out important notifications and images to your phone, as it is shown below:

Read more about Telegram integration and how to automate your home with the open source Home assistant platform within my own ebook available at Amazon.

Open Source Home Automation with Esp32 and Home Assistant (

ebook Open Source Home Automation - Introduction to Home assistant and Esp32 based automation

As a dedicated Home Assistant user for years now, I came to write an ebook covering all the important topics around home automation and tinkering your own Esp32 based
sensors and actuators. Home Assistant is Open Source, written in Python and a lively community maintains over 3000 custom made components that allow you to control nearly everything in your home.
For everything else there is the cheap and handy Esp32 or ESP8266 microcontroller that comes with builtin wireless network support and the capability to control any hardware you can think of.
Soldering your own ESP8266 based sensors is really fun and allows you to add a lot of flexibility to your home automation. With a very low price tag of 5$ the ESP8266 microcontroller is a practical basis for all your custom made sensors and actuators.
Read more about the details on how to solder your own sensors and how to attach them to your own home assistant system in my brand new eBook: ‘Open Source Home Automation‘.

Build a wireless MQTT temperature and humidity sensor for your Home Assistant

Over the last months, I became more and more addicted to Home Assistant ( and MQTT low cost wireless sensors. I was already familiar with several home and industrial automation systems that all come with a certain hardware (and price) and build upon a completely proprietary software stack. So long story short, I was searching for a good community-backed open source home automation system that is easy to set up and runs on my old Raspberry.

As home automation seems to be a broad area of interest I thought there should be hundreds of open source community projects out there. I was not as easy as I thought and there are not so many home automation projects out there. It seems as if the market is broadly dominated by large vendors that offer integrated solutions.

After some cumbersome fails I was finally able to find a real gem in the home automation area, which is called the Home Assistant, or short Home Assistant comes as a lightweight installation that perfectly fulfills following requirements:

  1. Its lightweight, low resource consuming
  2. Easy to set up
  3. Nice web interface, that also comes pretty well with my tablet and smartphone (no app required, responsive web UI is great on your mobile device too) See a live demo here.
  4. Lots of community components available (>1000), such as Alexa, IFTTT, Hue, Sonos, Cromecast, Webcam, and many more.
  5. Fully configurable through plaintext YAML files
  6. It comes with an integrated MQTT broker!
  7. Supports automation scripts, such as turn light on at sunset
  8. Best of all its written in Python and its open source

The first step towards building my own MQTT wireless weather station was to set up a Home Assistant instance on my old Linux laptop. If you already got Python3 running on your system, the set up process is pretty straight forward, just type:

python3 -m pip install homeassistant

After successful installation you just enter the .homeassistant configuration folder and adapt the .yaml configurations that control what your Home Assistant instance is showing and how elements are organized in Web UI.

The most important configuration files are configuration.yaml that contains the core configuration about sensors and components and groups.yaml that groups all your components into visual tabs within the UI. Within my installation i chose to use a default group, one for my living room and one for controlling my pool, as i is shown in the screenshot below:

As my screenshot already shows, my Home Assistant instance already contains some MQTT based sensors for continuously informing me about the temperature and humidity (outside, and in living room). You can put the sensor output into any of your configured tabs. The same sensor info can also be present in multiple tabs at the same time.

To add a new MQTT sensor into your core configuration file, simply add following sensor section into your core configuration.yaml file:

  - platform: mqtt
    name: "Temperature"
    state_topic: "/home/outdoor/sensor1"
    value_template: "{{ value_json.temperature }}"
    unit_of_measurement: '°C'
  - platform: mqtt
    name: "Humidity"
    state_topic: "/home/outdoor/sensor1"
    value_template: "{{ value_json.humidity }}"
    unit_of_measurement: '%'

You can then show this newly added sensor value in any of your configured groups, as shown below:

  name: Home
  view: yes
    - sensor.airquality
    - sensor.temperature
    - sensor.humidity
    - sensor.yr_symbol
    - sun.sun
    - camera.mjpeg_camera
    - device_tracker.alice
    - device_tracker.bob
    - switch.robby
    - switch.lamp
  name: Livingroom
  view: yes
    - sensor.temperaturelivingroom
    - sensor.humiditylivingroom
    - media_player.livingroom
  name: Pool
  view: yes
    - sensor.watertemperature
    - switch.poolcover
    - switch.poollight
    - switch.poolpump
    - switch.poolbot

Now its time to test if the sensor would show a value in case it receives an MQTT value through the configured MQTT topic. Therefore, Home Assistant offers a simple MQTT test message UI in which you can simulate any incoming MQTT message, as shown below. Just enter your MQTT topic and send a static value:

After a click on the ‘publish’ button those two values 30 and 70 will appear in your sensors for temperature and humidity. You can do that try-run for all of your MQTT bound sensors, which is a convenient feature for testing the server side functionality of your home automation.

Next step is to build a cheap temperature and humidity sensor that sends its measurements over WLAN to your Home Assistant MQTT broker. As base sensor board I decided to use an ESP8266 or an equivalent ESP32 microcontroller board that offers a cheap (~5 USD platform) with integrated WLAN stack and many digital and analog input pins. See below an image of the chosen Esp32 board:

The ESP8266 board can easily be flashed over a USB cable and it runs with a standard Arduino bootloader. You can use your Arduino Studio to program your tiny ESP8266 board. To measure the temperature and humidity, the combined digital DHT22 sensor was used, as shown below:

To connect the DHT22 sensor to your ESP8266 board simply attach the Vin pin to the 3V pin of the ESP8266 board, the Ground to any of the Ground pins and the signal pin to any of the ESP8266 digital input pins.

Following Arduino code snippet shows how to initialize the DHT22 sensor and how to read and report the sensor value through a MQTT message:

#include <ESP8266WiFi.h>
#include <EEPROM.h>
#include <DHT.h>
#include <DHT_U.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>

/* Globals used for business logic only */
// MQTT: ID, server IP, port, username and password
const PROGMEM char* MQTT_CLIENT_ID = "sensor2_dht22_s";
const PROGMEM uint16_t MQTT_SERVER_PORT = 1883;
// MQTT: topic
const PROGMEM char* MQTT_SENSOR_TOPIC = "/home/house/sensor1";
// sleeping time
const PROGMEM uint16_t SLEEPING_TIME_IN_SECONDS = 60; // 10 minutes x 60 seconds
// DHT - D1/GPIO5
#define DHTPIN 5

#define DHTTYPE DHT22

WiFiClient wifiClient;
PubSubClient client(wifiClient);

/* Business logic */
// function called to publish the temperature and the humidity
void publishData(float p_temperature, float p_humidity, float p_airquality) {
    // create a JSON object
    StaticJsonBuffer<200> jsonBuffer;
    JsonObject& root = jsonBuffer.createObject();
    // INFO: the data must be converted into a string; a problem occurs when using floats...
    root["temperature"] = (String)p_temperature;
    root["humidity"] = (String)p_humidity;
    root["airquality"] = (String)p_airquality;
    "temperature": "23.20" ,
    "humidity": "43.70"
    char data[200];
    root.printTo(data, root.measureLength() + 1);
    client.publish(MQTT_SENSOR_TOPIC, data, true);

setup() {
    Serial.print("INFO: Connecting to ");
    WiFi.begin(cconfig.ssid, cconfig.pwd);
    while (WiFi.status() != WL_CONNECTED) {
    Serial.println("INFO: WiFi connected");
    Serial.println("INFO: IP address: ");
    // init the MQTT connection
    client.setServer(cconfig.mqtt, MQTT_SERVER_PORT);


void loop() {

    if (WiFi.status() != WL_CONNECTED) {
        WiFi.begin(cconfig.ssid, cconfig.pwd);
        // Reading temperature or humidity takes about 250 milliseconds!
        // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
        float h = dht.readHumidity();
        // Read temperature as Celsius (the default)
        float t = dht.readTemperature();
        if (isnan(h) ||isnan(t)) {
            Serial.println("ERROR: Failed to read from DHT sensor!");
        else {
            publishData(t, h, aq);

Download the full source code at Github.

After connecting, flashing and running our tiny 15 USD wireless sensor we will continuously receive updates of actual temperature and humidity measurements. Those measurements are shown within your Home Assistant views. A very nice feature of Home Assistant is also that it stores historic measurements and that you can get a chart of past trends by a single click into the UI, as shown below:

Overall, Home Assistant is the perfect open source platform for your own home automation projects, no matter if you run it on your old laptop or on a tiny Raspberry Pi. It offers all the flexibility in terms of attaching any kind of MQTT sensor or message provider and is a great platform for playing around with your electronics hardware and it has a cool Web UI too!

Read more in my ebook on ‘Open Source Home automation’.

Open Source Home Automation: Introduction to Home Assistant ( and ESP32 based Automation (English Edition) von [Beer, Wolfgang]

Teach your Kids to code: Build your own OttoDIY robot

Coding is the lingua franca for all citizen in a modern technological society. By adapting any programming language your kids can learn very important skills, such as abstraction of a problem, defining and structuring a solution and to use a sequence of simple steps to fulfill complex tasks. Beside all the educational benefits of learning to use a programming language it is a lot of fun to see and experience your own programs while performing their autonomous tasks.

Another important skill within the actual technological society is to understand and control robotic hardware or electronics in general.

Nothing is more exiting for your kids as if something moves, makes a sound or blinks a lot of lights. Believe me when I say that kids are native robot and automation enthusiasts!

That said, I was really exited as I read about a vivid community of electronics and programming experts that shared the same idea of building the open educational robotics platform OttoDIY. OttoDIY offers all necessary resources, such as electronics, servos, sensors along with 3D printing models of the robot’s body parts to quickly jump into the world of electronics and robotic motion.

The OttoDIY community does share all information that is necessary to quickly print your own Otto robot and assemble the electronics.

Fortunately, the company I work for (kudos to Dynatrace) strongly supports innovation and coding for kids. Therefore, I had the chance to print our own Otto robot within the Dynatrace lab and I was astonished how easy it is to reproduce the body parts offered on thingiverse. See some impressions of the printing process below:

OttoDIY print UltimakerOttoDIY print Ultimaker

Otto’s brain arrived some weeks later and we immediately started to assemble the complete OttoDIY robot. With the assembly instructions given by Camilo Parra Palacio it was pretty easy to set the complete bot up and get it running within an hour.

One important hint here is to first check if the shipped servos do exactly fit into the dedicated sockets within your 3D print. Otherwise, you have to disassemble the complete bot again and rasp some more space.

After we assembled the complete OttoDIY bot, we downloaded the mBlock coding environment that was specifically built for kids and children. mBlock is a combination of Scratch and Arduino that allows kids to play around with physical computing and program first hardware and bots by simply using a structured visual block programming language, as it is shown below:

After some practice we finally were able to teach our Otto robot some quite cool dance moves, see below:


Kaggle: Join the global machine learning and AI community

Around a halve year back I stumbled over, a vital community portal of Artificial Intelligence and machine learning experts. Kaggle not only encourages people around the world to share thoughts and example data sets on popular machine learning tasks, they also host great AI challenges.

Since I joined the Kaggle community 6 month ago, I was fascinated about the individual challenges that were published. Those challenges range from predicting Mercari product prices over detecting icebergs from radar data to speech recognition tasks.

Many companies such as Google, Mercari or Zillow are hosting challenges where more than thousand of teams try to predict the best results. Often it is unbelievable how those teams solve these complex machine learning tasks.

Besides providing the challenges and the data sets necessary to wake the interest of global leaders within the machine learning and AI community, Kaggle also offers a tremendously powerful kernel execution environment. This execution environment consists of preconfigured Docker containers that were specifically designed for training models. In order to design and execute a machine learning kernel you simply edit the code online (Python, R, Notebook) and execute it within the Kaggle infrastructure.

As Kaggle docker containers are completely preconfigured you save a lot of time to download and prepare your environment.     



Kaggle really pushes the AI community forward in terms of offering a flexible and open platform for executing kernels and to quickly get hands on interesting data sets. The community platform also does a pretty good job in bringing the global community together and stimulates a broader and practical discussion outside the theoretical scientific community.

Besides if you need a quick start tutorial on how to train your first neural network, grab my eBook at Amazon: