Author Archives: wolfgang

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 (Hass.io) 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 Hass.io. 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:

sensor:
  - 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:

default_view:
  name: Home
  view: yes
  entities:
    - sensor.airquality
    - sensor.temperature
    - sensor.humidity
    - sensor.yr_symbol
    - sun.sun
    - camera.mjpeg_camera
    - device_tracker.alice
    - device_tracker.bob
    - switch.robby
    - switch.lamp
indoor:
  name: Livingroom
  view: yes
  entities:
    - sensor.temperaturelivingroom
    - sensor.humiditylivingroom
    - media_player.livingroom
pool:
  name: Pool
  view: yes
  entities:
    - 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 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 Esp32 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 Esp32 board. To measure the temperature and humidity, the combined digital DHT22 sensor was used, as shown below:

To connect the DHT22 sensor to your Esp32 board simply attach the Vin pin to the 3V pin of the Esp32 board, the Ground to any of the Ground pins and the signal pin to any of the Esp32 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 */
#define MQTT_VERSION MQTT_VERSION_3_1_1
// 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

DHT dht(DHTPIN, DHTTYPE);
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;
    root.prettyPrintTo(Serial);
    Serial.println("");
    /*
    {
    "temperature": "23.20" ,
    "humidity": "43.70"
    }
   */
    char data[200];
    root.printTo(data, root.measureLength() + 1);
    client.publish(MQTT_SENSOR_TOPIC, data, true);
    yield();
}

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

 

void loop() {
    dht.begin();

    if (WiFi.status() != WL_CONNECTED) {
        WiFi.mode(WIFI_STA);
        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);
        }
        delay(5000);
    }
}

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!

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 Kaggle.com, 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:

TabShop free Android Point of Sale system adds User Management

The new TabShop v142 now adds a long awaited feature to manage users such as normal cashier users and admin users who can change settings and product stock. Invoices as well as invoice prints now also show the active user which enables specific user related reports on income and revenue. Invoice CSV export as well as invoice sync with Google Spreadsheet now also shows the table and user who checked out an invoice.

Ars Electronica Festival 2017: Artificial Intelligence

This years Ars Electronica Festival theme is the all present topic of Artificial Intelligence. The Ars Electronica Festival 2017 theme “Artificial Intelligence – The Other I.” focuses on the cultural, psychological, philosophical and spiritual aspects of AI.

As an media and art festival by definition that often uncovers the philosophical background of popular trends and hypes, this years Festival takes up the challenge of looking behind the cultural aspects of the ever-present topic of AI.

The discussion on AI, as the festival title already suggests will bring us a critical discourse on our own identity and existence.

Is AI killing our jobs and taking over many of our traditional working domains, similar to the industrial revolution in the 18th century?
How do we deal with digital personalities or with the social impact of smart machines handling many parts of our daily lives?
The Ars Electronica Festival also questions the acceptance of such super machines and if humans will ever be able to accept them?
Visit the festival in POSTCITY Linz, September 7-11, 2017.

Read more about the principles of AI and machine learning, refer to following Kindle eBook on ‘Applied Artificial Intelligence’.

Astrophysicists use Artificial Intelligence to speed up Analysis of Gravitational Images


SLAC and Stanford university recently announced a breakthrough of using neural networks, one of the base algorithms of Artificial Intelligence, to spped up their data analysis effort. The spacetime data SLAC and Standford analysis is crucial for the understanding of the universe. By using neural networks to analyze those complex distortions in spacetime known as gravitational lenses the Stanford researchers were able to analyze the data 10 million times faster than traditional methods.
The researchers fed a neural network with half a million of images of gravitational lenses, which typically takes a day. Once the training process is finished, the trained AI neural network is capable of detecting similar lenses within a fraction of a second. The precision of the newly introduced Artificial Intelligence based methodology is comparable to the traditional approach that took weeks to finish.

This is another application domain where Artificial Intelligence helps to speed up traditional analysis methods from taking month to less than a second. We can expect that the analysis of spacetime anomalies will gain a lot of traction, now that the analysis process does not take years. Refer to the original press release here.
If you are interested into how artificial neural networks are implemented, read my Kindle eBook on ‘Applied Artificial Intelligence’.

TabShop Software for your Bar or Restaurant

Bar pos cashier TabShop

Today, the brand new TabShop version 132 was released! It comes with some improvements such as sub cent item prices, improved image invoices and a lot of smaller bug fixes. Don’t hesitate and update now to the updated TabShop retail and restaurant cashier app for Android. The free version comes with a whole lot of features and free of ads. TabShop helps you to organize your own personal business. No matter if you run a bar or a restaurant, TabShop offers all the features you need to manage your stock, invoices and accounts.

Meet Ozobot my kids best robot friend

On my last trip to San Francisco this year I visited the California Academy of Sciences where i was immediately fascinated by a tiny robot called Ozobot. Ozobot looks amazingly cute and is able to perform a lot of magic that ultimately teaches your kids how to program by using a visual programming language thats similar to MIT Scratch. Ozobot moves along a black line and reacts on color codes that tell the bot to either turn, move faster or slower or to change the color of its led. Even if your kids are not programming so far its fun to paint mazes where the little friend moves around. Ozobot’s primary sensor is the color scanner that allows the bot to follow the black line and to read color codes in order to control its movements. Another amazing feature I found our recently is the possibility to program the little robots movements by using a visual block language called Ozobot Bit Blockly. Simply program your own Ozobot program online and transfer the program visually onto your bot without any cable involved. Its super cool to see how the bot receives its new program by just sending color codes to its scanner. Ozobot is clearly one of the most innovative teaching robots available right now, because its super simple to use and it looks so cute.

Ozobot kids learning to program

Ozobot Bit blockly

TabShop Release 127 adds Customer Account Feature

TabShop free Android Point of Sale

The brand new release 127 of TabShop, the popular free Android Point of Sale system, now adds some new features around the topic of managing customer accounts and customer balances. TabShop now directly supports typical hotel room and checkout scenarios in which customers are consuming services and products during their stay directly onto their room account and checkout the entire invoice when they leave. Another now supported scenario is to buy a value balance for a customer account (e.g. school kids, sports club members) and further on checkout invoices based on that positive value balance without involving any money. With version 127 the popular TabShop cashier and POS system further enhances its already huge list of features by adding customer account management. Don’t hesitate, TabShop is free and without ads, so try it out now.

My new o’Reilly eBook on Mobile App Analytics

Mobile App Analytics o'Reilly by Wolfgang BeerThanks to Dynatrace i got the chance to sum up my experiences of analyzing and optimizing mobile apps within a brand new o’Reilly eBook ‘Mobile App Analytics’. Mobile app user experience plays the most important role for app publishers in global marketplaces, as a negative experience quickly destroys your brands reputation and decreases your business revenue. Successful app publishers measure mobile app performance, monitoring crash reports and observing your users behavior and react quickly on issues before the users react with bad user reviews.

If you are quick you can grab a free copy of my ebook here.