Home-Assistant + DIY Mikrocontroller + ESP Home (Docker)

 

Mit ESPHome ist es denkbar einfach einen Mikrocontroller f√ľr die Verwendung in HomeAssistant zu programmieren. Mein erster Einsatzzweck f√ľr einen selbst programmierten Mikrocontroller war das Erfassen des Wasserdurchflusses und der Temperaturwerte meiner Heizung, siehe: ESP32 programmieren, Arduino - Voraussetzungen installieren.

(Bild eines ESP32-Mikrocontrollers an einem USB-Ladekabel)

auf amazon.de:

AZDelivery ESP32 NodeMCU Module WLAN WiF...

Verf√ľgbarkeit: Jetzt
Preis: 10,99¬†‚ā¨
zum Stand: 28.02.2024 10:12
Details

 

Obwohl ich den Mikrocontroller, nicht zuletzt dank zahlreicher Beispiele in Arduino, relativ schnell programmieren konnte, ist die Umsetzung mit ESPHome noch einfacher. Der Programmcode mit ähnlicher Funktionalität in ESPHome besitzt, im Verglich zu meiner Arduino-Version, ca. die Hälfte Zeilen und ist zudem wesentlich verständlicher und stabiler als meine Arduino-Version. Ein Grund warum ich meinen funktionierenden Mikrocontroller mit ESPHome neu programmiert habe, war, dass ich den ESP hin und wieder neu starten musste, damit dieser die Verbindung zum MQTT-Broker erneut aufbaute.

F√ľr √Ąnderungen am Programmcode oder f√ľr das Debugging musste ich mit Arduino entweder einen Laptop im Heizraum anstecken oder bei gr√∂beren √Ąnderungen den Mikrocontroller ausbauen und diesen an einem gem√ľtlicheren Ort programmieren: Dann mehr oder weniger blind ohne Sensoren, da diese ja im Heizraum verbaut sind. Grund genug um ESPHome zu testen.

Was ist ESPHome?

ESPHome ist eine schlanke Weboberfl√§che mit dessen Hilfe Mikrocontroller, wie der ESP8266 oder ESP32 programmiert und einfach in Home Assistant eingebunden werden k√∂nnen. Programmiert wird in ESPHome, im Gegensatz zu Arduino, prim√§r nicht mit C, sondern in YAML-Dateien. ESPHome wandelt den YAML-Code in C um, kompiliert diesen und spielt das fertige Programm auf den Mikrocontroller. Das fertige Beispielprogramm k√ľmmert sich um die WLAN-Verbindung und um die M√∂glichkeit sich selbst upzudaten. Zudem liefert es die Basis f√ľr die Kommunikation mit Home Assistant.

OTA-Update

Mit ESPHome k√∂nnen die Ger√§te per WLAN programmiert und die Konsolen-Ausgabe angezeigt werden:¬†OTA-Update, also Over-the-Air-Update. Wurde der ESP mit dem Basiscode bespielt, kann das Ger√§t somit schon mal an seinem Einsatzort verbaut und verkabelt werden und sp√§ter √ľber WLAN von einem beliebigen Browser mit der notwendigen Software versorgt werden.

ESPHome in Docker inkl https

Ich betreibe¬†Home Assistent in Docker, daher ist der AddOn Store nicht verf√ľgbar. ESPHome kann √ľber einen zus√§tzlichen Docker Container hinzugef√ľgt werden.

Docker Basics

Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhängige isolierte Umgebung:
Beim ersten Start eines Containers, lädt Docker selbstständig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker
Wer f√ľr ESPHome einen eigenen DNS-Eintrag von einer √∂ffentlichen Domain erstellt, https und ein SSL-Zertifikat verwendet, kann neue Microcontroller direkt √ľber den Browser programmieren und somit in ESPHome einbinden. Wie auch schon bei anderen Webservices setze Docker und f√ľr die SSL-Zertifikate Let¬īs Encrypt und den Traefik-Loadbalancer ein, siehe:¬†sichere https Verbindung: Traefik Reverse Proxy + Let¬īs Encrypt.

docker-compose.yml

Um ESPHome mittels docker compose zu starten, kann das offizielle Docker ESPHome-Image verwendet werden. Das Image kann mit einer simplen docker-compose.yml Datei heruntergeladen, erstellt und gestartet werden. Die Datei kann mit einem beliebigen Texteditor wie folgt bef√ľllt und dann angepasst werden:

Dateiname: docker-compose.yml, Inhalt:

[+]
services:
  esphome:
    container_name: esphome
    image: esphome/esphome
    privileged: true
    environment:
        - USERNAME=admin
        - PASSWORD=???
        - ESPHOME_DASHBOARD_USE_PING=true
   #F√ľr einen direkten Zugriff, ohne Internet. Aufruf: http://localhost:6052 oder http://ServerIP:6052
    ports:
      - 6052:6052
    dns: 
      - 192.168.1.1
    volumes:
      - ./esphome:/config:rw
   #Labels f√ľr ReverseProxy, siehe: https://www.libe.net/traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.esphome.rule=Host(`esphome.domain.tld`)"      
      - "traefik.http.routers.esphome.entrypoints=web"
      - "traefik.http.routers.esphome.entrypoints=websecure"
      - "traefik.http.routers.esphome.tls.certresolver=myresolver"      
      - "traefik.http.services.esphome.loadbalancer.server.port=6052"
    restart: always

#Ohne dem Einsatz eines Reverse Proxy (https://www.libe.net/traefik) fehlt voraussichtlich das Netzwerk webproxy 
#und die folgenden Zeilen können entfernt oder auskommentiert werden. Alternativ kann das Netzwerk mit "docker network create webproxy" erstellt werden
networks:
  default:
    name: webproxy
    external: true

F√ľr einen direkten Zugriff √ľber die IP-Adresse oder¬†localhost¬†- auch¬†ohne Reverse Proxy, DNS oder √∂ffentlicher IP - beinhaltet die Konfiguration "ports: - 6052:6052", wodurch der Aufruf auch √ľber localhost:6052 erfolgen kann. F√ľr den Einsatz ohne Reverse-Proxy kann der Bereich network: .. entfernt werden.

Damit der Internetzugriff¬†√ľber den¬†Traefik Reverse Proxy funktioniert,¬†muss in den Labels die Dom√§ne mit den zuvor erstellten¬†DNS-Eintr√§gen¬†ersetzt werden (im Beispiel: esphome.domain.tld). Das Beispiel verwendet Docker Bind-Mounts¬†und keine¬†Volumes¬†f√ľr das permanente Speichern der Daten. Siehe:¬†Docker Daten speichern: Docker Volumes vs. Host-Ordner. F√ľr eine funktionierende Namensaufl√∂sung von ESPHome zu den Mikrocontrollern habe ich auch noch meinen Router als DNS-Server hinzugef√ľgt, siehe: offline.

Container starten

Der Start erfolgt aus dem Ordner der docker-compose.yml-Datei mit dem Befehl "docker-compose up“:

docker-compose up -d

Inbetriebnahme / erster Aufruf der Weboberfläche

Beim Aufruf der angegebenen Domain (https://wp.domain.tld) meldet sich ESPHome mit einer Login-Maske. Der Benutzername und das Passwort können in der docker-compose.yml-Datei vorgegeben und geändert werden.

Beim Klick auf "NEW DEVICE" können neue Mikrocontroller angelegt werden:

Die Verbindung zum Mikrocontroller muss dabei initial √ľber ein Kabel erfolgen. In meinem Fall habe ich den Mikrocontroller an einem Rechner mit USB angeschlossen, was mir das Verbinden √ľber den Browser mittels des UART Bridge Controller erm√∂glicht (Plug into this computer). Da die Verbindung zum Mikrocontroller √ľber den Browser erfolgt, spielt es bei dieser Variante auch keine Rolle, wenn der ESPHome-Server auf einem anderen Ger√§t l√§uft:

 

HA-Integration

Damit die Mikrocontroller als Geräte in Home Assistant auftauchen, benötigen wir die ESPHome-Integration:

F√ľr die Verbindung habe ich zun√§chst die IP-Adresse meines ersten Mikrocontrollers verwendet:

Zur√ľck zu ESPHome, kann darin ein API-Key (Encryption key) ausgelesen werden:

Der Encryption key wird f√ľr die Verbindung in Home Assistant ben√∂tigt:

 

Hier ein Blick auf meinen eingebundenen Mikrocontroller und dessen zur Verf√ľgung gestellten Sensoren:

ESP-Home als Men√ľpunkt in der Home-Assistant Sidebar

Damit sich ESPHome in die Home Assistant-Gui integriert, kann das Webservice in der configuration.yaml-Datei als panel_iframe angelegt werden:

Folgende Zeilen zu Beginn der configuration.yaml f√ľgen ESPHome als neuen Men√ľpunkt hinzu:

panel_iframe:
  esphome:
    title: "ESPHome"
    url: "https://esphome.domain.tld/"
    icon: mdi:docker

Die "url:" muss hier nat√ľrlich mit der zuvor konfigurierten URL ersetzt werden.

Troubleshooting

Mein erster Versuch endete mit folgendem Fehler: "Please upgrade to the PlatformIO Core 6"

Ich habe ESPHome schon vor einiger Zeit getestet und dabei einen Docker-Container gestartet. Beim erneuten Versuch ESPHome zu verwenden, konnte ich den ESP32 f√ľrs Erste nicht programmieren, da der Container offensichtlich zu alt war: Ein "docker-compose pull" konnte das Problem beheben, indem eine neue Version von ESPHome heruntergeladen wurde.

Configuration created but unable to detect the device on the network

Urspr√ľnglich wollte ich den ESP auf ein verstecktes WLAN verbinden, was aber nicht funktionierte. Die L√∂sung war ein sichtbares WLAN f√ľr die Verbindung zu verwenden.

 

Offline

Obwohl der Controller einwandfrei funktionierte, wurde dieser dennoch als "OFFLINE" angezeigt:

Der ESPHome Docker-Container versucht den Controller offensichtlich mit dessen Namen heating.local aufzurufen. Damit er das kann, habe ich den DNS-Namen des ESP32 am Router hinterlegt und die IP-Adresse meines Routers in der docker-compose.yml-Datei hinzugef√ľgt (dns:...).

Fazit

Speziellen Projekten oder der Einsatz einer g√ľnstigen DIY-Hardware steht mit ESPHome nichts im Weg. Die zahlreichen Beispiele auf der ESPHome-Seite erleichtern die Programmierung und Einbindung in Home Assistant. F√ľr die Anbindung eines Ultraschall-Durchflussmessers habe ich ein Beispiel auf folgender Seite abgelegt:¬† ESP32 Flowmeter - RS485 Modbus. Wie DS18B20-Temperatursensoren ausgelesen werden k√∂nnen, ist auf dieser Seite zu finden:¬† DS18B20 - Temperatur-Sensoren in ESP-Home.¬† Die Steuerung meiner Heizung habe ich hier dokumentiert: Heizung mit Home Assistant steuern.

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE f√ľr deine Bewertung!

Aktualisiert: 09.10.2023 von Bernhard | Translation English |ūüĒĒ | Kommentare:0
Preview Smart Meter des Netzbetreibers auslesen KAIFA MA309M

Smart Meter des Netzbetreibers auslesen KAIFA MA309M

erstellt: 27.03.2023 von Bernhard

F√ľr ein sinnvolles Optimieren des Stromverbrauchs hilft das Wissen √ľber die aktuellen Verbrauchsdaten. Dazu kann ein zus√§tzlichen Smart Meter verbaut werden, oder noch besser: Der Smart Meter des Netzbetreibers ausgelesen werden. Als Beispiel kann der Smart Meter meines Netzbetreibers, der Salzburg AG √ľber die M-Bus-Kundenschnittstelle abgefragt und die Daten dadurch in anderen Systemen verwendet werden. Die ausgelesenen Werte umfassen den Energieverbrauch und bei Einsatz einer PV-Anlage die Ein... ... weiterlesen


‚ě® Signal Nachrichten per API versenden: signal-cli-rest-api | ‚ě¶ Container | Webseiten √ľberwachen mit Uptime Kuma ‚ě®
‚ě¶ ESP32 | ESP32 programmieren, Arduino - Voraussetzungen installieren ‚ě®
‚ě® Home-Assistant Display - Wetterstation und mehr | ‚ě¶ Home Assistant | Home Assistant Templates / Statistik und Sensoren ‚ě®

Top-Artikel in diesem Bereich


ioBroker installieren - Docker

Mit ioBroker können verschiedene Automatisierungslösungen oder Geräte in einem System zusammengefasst werden. Um bestimmte Gateways oder Geräte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.


Inbetriebnahme Zigbee2MQTT in Docker - Schritt f√ľr Schritt

Zigbee2MQTT ist eine Open-Source Zigbee-Bridge welche sich, dank dem Netzwerkprotokoll MQTT, leicht in bestehende Smarthome-Lösungen integrieren lässt. Als Beispiel kann Zigbee2MQTT kombiniert mit MQTT - Broker  Mosquitto und Home-Assistant Daten der Zigbee-Geräte erfassen, anzeigen, aufzeichnen und diese steuern. Das hier beschriebene Setup verwendet Docker als Basis. Herstellerseite: https://www.zigbee2mqtt.io


Bitwarden in Docker betreiben - Setup Schritt f√ľr Schritt

Bitwarden ist ein webbasierter Passwort-Manager, √§hnlich LastPass, aber Open Source und der M√∂glichkeit diesen selbst zu betreiben (hosten). Wie sich Bitwarden im Vergleich zu anderen Passwort-Managern einordnet, habe ich auf folgender Seite √ľberlegt: Passwort-Manager sicher? KeePass vs. LastPass vs. Bitwarden. Bitwarden besteht aus mehreren Services, welche √ľber verschiedene Container bereitgestellt werden k√∂nnen. Das relativ aufw√§ndige Setup wurde mit "Bitwarden Unified" speziell f√ľr ein Selbs...

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details