Inhalt

Klimadaten mit ESPHome und Home Assistant

Idee

Eine gute Grundlage für so manche Automatisierung in Home Assistant ist die Kenntnis über die Temperatur und Luftfeuchtigkeit in den Räumen. Dafür gibt es viele Sensoren, die entsprechende Daten erheben - in fast jeder Preisklasse.

Ich habe zudem den Wunsch, am Sensor selbst direkt die Daten ablesen zu können. Natürlich kann man jetzt ein ESP basiertes Board mit einem DHT Sensor ausstatten - oder man schaut, was es so fertiges auf dem Markt gibt.

Dabei stößt bei relativ schnell auf die Xiaomi Mijia Sensoren. Diese sind preiswert und liefern gute Werte. Allerdings sind diese Sensoren nicht direkt in Home Assistant integrierbar, sondern möchten, dass die Tuya Cloud genutzt wird. Das ist für mich ein No-Go.

Warum kein Tuya?

Grundsätzlich sind Cloudbasierte Dienste immer eine potentielle Schwachstelle. Darüber hinaus ist die Verfügbarkeit ein Problem. Jedem fällt hier sicher ein Dienst oder auch ein Computerspiel ein, was eigentlich toll war, aber mittlerweile nicht mehr nutzbar ist, weil der Hersteller die Server abgeschaltet hat.

Tuya bildet hier noch einen extra Punkt: Der Anbieter und seine Cloud stehen in China. Datenschutz… oder: Was?

Tuya trifft man im Übrigen auch sehr oft an, manchmal heißt es nicht Tuya sondern Smart Life oder hat einen anderen kreativen Namen. Der Grund dafür ist recht simpel; Hersteller die Smart-Home machen wollen, aber keine Lust auf die Entwicklung haben, können bei Tuya Cloud für kleines Geld einfach die komplette Software und Infrastruktur einkaufen.

Wer jetzt denkt, das ist doch unsicher, der hat vermutlich recht – dazu verweise ich auf den tollen Vortrag von Michael Steigerwald auf dem 35C3: Smart Home - Smart Hack.

Geht es auch ohne Tuya?

Tuya ist auf den Geräten erstmal eine Firmware. Eine Firmware kann in aller Regel einfach neu geflasht werden. Je nach Gerät ist das unterschiedlich aufwendig. Bei WLAN gestützten Geräten muss mit Hilfe eines Raspberry Pi ein falscher Updateserver zur Verfügung gestellt werden, bei Bluetooth Geräten kann man zum Glück oftmals einfach ein OTA Update Paket senden und das Gerät flasht sich dann selbst. Aber dazu später mehr.

Der Aufbau

Ich habe mich für den Sensor LYWSD03MMC entschieden, der auch schon etwas bekannter ist. Im offiziellen Shop von Xiaomi kostet der Sensor etwa 10 €, bei AliExpress ist er oft für 4-5 € zu haben. Display ist dran, die Knopfzelle hält lange, und die Datenübertragung erfolgt per Bluetooth.

LYWSD03MMC

Moment,.. Bluetooth? Home Assistant hat doch kein Bluetooth? Das stimmt. Selbst wenn es das hätte wäre es vermutlich nicht so simpel. Die Übertragung der Messwerte findet via Bluetooth Low Energy (BLE) statt, das keine sonderlich große Reichweite hat.

Hierfür kommt ESPHome und ein ESP32 basierter Mikrocontroller ins Spiel. Dieser bringt WLAN mit, aber auch das benötigte BLE. Je nach Größe des Hauses / der Wohnung werden davon zwei oder drei benötigt. Ich habe mich für den ATOM Lite ESP32 entschieden, der ist super klein und kostet je nach Lieferant aktuell 10-12 €.

ATOM Lite ESP32

ESPHome ist ein Framework für die einfache Programmierung von Mikrocontrollern mit ESP8266 oder ESP32 Chips. Die Konfiguration erfolgt in YAML und es gibt ein Addon für Home Assistant, welches nicht nur das schreiben der YAML Dateien erleichtert, sondern auch danach die Firmware-Update-Datei baut und als OTA Update an den Mikrocontroller sendet.

Hinweis
Dieser Artikel behandelt die Einrichtung von ESPHome und die Integration darüber. Es wird in Zukunft auch einen Artikel über Zigbee basierte Geräte geben, die direkt in Home Assistant integriert werden können.

ESPHome installieren

ESPHome ist ein Add-On, das entweder im Add-On Bereich der Installation zu finden ist oder über diesen Direktlink. Nach dem Klick auf Installieren dauert es in der Regel einen Moment, da im Hintergrund das Add-On heruntergeladen werden muss und dann installiert wird. Sobald es fertig ist, kann auf Benutzeroberfläche öffnen geklickt werden. Sollte hier ein 502 Fehler auftreten, einfach nochmal probieren.

In der Web UI ist es jetzt erstmal recht leer, da noch keine Geräte konfiguriert sind. Das lässt sich mit einem Klick auf + Gerät hinzufügen ändern.

Warnmeldung neues Gerät
Die Web UI erkennt, dass die aktuelle Verbindung unverschlüsselt ist

Wahrscheinlich öffnet sich eine Warnung, die meldet, dass die aktuelle Verbindung zu Home Assistant nicht über HTTPS (also eine SSL geschützte Verbindung) stattfindet, sondern ungesichert ist. Das ist unpraktisch, weil ESPHome ein Web-Flashtool hat, um die erstmalige Firmware auf den Mikrocontroller zu bringen. Das geht aber nur über eine verschlüsselte Verbindung. Deswegen einfach auf Open ESPHome Web klicken und auf der Seite weitermachen.

Der Mikrocontroller wird per USB an den aktuellen PC (nicht an das HomeAssistant Board!) angeschlossen und über die Webseite wird die Firmware geflasht. In dem Prozess wird auch die WLAN Zugangsdaten abgefragt, mit denen sich der Mikrocontroller dann später ins Netzwerk einwählt.

Ist das abgeschlossen, kann der Mikrocontroller von dem PC getrennt werden und an seinem zukünftigen Platz angeschlossen werden. In Home Assistant, bzw in der ESPHome Web UI sollte jetzt ein neues Gerät angezeigt werden zusammen mit der Markierung Adopt, darauf einmal klicken; dann wird der Mikrocontroller in die Verwaltung von Home Assistant übernommen.

Mijia Sensoren flashen

Während oder Nachdem die Mikrocontroller alle aufgesetzt sind und adoptiert wurden, können die Sensoren bereit gemacht werden. Dazu wird ein aktuelles Smartphone benötigt, das Bluetooth Low Energy unterstützt.

Mit dem Smartphone wird der Telink Flasher geöffnet, ebenfalls einfach eine Webseite die sich über Bluetooth mit dem Thermometer verbinden kann und die Firmware übermittelt.

Gerätesuche
Gerätesuche

Zunächst auf Connect klicken, vom Browser öffnet sich ein Fenster mit einer Gerätesuche per Bluetooth. Ein Gerät mit dem Namen LYWSD03MMC sollte gefunden werden. Ist das der Fall, kann es ausgewählt werden und auf Koppeln geklickt werden.

Firmwareauswahl
Firmwareauswahl

Nach einem Moment sollte das Thermometer verbunden sein und die Firmwareauswahl erscheint. Hier kann die aktuelle Firmware ausgewählt werden, die dann auf das Thermometer geflasht wird. Bitte Custom Firmware anwählen, hier ist die Version 4.6 aktuell.

Statusanzeige
Fortschritt des Updates und Anzeige aktueller Messwerte des Sensors

Nach dem Klick auf Start Flashing wird die neue Firmware übertragen. Dies dauert einen Moment, auch wenn das Paket kaum einen Megabyte groß ist. Ist dies abgeschlossen, trennt sich der Sensor automatisch vom Smartphone und startet neu.

Log-Ausgabe
Logausgabe für Meldungen und Hinweise

Unten auf der Seite ist eine kleine Log Ausgabe, die den Verlauf anzeigt. Wie zu sehen ist, dauert der ganze Arbeitsschritt nur 1-2 Minuten.

ESPHome konfigurieren

Wie bereits erwähnt, erfolgt die Konfiguration in YAML. Das ist ein Textformat, das für Menschen gut lesbar ist und für Maschinen gut verarbeitet werden kann. Meine Grundkonfiguration umfasst einen angepassten Namen sowie eine statische IP Adresse.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
esphome:
  name: "esphome-ab-cd"
  friendly_name: ESPHome-ab-cd

# ...

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  manual_ip:
    static_ip: 192.168.2.60
    gateway: 192.168.2.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "esphome-ap-ab-cd"
    password: !secret ap_password

Der Name des Boards ist immer esphome- und dann die letzten beiden Blöcke der MAC-Adresse. Das ist simpel und auch im Router halbwegs gut zu finden. Die statische IP Adresse vereinfacht das spätere Einbinden in Home Assistant und stellt sicher, dass es nicht im Block der dynamischen Adressen liegt. Als letztes ist noch ein Fallback Hotspot aktiviert, falls das WLAN nicht erreichbar ist.

Praktisch ist, dass mit Secrets gearbeitet werden kann. Das sind Variablen, die in einer separaten Datei abgelegt werden und dann in der Konfiguration referenziert werden. Das verhindert nicht nur das versehentliche Veröffentlichen von Passwörtern, sondern erleichtert auch das Austauschen von Passwörtern, wenn sich diese ändern.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
esp32_ble_tracker:

sensor:
  - platform: pvvx_mithermometer
    mac_address: "00:11:22:33:44:55"
    temperature:
      name: "44-55 Temperature"
    humidity:
      name: "44-55 Humidity"
    battery_level:
      name: "44-55 Battery-Level"
    # battery_voltage:
    #   name: "44-55 Battery-Voltage"
    signal_strength:
      name: "44-55 Signal"

Damit die Daten korrekt erkannt werden muss zum einen der esp32_ble_tracker aktiviert werden und zum anderen eine Liste an Sensoren definiert werden. Die MAC-Adresse ist dabei die des Sensors, die Namen sind frei wählbar. Ich habe mich dafür entschieden die MAC-Adresse als Namen zu nutzen, da ich die Zuordnung in Home Assistant über den Anzeigenamen mache. Das hat den Vorteil, dass ich die Sensoren auch mal tauschen kann, ohne dass ich in Home Assistant sonderlich viel ändern muss.

Sensorname = Entity ID

..so scheint zumindest oft die automatische Vergabe in Home Assistant abzulaufen. Das ist manchmal sicherlich ideal. Manchmal aber auch nicht. Der Anzeigename kann beliebig oft geändert werden – Die Entity ID nicht.

Übrigens werden die Namen hier auch zusammen gesetzt, das heißt, sensor.esphome_ab_cd_44_55_humidity gibt direkt Auskunft, welcher Sensor das ist und über welchen ESPHome Node die Daten kommen.

Die Entwicklerwerkzeuge bieten eine Möglichkeit, die jedoch mit der Gefahr kommt, dass Funktionen in Home Assistant nicht mehr korrekt arbeiten. Also lieber möglichst frei halten und dann in Home Assistant den Anzeigenamen setzen.

Jetzt noch oben auf Save klicken, dann Install. Jetzt öffnet sich ein kleines Log-Fenster in dem der Fortschritt des Kompilierens und des Flashens angezeigt wird. Ist das abgeschlossen, kann das Fenster geschlossen werden. Der ESP startet kurz neu und bereits wenige Minuten später sollten die ersten Messwerte in Home Assistant ankommen.

Dashboard

Im Dashboard kann jetzt ein neues Karten-Element hinzugefügt werden, dazu entweder über das Plus-Zeichen und die Entity Auswahl geführt die passenden Sensoren suchen oder direkt den YAML Code einfügen.

1
2
3
4
5
6
7
type: entities
entities:
  - entity: sensor.esphome_ab_cd_44_55_humidity
    name: TK Luftfeuchtigkeit
  - entity: sensor.esphome_ab_cd_44_55_temperature
    name: TK Temperatur
title: Küche

In diesem Beispiel ist ein Sensor, den ich zur Überwachung unserer Kühltruhe in ebendieser ausgesetzt habe. Diese Messwerte lassen sich dann auch in Automatisierungen verwenden, um z.B. bei zu hoher Temperatur eine Benachrichtigung zu senden.

1
2
3
4
5
6
7
8
9
alias: "Temperatur über -15 Grad"
trigger:
  platform: numeric_state
  entity_id: sensor.esphome_ab_cd_44_55_temperature
  above: -15
action:
  service: notify.mobile_app_<your_device_id>
  data:
    message: "Warnung! Der Tiefkühlschrank wird zu warm!"

So könnte diese Automatisierung aussehen.

Ausblick

ESPHome ist ein mächtiges Werkzeug, das es ermöglicht, Mikrocontroller einfach und schnell in Home Assistant zu integrieren. Die Anwendung damit Thermometer abzurufen und weiterzugeben ist nur ein kleiner Anwendungsfall. ESPHome bietet da weit mehr Potential, auch über die verfügbare GPIO Schnittstelle sowie den GROVE Anschluss (4 Pins, z.B. für I2C oder UART) hinaus. So kann beispielsweise auch ein Display betrieben werden oder eine Infrarot-Diode die eine Fernbedienung simuliert.