In diesem Beitrag zeige ich die Schritte, um meinen Umweltsensor mit Button nachzubauen. Der Sensor misst Temperatur, Luftfeuchtigkeit und Luftdruck und hat einen Button um beliebige Aktionen auszulösen.
Vorbereitung
Was ist ESPHome?
Laut der Selbstbeschreibung auf esphome.io ist ESPHome ein System, um ESP8266 bzw. ESP32 Mikrocontroller mit Hilfe von einfachen Konfigurationsdateien zu programmieren.
ESPHome ist in Python geschrieben und lässt sich auch ohne Home Assistant einfach über pip install esphome
oder mit docker pull esphome/esphome
installieren. Ich benutze ESPHome als Home Assistant Addon, da bekommt man noch eine Weboberfläche zur Administration dazu.
Benötigte Hardware
- ESP8266 Mikrocontroller - z.B. Wemos D1 mini
- BME280 Sensor - mit I²C Breakoutboard
- Drucktaster
Das Gehäuse ist aus 3mm MDF gelasert. Ein Generator für solche Gehäuse ist zum Beispiel boxes.py.
Sensor und Button anschließen
Der BME280 wird per I²C angeschlossen, dafür brauchen wir die folgenden Pins:
- 5V → VIN
- G → GND
- D4 → SDA
- D5 → SCL
Den Pin für den Button kann man frei wählen, allerdings gibt es einige Pins, die spezielle Funktionen beim Booten auslösen. Ich habe hier Pin D3 verwendet, der zweite Pin des Buttons wird mit GND verbunden.
Ich habe das ganze mit Sockeln auf einer Lochrasterplatine aufgebaut, um die Bauteile leicht wieder auseinanderbauen zu können.
ESPHome Projekt in Home Assistant
Projekt anlegen
Auf der Weboberfläche klickt man auf den freundlichen roten Button mit dem Plus, um den Wizard für neue Projekte aufzurufen.
Als erstes vergibt man einen Namen.
Zweiter Schritt ist die Auswahl des Mikrocontrollers. Ich benutze für die meisten Projekte den Wemos D1 mini.
Als letztes folgt die Angabe der WLan-Daten und des Passworts für das Over-the-air Update. Ich benutze hier die von Home Assistant bekannte !secret
Notation. Details dazu weiter unten.
Nun ist der Wizard abgeschlossen und zeigt uns die nächsten Schritte, um den Mikrocontroller zu programmieren.
Nachdem man den Wizard mit Submit geschlossen hat, wird man noch auf die Schnittstellenauswahl in der oberen Ecke hingewiesen.
Dateiorganisation und !secrets
In Home Assistant liegen die Projektdateien im Verzeichnis /config/esphome
. Das Beispiel oben hat eine umweltsensor.yaml
erzeugt.
|
|
Im gleichen Verzeichnis habe ich eine secrets.yaml
angelegt. Die Einträge darin können in anderen .yaml
Dateien mit !secret
importiert werden. Das hat den Vorteil, dass man die Projektdatei mit anderen teilen kann, so wie ich hier, ohne dass man seine Zugangsdaten weitergibt.
Das erste Mal Flashen
Zum ersten Flashen muss der Mikrocontroller per USB mit dem Rechner verdunden werden, auf dem ESPHome läuft. In meinem Fall ist das der Raspberry Pi auf dem Home Assistant installiert ist.
Meistens wird der Port des Mikrocontrollers nicht sofort angezeigt, wenn man das USB Kabel anschließt. Das hängt mit dem Docker System zusammen auf dem Home Assistant basiert. Der Workaround ist das Addon neuzustarten, nachdem der Mikrocontroller angeschlossen ist.
Wenn nichts anderes angeschlossen ist, wird wahrscheinlich /dev/ttyUSB0
angezeigt, in meinem Fall ist der Mikrocontroller an /dev/ttyUSB1
.
Damit die Zugangsdaten korrekt importiert werden, müssen wir noch die erzeugte .yaml
Datei bearbeiten und die Anführungszeichen bei allen Einträgen mit !secret
entfernen. Dazu klickt man auf EDIT unter dem entsprechenden Eintrag.
Als letztes klickt man auf UPLOAD um das Flashen zu starten.
Wenn alles korrekt funktioniert hat, sollte nun aus der .yaml
Datei der Arduino-Code generiert werden. Dabei werden im Hintergrund alle benötigten Bibliotheken heruntergeladen, der Code kompiliert und der Upload gestartet.
In der folgenden Logging-Ausgabe kann man kontrollieren, ob man die WLAN Daten korrekt eingeben hat.
Ab jetzt kann man den Mikrocontroller vom Raspberry Pi trennen und übers WLAN programmieren. Dafür stellt man die Schnittstelle oben auf Over-the-Air um.
Sensor und Button konfigurieren
Damit der Sensor angesprochen werden kann wird als erstes die I²C Komponente geladen. Die Option scan: True
sorgt dafür, dass bei jedem Boot der Bus nach Geräten gescannt wird.
|
|
Da der BME280 drei Größen misst, müssen entsprechend die drei Optionen temperature
, pressure
und humidity
konfiguriert werden.
Unter filters:
ist beim Temperatursensor ein statischer Offset von -7 Grad eingestellt, den ich im Vergleich mit einem zweiten Sensor ermittelt habe. Ebenso ist bei der Luftfeuchtigkeit ein statischer Offset von +10 Prozent eingestellt.
|
|
Der Button wird als Binärsensor konfiguriert. Da der Button mit GND verbunden ist, muss hier der interne Pullup-Widerstand aktiviert werden und mit inverted: True
der Zustand invertiert werden. Damit liefert der Sensor on, wenn der Button gedrückt wird.
|
|
Mit Home Assistant verbinden
Nachdem das vollständige Programm auf den Mikrocontroller geladen ist, müssen die Sensoren noch in Home Assistant einbunden werden. Die Einrichtung erfolgt über die Integrationsseite in den Home Assistant Einstellungen.
Als Hostadresse gibt man den Namen des Projekts ein, in diesem Fall umweltsensor.local
.
Nach der API Passwort Abfrage werden automatisch die Entities für die konfigurierten Sensoren zu Home Assitant hinzugefügt.