Die Programmierung von Smarthome Sensoren gestaltet sich nicht immer einfach. Hinzu kommt auch noch die Vielfalt an Boards wie WEMOS, ESP8266, ESP32, Feather Board von Adafruit , TTGO, Heltec und viele mehr. Dann die verschiedenen Sensoren , wie BMP280, BME280, BME680, DHT11, DHT22, SPS30 usw. Displays wie SSD1306, LCD 20×4 etc. Eine weitere Herausforderung sind die verschiedenen Frameworks und IDE Software Komponenten wie Arduino IDE, PlatformIO, Visual Studio und noch mehr.
Die Lernkurve ist flach und der Frustlevel sehr hoch. Warum gibt es kein Tool das einfach zu bedienen ist und keine Einarbeitungszeit von Wochen oder Monate benötigt? Bei den Frameworks kommt erschwert hinzu, dass wenn diese nach Wochen mal wieder auf den Rechner gestartet werden, jedes Mal eine Einarbeitungszeit benötigt, wenn man nicht täglich damit arbeitet. Muss auch selbst sagen PlatformIO ist ein wunderbares Werkzeug, nur nervt es mich jedes mal wieder, neu einlesen und einarbeiten zu müssen. Bin eben von den sogenannten „DEVOPS“ der mit „OPS“ und weniger Entwicklung macht. Es ist ein ewiger Kampf mit der Vielzahl von verschiedenen Hardware- und Softwarekomponenten. Ein weiteres Problem sind die verschiedenen Protokolle wie MQTT, LoRa, WLAN, UART, Serial, PWM und was hat man noch nicht alles gesehen.
Es gibt Hoffnung und auch eine Lösung, sie nennt sich „ESPHOME“ die auf Basis von Home Assistant läuft. Home Assistant kann ohne Einschränkungen und Probleme auf einen Raspberry Pi 3 installiert werden. Das Programm „Raspberry Pi Imager“, enthält „Home Assistant“ bereits als Basis Image, welches direkt auf eine SD-Karte kopiert und installiert werden kann. Sicher gibt es weitere Installationsmöglichkeiten, nur in diesem Fall soll es einfach sein und installieren dieses auf einen Raspberry Pi.
Die Code-Schnipsel für die einzelnen Sensoren, Methoden, Boards, Protokolle werden als Bausteinblöcke angeboten. Diese werden in eine YAML-Datei übertragen für das entsprechende Board. Aus dieser Konfigurationsdatei wird die Firmware automatisch erstellt.
Ein Beispielaufbau mit einer NodeMCU V3, DHT22 Sensor und LCD 2004 Display.
Was wird benötigt:
- HD44789 2004 LCD Display https://amzn.to/3xGheqN ( * )
- Raspberry Pi 3B+ https://amzn.to/3wyg92R ( * )
- Raspberry Pi Netzteil https://amzn.to/2VvvvZ8 ( * )
- Sensor Board NodeMCU V3 https://amzn.to/3AS9UdE ( * )
- DHT22 Sensor https://amzn.to/3wCWEGz ( * )
- Breadboard https://amzn.to/3rbjELQ ( * )
- Jumper Wire Kabel https://amzn.to/3r5NwJg ( * )
- https://www.home-assistant.io/installation Basis Installation
- esphome.io Software Module
- https://www.raspberrypi.org/software/
Software Installation:
Wenn die vorbereitete SD-Karte in den Raspberry Pi eingelegt und die Stromversorgung angeschlossen wurde, könnte die Installation mit „http://homeassistant.local:8123“ im lokalen Netzwerk aufgerufen werden. Die Installation benötigt nochmals ca. 20 Minuten bis die Webseite im Browser erscheint. Dazwischen kann es sein dass die Webseite nicht erreichbar ist. Den Raspberry Pi nicht stromlos machen oder neu starten, es werden Docker Container installiert und updated, welches einfach seine Zeit benötigt. Also etwas Geduld aufbringen und nicht abbrechen. Es besteht die Gefahr dass Home Assistant nicht korrekt installiert wird.
Wenn die automatische Installation abgeschlossen ist und ein Benutzer eingerichtet wurde, kann mit der Installation von „ESPHOME“ gestartet werden.
Füge nun einen Sensor hinzu. Voraussetzung das Board unterstützt WIFI und kann sich ohne Einschränkungen ins drahtlose Heimnetzwerk anmelden. Gebe hier einen Namen für den Sensor an und trage die SSID und das Passwort für WIFI ein und klicke auf „Next“, das Gerät wird nun erstellt. Das neu erstellte Gerät sollte nun in der Geräteübersicht erscheinen. In diesem Beispiel sind schon ein paar Geräte angelegt.
Einrichtung eines Sensor:
Besuche die Seite esphome.io und suche die Geräte die für den Sensor benötigt werden. Anbei eine Liste für dieses Beispielprojekt :
- https://esphome.io/devices/nodemcu_esp8266.html?highlight=nodemcu
- https://esphome.io/components/sensor/dht.html?highlight=dht22
- https://esphome.io/components/display/lcd_display.html?highlight=lcd
- https://esphome.io/components/web_server.html?highlight=webserver
- https://esphome.io/components/i2c.html?highlight=i2c
Jeder Link beschreibt wie der Code Schnipsel aussehen muss, damit das Gerät funktioniert und die Firmware automatisch erstellt wird. Wenn der Code keinen Syntaxfehler enthält, wird ein Binäres File erstellt und per USB an den Mikrocontroller ( NodeMCU V3) übertragen. Es bedarf hier keiner weiteren Komplierungsmaßnahmen oder Nachbearbeitung des Codes. Die Firmware für den Mikrocontroller ( MCU) wird vollständig automatisiert erstellt und übertragen. Es muss lediglich der MCU per USB an den Raspberry Pi angeschlossen werden.
Hier eine kleine Übersicht der Sensoren die unterstützt werden:
Software Code erstellen:
Der Code der einzelnen Komponenten im Überblick:
esphome: name: nodemcuv3 # Name für den Sensor der auch per Netzwerk erreichbar ist "nodemcuv3.local" platform: ESP8266 # Prozessor auf dem Board board: nodemcuv2 # Board # Enable logging logger: # Logging Ausgabe # Enable Home Assistant API api: # Wird für Remote Befehle benötigt time: # Zeitmodul für NTP - platform: sntp # NTP Server id: sntp_time # Wird als Variablenname benötigt web_server: # Aktivierung Webserver port: 80 # Port für Webserver ota: # Update per WLAN ermöglichen password: "fa3873a326974f50aac5c040e0bacec7" # Passwort für WLAN Update wifi: # Aktivierung WLAN auf dem MCU ssid: "WLAN-1" # WLAN SSID password: "12345678" # WLAN-Passwort # Enable fallback hotspot (captive portal) in case wifi connection fails ap: # Aktivierung Accesspoint des MCU falls kein WLAN zur Verfügung ist ssid: "Nodemcuv3 Fallback Hotspot" # Name des Hotspot password: "cmrKei0HaXp1" # Passwort für Accesspoint i2c: # Aktivierung des I2C Bus sda: D2 # Port des SDA I2C Bus - Benötigt für LCD Display scl: D1 # Port des SCL I2C Bus - Benötigt für LCD Display sensor: # Aktivierung eines Sensor - platform: dht # Aktivierung des DHT Sensor pin: D7 # Dataport für DHT Sensor temperature: # Name für Messwert name: "Living Room Temperature" # Name für Sensorpunkt id: temperature # Variablenname für Temperatur humidity: # Name für Messwert name: "Living Room Humidity" # Name für Sensorpunkt id: humidity # Variablenname für Luftfeuchte update_interval: 60s # Alle 60 Sekunden Sensor abfragen display: # Aktivierung des Display - platform: lcd_pcf8574 # Angabe des Prozessorboard für Display dimensions: 20x4 # Abmessung des Display address: 0x27 # Adresse des Display am I2C Bus lambda: |- # Grafikbefehl it.printf(0, 0, "Temperature: %.1f C", id(temperature).state); # Ausgabe Temperatur am Display it.printf(0, 1, "Humidity: %.1f%%", id(humidity).state); # Ausgabe Luftfeuchte am Display it.strftime(0, 2, "%d-%m-%Y %H:%M", id(sntp_time).now()); # Ausgabe Datum und Uhrzeit am Display it.print(0, 3, "blog.unixweb.de"); # Werbeblock :-)
Der nachfolgende Screenshot zeigt den Sensor, wenn dieser über den Webbrowser aufgerufen wird mit „nodemcuv3.local“ über Port 80 :
Fazit :
ESPHOME ist ein hervorragendes Tool um in sehr einfachen Weise Mikrocontroller mit der passenden Firmware zu flashen. Die Code-Blöcke für Sensoren, Display, WLAN oder andere Protokolle sind relativ schlank und gut lesbar. Es empfiehlt sich auf jeden Fall immer die Webseite esphome.io zu besuchen und die Informationen dazu zu lesen, es erklärt sehr viel wenn auch in Englischer Sprache.
Werde mich weiterhin bemühen hier im Blog die Codeblöcke zu erklären. Wenn es Fragen gibt, wie immer die Kommentarfunktion nutzen.
Update 29.03.2022 :
Das ESPHome ist als Plugin nicht mehr in Homeassistant verfügbar. Dieses muss jetzt manuell hinzugefügt werden. Das schöne ist, dass bestehende Sensoren mit ESPHome direkt erkannt werden.
Hier der Aufruf für die manuelle Installation des ESPHome in Homeassistant. Bedingung ist dass der Name „homeassistant.local:8123“ so in Deinem Netzwerk erreichbar sein muss.
Alle Artikel auf dieser Seite sind mit einem sogenannte Provision-Links. Wenn du auf so einen Verweislink klickst und über diesen Link einkaufst, bekomme ich von deinem Einkauf eine Provision. Weiterführende Infos gibt es hier unter Punkt 8 in der Datenschutzerklärung https://blog.unixweb.de/datenschutzerklaerung/