Rolladensteuerung mit ESPHome, Verfeinerung der Firmware

Im vorherigen Beitrag wurde eine Basisfirmware auf den ESP32 bzw. auf das ESP32-4-fach-Relais-Board geschrieben. Damit ist ESPHome als Add-on von Home Assistant in der Lage, dieses Board über WLAN zu finden und einzubinden. Dieser Beitrag führt zur Optimierung der Firmware auf dem Board, damit es auch im gewünschten Umfeld nutzbar wird.

Im ESPHome-Bildschirm sollte jetzt das Board sichtbar sein, wenn es nur mit 5V und GND versorgt wird. Die Adapterplatine kann weiterhin zur Stromversorgung genutzt werden um Firmware zu flashen, auch wenn es jetzt durchaus angebracht erscheint, den Netzanschluss zu nutzen, denn ohne Netzanschluss können die Relais nicht bedient werden.

Wie in meinen anderen Beiträgen warne ich auch hier wieder davor mit Netzspannung (240V) zu hantieren, wenn man nicht die entsprechende Erfahrung hat oder etwa das Umfeld nicht als sicher gesetzt werden kann. Das ESP-Relaisboard muss zumindest isoliert auf einem Träger montiert werden. Sicherlich immer noch nicht optimal, aber das ist meine Lösung:

Ein dickes Holzbrettchen, das sich auch nicht so leicht verschiebt. Zudem sollte der Aufbau gegen zufällige Berührung gesichert sein, also am besten etwas abseits des Schreibtisches stehen.

Im ESPHome-Bildschirm taucht das Board jetzt in etwa so auf:

Ich habe zwei Relaiskarten vorbereitet, von denen nur eine mit Strom versorgt wird, – die rechte. Die Basisfirmware diente nur dazu, dass das Board über WLAN flashbar wird.

Mit EDIT kann man jetzt den Editor für die Firmware aufrufen. Hier werden sogenannte YAML-Dateien erzeugt. Man könnte durchaus sagen, dass in so einer YAML-Datei eigentlich nur Parameter festgelegt werden. Die Nutzung dieser Parameter in der eigentlichen Firmware wird durch die Logik und das Entwicklungssystem im ESPHome erledigt. Ich habe auch schon recht viel mit der Arduino IDE gearbeitet, wo man tatsächlich ein richtiges Programm mit Logik erstellt. Schon nach den ersten Versuchen kann ich sagen, dass der Weg mit ESPHome deutlich einfacher erscheint.

Ich werde jetzt die einzelnen Abschnitte der YAML-Datei besprechen, soweit ich das bisher fertiggestellt habe. An dieser Stelle nochmal der Hinweis auf die im ersten Beitrag genannten Quellen und auch auf die hervorragende ESPHome Dokumentation. Bisher dürfte die Datei, abgesehen von den Boardnamen, in etwa so aussehen:

esphome:
name: esphome-web-09371c
friendly_name: ESP32 4fach Relais 1 09371c
min_version: 2024.11.0
name_add_mac_suffix: false

esp32:
board: esp32dev
framework:
type: esp-idf

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

wifi:
ssid: 'meine SSID'
password: 'mein Password'

Damit wird allein nur die Kommunikation zwischen ESPHome (und natürlich auch Home Assistant) und dem ESP32 auf dem Board ermölicht. Weder der ESP32 noch ESPHome wissen zu diesem Zeitpunkt etwas über die Beschaltung auf dem Board, wie in diesem Fall eben die 4 Relais.

Exkurs Nummer 3:

Der WLAN-Bereich beinhaltet zu diesem Zeitpunkt noch die SSID und das Password unseres Netzwerkes. Das sollte aber geschützt werden. Einer der Gründe zu Schutz kann sein, dass man Quellen weitergibt, beispielsweise in diesem Beitrag. Ich musste natürlich meine echten Daten aus dem Quelltext herausnehmen und mit Dummies füllen. Das geht einfacher, indem man geheime Daten ausgliedert. 

Ich empfehle zunächst als weiteres Add-on in Home Assistant den File Editor zu installieren. Das geht genauso, wie schon die Installation des ESPHome über Einstellungen –> Add-ons –> ADD-ON STORE. Dort den File Editor suchen, installieren, konfigurieren (linke Seitenleiste einschalten) und starten.

Jetzt solltest Du Dir über das Ordnersymbol oben links im Fileeditor den Pfad zu /homeassistant/esphome/secrets.yaml suchen und aufrufen. Sollte da noch nichts geändert worden sein, steht vermutlich auch nichts Sinnvolles drin. Bitte ändere das auf …

!include ../secrets.yaml
# alle Schlüssel in der Home Assistant secrets.yaml

Oben taucht dann eine rot eingefasste Diskette auf. Damit kann man speichern. In der gleichen Art und Weise wird jetzt wieder eine secrets.yaml aufgerufen, diesmal aber im Pfad /homeassistant/. … und die ändern wir jetzt auch.

# Use this file to store secrets like usernames and passwords.
# Learn more at https://www.home-assistant.io/docs/configuration/secrets/
some_password: welcome

# Your Wi-Fi SSID and password for ESPHome
# bei ESPHome müssen die Schlüssel in Anführungzeichen stehen
wifi_ssid: 'meine SSID'
wifi_password: 'mein Password'

Natürlich musst Du jetzt hier Deine SSID und Dein Password eintragen. Bitte beachte dabei, dass alle Schlüssel für ESPHome in einfachen Anführungszeichen stehen müssen.

Abspeichern !! Der tiefere Sinn dieser ganzen Aktion liegt darin, dass die Credentials, die in ESPHome gebraucht werden und üblicherweise auch aus dem Umfeld des ESPHome geholt werden, was die erste Datei darstellte, jetzt in der zentralen secrets.yaml liegen. Man braucht jetzt nur noch eine secrets.yaml zu pflegen. Zurück zu unserer yaml-Datei für das Board.

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

Über den Ausdruck !secret und den Namen wifi_ssid bzw. wifi-password werden beim Compilieren der Firmware die Daten aus der soeben erzeugten secrets.yaml geholt. Sie stehen das jetzt immer auf Abruf bereit.

Doch der wifi-Abschnitt kann optional noch weiter verfeinert werden:

  manual_ip: 
static_ip: 192.168.1.220
gateway: 192.168.1.1
subnet: 255.255.255.0

Hiermit wird die DHCP-Nutzung abgestellt und das Board wird sich immer die statische IP-Adresse wählen. Dazu muss natürlich sichergestellt werden, dass die im Netzwerk auch frei ist. Gateway und Subnet dürften klar sein. Was passiert aber, wenn das Board aus irgendeinem Grund das heimische WLAN nicht erreichen kann? Dafür kann man einen Accesspoint anlegen:

# Enable fallback hotspot (captive portal) in case wifi connection fails
# no ssid sets device name
ap:
password: "ap-0A9AA0"
ap_timeout: 10min

In der oben gezeigten Form erzeugt der ESP32  nach 10 Minuten erfolglosen Verbindungsversuchs einen Accesspoint mit einer SSID gleich dem Namen des Boards. Ich habe übrigens deshalb einen so langen Zeitraum gewählt, da nach einem Stromausfall erstmal das WLAN-Netz wieder aufgebaut sein muss, was wiederum von der Geschwindigkeit meiner Router abhängt. Man kann auch explizit eine eigene SSID erzeugen. Diese kann man ja in den verfügbaren Netzen sehen. Man kann für diesen Accesspoint ein Password vorgeben, man muss das aber nicht, dann braucht man auch keines zur Anmeldung. Da der ESP32 aber in dieser Form gar keinen Webserver zur Verfügung stellt, würde uns das bisher nichts nützen. Dafür gibt es aber …

captive_portal:

Damit wird es dann möglich über das oben genannte Netzwerk (übrigens mit der selbst gewählten IP) eine Webseite aufzurufen, die es einerseits ermöglicht sich in ein anderes Netz einzuwählen oder aber eine BIN-Datei auf den ESP zu flashen. Dies auszuführen würde aber hier am Thema vorbeigehen und sollte in der Dokumentation nachgelesen werden.

Einen sicheren Netzzugang haben wir jetzt, aber immer noch keine Funktion. Die ESPHome-Dokumentation zeigt Konfigurationen für die unglaublich vielfältige Welt der Sensoren, Schalter, Aktoren usw.. Aber wir wollen hier ja nur unsere Relais zum „Klappern“ bringen.

# 4 relay outputs, exposed as switches in Home Assistant
switch:
- platform: gpio
pin: GPIO32
name: Relay1
id: relay1
- platform: gpio
pin: GPIO33
name: Relay2
id: relay2
- platform: gpio
pin: GPIO25
name: Relay3
id: relay3
- platform: gpio
pin: GPIO26
name: Relay4
id: relay4

Der oben gezeigte Codeabschnitt erzeugt für Home Assistant nutzbare Relais-Entitäten. Das heisst, dass aus der Home Assistant Oberfläche heraus, die Relais auf dem Board geschaltet werden können. Mit ‚#‘ werden übrigens Kommentare eingeleitet. Man kann auch eine LED auf dem Board zu Leuchten bringen:

# Status LED
light:
- platform: status_led
name: RelayBoard Led
restore_mode: ALWAYS_ON
pin:
number: GPIO23

Der prinzipielle Aufbau dieser Codeschnipsel ist einfach. Neben der Bezeichnung, welche Funktionalität man eigentlich will, wird noch eine Benennung und natürlich der Anschluss am ESP32 übergeben.

Die gesamte YAML-Datei sieht jetzt so aus:

esphome:
name: esphome-web-0a9aa0
friendly_name: ESP32 4fach Relais 2 0a9aa0
min_version: 2024.11.0
name_add_mac_suffix: false

esp32:
board: esp32dev
framework:
type: esp-idf


# Status LED
light:
- platform: status_led
name: RelayBoard Led
restore_mode: ALWAYS_ON
pin:
number: GPIO23

# 4 relay outputs, exposed as switches in Home Assistant
switch:
- platform: gpio
pin: GPIO32
name: Relay1
id: relay1
- platform: gpio
pin: GPIO33
name: Relay2
id: relay2
- platform: gpio
pin: GPIO25
name: Relay3
id: relay3
- platform: gpio
pin: GPIO26
name: Relay4
id: relay4


# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

manual_ip:
static_ip: 192.168.1.220
gateway: 192.168.1.1
subnet: 255.255.255.0

# Enable fallback hotspot (captive portal) in case wifi connection fails
# no ssid sets device name
ap:
password: "ap-0A9AA0"
ap_timeout: 10min

captive_portal:

# die echten Zugangsdaten stehen in der secrets.yaml

Ganz wichtig: Der name (zweite Zeile) muss immer gleich dem Namen der yaml-Datei sein! Abweichungen führen dazu, dass Home Assistant das Board nicht erkennt. Außerdem sei auf die speziellen Einrückungen im Text hingewiesen: Immer zwei Stellen weiter nach rechts für untergeordnete Parameter und eine Leerstelle zwischen Parameter und Wert.

In den Benachrichtigungen in der Home Assistant GUI taucht nach erfolgreichem Flashen einer neuen Firmware ein gelber Punkt mit Zahl als Hinweis auf ein neues Gerät/Entität usw. auf. Klickt man darauf, kann man das neue Gerät einem Umfeld zuordnen. Dadurch steht es zur Nutzung zur Verfügung. Man findet es dann unter Einstellungen –> Geräte & Dienste –> Geräte. Ich muss ehrlich gestehen, dass ich die Logik hinter den Menüs der Home Assistant GUI noch nicht ganz durchdrungen habe. Der ständige Wechsel zwischen Seitenleiste, Kopfleiste, Menü etc. ist meines Erachtens etwas inkonsistent. Der Name des Boards wird bei Dir natürlich anders sein.

Klickt man nun auch noch hier auf das Gerät kommt der folgende Bildschirm:

Sofern das Relaisboard mit ausreichend Strom (i.d.R. Netzstrom) versorgt wird, können über die Steuerelemente die Relais und die LED geschaltet werden. Die Relais hört man bei diesem Board sehr deutlich.

Wir sind wieder ein gutes Stück weitergekommen. Immerhin lassen sich jetzt schon die Relais aus der GUI heraus steuern. Es fehlt aber noch eine Menge wie beispielsweise:

  • Die Auf-Ab-Logik für den Antrieb
  • Die Anbindung von physischen Schaltern
  • Die Abstimmung zwischen Server-Logik und physischen Schaltern
  • Die Steuerung auf eine Wunschhöhe der Rollade
  • Eventuell ein Temperatursensor im Gehäuse
  • …. und natürlich das Gehäuse inklusive komplette Verdrahtung

Demnächst in diesem Blog …

0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments