ESPHome – Home Automation mit ESP32 mal wirklich ganz einfach

Mit jedem Tag zeigt sich, dass Home Automation ein sehr mächtiges Werkzeug geworden ist. Im Zuge der Tests bin ich auf ESPHome gestoßen, und jetzt geht es so richtig los.

Projekt: Heimautomatisierung

Kontakt: Boris Dirnfeldner

Link– eigenes Projekt –

Da ich viel mit ESP32 gearbeitet habe, möchte ich diese Erfahrungen gerne auch in der Hausautomation verwenden. Obwohl es schon viele Teile zu kaufen gibt, sind halt nicht alle Wünsche mit Kaufteilen zu erfüllen oder manchmal dann doch zu teuer. Ein gutes Beispiel sind Helligkeitssensoren, die als Kaufteile mir einfach zu teuer sind. Mit ESPHome fand sich aber eine Lösung, die mir eine sehr einfache Anbindung von solchen Kleinstlösungen erlaubt ohne sich mit den vielen kleinen dafür erforderlichen Schritten beschäftigen zu müssen (wie z.B. Crosscompiler, Apps, Bibliotheken, Fehlerbeseitigung).

https://esphome.io/

Grundsätzlich kann man über mehrere Wege mit ESPHome arbeiten, allerdings sind auch Voraussetzungen zu beachten. Richtig komfortabel wäre die Integration, wenn man Home Assistant im eigenen OS Supervidord am Laufen hat, z.B. am Raspberry. Dann könnte man die Integration von dort laden und komplett über Home Assistant arbeiten.
Ich habe Home Assistant Core unter Docker am Laufen was den Durchgriff auf das drunter liegende Betriebssystem erheblich erschwert, daher funktioniert das so nicht.
Daher bleibt der Weg über die Kommandozeile manuell und später nur das fertige Gerät zu integrieren. 

Installing ESPHome Manually.

Meine Umgebung ist ein Windows 10 PC und Python 3.10 installiert über Windows Store. Auf einem Linux geht das praktisch genauso.
Auf der Kommandozeile kann ich damit die benötigten Packages nachinstallieren.

pip3 install wheel

pip3 install esphome

Anmerkung dazu: Ich würde empfehlen, eine eigene Installation von Python aufzubauen, die Store-Variante ist später eklig im Handling.
z.B. findet sich bei mir nach der Installation das Kommando esphome in C:\Users\User\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Scripts
Ob alles geklappt hat, kann man einfach mit einem Aufruf prüfen:

esphome version
Version: 2023.05.04

So weit ist also alles gut, nun geht es an das eigentliche „Programm“.

Getting Started with the ESPHome Command Line — ESPHome
Physically Connecting to your Device — ESPHome

Aus einem früheren Projekt hatte ich schon ein fertig aufgebautes System ESP32 (Wemos D1 Mini) mit BME280 Sensor mit einer eigenen Software.
Der hätte für Home Assistant erweitert hätte werden müssen und dann entsprechend einkonfiguriert. Das ist mein Testobjekt oder Opfer.

Um ESPHome auf den ESP zu bekommen, muss zuerst ein geeignetes YAML erstellt werden.
Die Basiskonfiguration kann man leicht über den Wizard vom Kommandozeilentool erstellt bekommen.

esphome wizard test.yaml

Mit der damit erstellen Datei kann man dann die Konfiguration für die Peripherie dazu packen. Bei mir wäre das der I2C Bus (über den der Sensor kommuniziert) und natürlich der Sensor selbst.

BME280 Temperature+Pressure+Humidity Sensor — ESPHome

I²C Bus — ESPHome

esphome:
  name: esphome-00001
 
esp32:
  board: wemos_d1_mini32
  framework:
    type: arduino
 
# Enable logging
logger:
 
# Enable Home Assistant API
api:
  password: „“
 
ota:
  password: „“
 
wifi:
  ssid: „XXX“
  password: „XXX“
 
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: „Esphome-00001 Fallback Hotspot“
    password: „XXX“
 
captive_portal:
 
# Ergänzung nach Wizard
i2c:
  sda: 21
  scl: 22
  scan: true
  id: bus_a
 
sensor:
  – platform: bme280
    temperature:
      name: „BME280 Temperature“
      oversampling: 16x
    pressure:
      name: „BME280 Pressure“
    humidity:
      name: „BME280 Humidity“
    address: 0x77
    update_interval: 60s

Mit dem nun vorhandenen YAML kann man auf das ESP installieren. Da bei mir kein OTA-Code vorhanden war, musste der ESP am Rechner per USB verbunden werden (Serieller Port vom Typ CCxxxx wird im Gerätemanager angezeigt).

esphome run test.yaml

Damit wird dann im Hintergrund die Firmware zusammengestellt und kompiliert. Die erforderlichen Teile wie Libraries, Compiler etc. holt sich das Programm selbst aus dem Internet. Das war für mich schon komfortabel, weil mich gerade diese Tätigkeiten extrem anöden (zumal sowas ja auch gepflegt werden muss).
Wenn der ESP korrekt im Betriebssystem angemeldet ist (als serieller Port), wird dann vom Skript gefragt, über welchen Weg man die Firmware installieren will. Zur Auswahl steht dann der Port oder OTA. Da der ESP noch kein OTA kann, wird der serielle Port ausgewählt.
Das Tool flasht dann die Firmware, bootet den ESP und zeigt danach die Debug-Meldungen vom ESP als Ausgabe. Wenn was schief geht, kann man es hier mitbekommen.
Ich hatte z.B. das Wifi nicht Case-Sensitiv eingegeben und prompt ging das Anmelden nicht. Kein Problem, weil ich ja unmittelbar über die Meldungen das Problem sehen konnte und ein angepasstes YAML neu drüber installieren lassen.
Wenn alles geklappt hat, ist ab sofort im Heimnetz ein neuer Teilnehmer registriert und aktiv.
Für mich das absolut beste war aber, dass mein ESP gleich vom Home Assistant als neues Gerät erkannt wurde und über die Erweiterung ESPHome direkt eingebunden wurde. Keine weiteren Konfigurationen notwendig, sofort Gerät und 3 Entitäten verfügbar.

Ebenso einfach ist es ab sofort ein Update von der Firmware zu machen. Das geht nun direkt über OTA ohne Kabel per Netzwerk.
Wenn ich die Supervisord-Variante von Home Assistent hätte (nicht die Core-Variante im Docker Container), könnte ich das ganze sogar über die Oberfläche triggern. Mir ist es aber wichtiger so mit Docker weiterzumachen, daher bleibe ich bei der Kommandozeile und der eingeschränkten UI.

 

 

Nachtrag:

Die ganze Geschichte mit den Voraussetzungen schaffen hat mich nun doch nochmal eingeholt. Bei der Umstellung auf ExpressIf als Plattform (wegen Bluetooth) wurde der Pfad-String zu lange und konnte nicht mehr kompiliert werden. Bei der Einzelinstallation von Python ohne AppStore ging das Thema dann.
Danach konnte aber eine Abhängigkeit wegen einer angeblich geblockten Datei nicht aufgelöst werden. Tatsächlich aber auch kein Problem von ESPHome, sondern von ExpressIf selbst. Da scheint es mit 5.x-Versionen Probleme unter Windows zu geben. Mit einem alternativen Paket über GitHub 4.x war dann alles wieder ok.
Es bleibt also immer noch so, dass man sich irgendwann in den Tiefen durchwursteln muss. ESPHome versucht das aber sehr gut zu deckeln, bis halt gar nix mehr geht.
Und wenn es in Drittpaketen knallt, wäre es unfair das ESPHome zuzuordnen.
Ich würde auch stark darauf tippen, dass es unter Linux hier keine Probleme gegeben hätte. Wer kann, sollte vielleicht gleich damit starten. Ich denke das umschifft dann viele Klippen.

https://www.pexels.com/de-de/foto/dunen-des-death-valley-17108927/

Freiheit für Tuya-Geräte von der Cloud

So langsam wächst die Geräteanzahl und einige davon sind von Tuya. Die Zwangscloud ist nicht nur theoretisch ein Problem, sondern ...

ESPHome – Home Automation mit ESP32 mal wirklich ganz einfach

Mit jedem Tag zeigt sich, dass Home Automation ein sehr mächtiges Werkzeug geworden ist. Im Zuge der Tests bin ich ...
https://www.pexels.com/de-de/foto/bunte-zahnrader-171198/

Hausautomatisierung – jetzt aber richtig!

Nach inzwischen doch schon einigen mehr oder weniger erfolglosen Versuchen, das eigene Heim etwas intelligenter zu gestalten, ist nun ein ...

Wir benutzen Cookies und Logs mit personenbezogenen Daten ausschließlich für essentielle Funktionen wie z.B. bei der Benutzeranmeldung oder der Fehlersuche. Für Videos werden weitere Cookies von Drittanbietern benötigt. Details finden sie unter dem Link "Weitere Informationen".