Smarthome Sensoren einfach selbst programmieren

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:

Home Assistant Raspberry Pi
Home Assistant Raspberry Pi

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.

Home Assistant Startbildschirm
Home Assistant Startbildschirm

Wenn die automatische Installation abgeschlossen ist und ein Benutzer eingerichtet wurde, kann mit der Installation von “ESPHOME” gestartet werden.

Installation ESPHOME in Home Assistant

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:

Übersicht der Sensoren

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 :

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:

Kleine Übersicht von Sensoren

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 :

Webserver des Sensor
Installation der Software auf den NodeMCU per Mausklick

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.

Die mit Sternchen (*) gekennzeichneten Verweise sind 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/

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.