Eine Basis-Installation eines ESPHome Devices erstellen haben wir in diesem Artikel beschrieben. In diesem Schritt möchten wir den ESPHome mittels MQTT mit Daten und Informationen versorgen, die wir dann z.B. auf einem Display anzeigen können.

Um mit einem ESPHome MQTT abrufen bzw. abonnieren/subscriben zu können, benötigen wir zunächst auf einen MQTT-Server im ioBroker. Hierzu installieren wir auf üblichem Adapter-Weg den Adapter MQTT Broker/Client. In den Einstellungen müssen wir lediglich einen Nutzer definieren, mit dem der die Kommunikation „geschützt“ ist, der eigentliche Datentransfer ist bei MQTT nicht verschlüsselt.

Hier die relevanten Einstellungen des MQTT-Adapters:

Einstellungen MQTT-Adapter ioBroker

Einstellungen MQTT-Adapter ioBroker

Erweiterte Einstellungen MQTT-Adapter ioBroker

Erweiterte Einstellungen MQTT-Adapter ioBroker

Die Ausgabe jeder Nachricht kann nach erfolgreichem Test wieder deaktiviert werden, so haben wir im logging des ioBrokers auch die Kontroller über die MQTT-Vorgänge zwischen Broker und dem ESPHome.

Jetzt können wir die YAML-Konfiguration unseres ESPHome Devices um die MQTT-Funktionen anpassen.

Hierzu fügen wir folgenden Abschnitt in die Konfiguration ein (bitte auf korrekte Einrückung achten und, dass beim Kopieren keine unnötigen Zeilenwechsel o.ä. erstellt werden):

# Enable MQTT
mqtt:
  broker: 192.168.XXX.XXX # IP-Adresse des ioBroker-MQTT-Servers
  username: user # Benutzername aus der MQTT-Konfiguration
  password: password # Passwort aus der MQTT-Konfiguration
  topic_prefix: esphome

Danach abonnieren wir Zustände/Werte, die automatisch bei Aktualisierung in ioBroker an das ESPHome Device übertragen werden. Dies erfolgt in YAML mit den Text-Sensoren:

text_sensor:
  - platform: mqtt_subscribe
    id: PV_Leistung_Vortag
    topic: esphome/Display_1/PV/Leistung_Vortag
  - platform: mqtt_subscribe
    id: PV_Leistung_Heute
    topic: esphome/Display_1/PV/Leistung_Heute

In diesem Fall abonnieren wir die Leistung des Vortags und die heutige Leistung der PV-Anlage über zwei Werte. Das Topic wird mit dem vollständigen Pfad angegeben, die id nutzen wir in der YAML-Konfiguration als Variable, um auf die Werte, z.B. zur Anzeige im Display, zugreifen zu können. Klar, dass die IDs eindeutig sein sollten.

Um die Anlage des Pfads bzw. der Objekte müssen wir uns praktischerweise nicht kümmern, das Abonnieren der Daten sorgt im MQTT-Broker dafür, dass die Objekte korrekt im MQTT-Baum in ioBroker angelegt werden.

Hierzu deployen wir die Konfiguration auf unserem ESPHome Device, wir können dies z.B. jetzt über WLAN vornehmen, weil unser ESPHome Device ja bereits erfolgreich im WLAN angemeldet ist.

Nach einem neuen Start sollten wir im logging des ESPHome entdecken, dass die Kommunikation zum MQTT-Broker korrekt angemeldet wird:

ESPHome logging MQTT-Anmeldung und subscribe

ESPHome logging MQTT-Anmeldung und subscribe

MQTT logging des ESPHome-Devices in ioBroker

MQTT logging des ESPHome-Devices in ioBroker

In den loggings des ESPHome und auch im ioBroker sehen wir, dass die Topics korrekt abonniert werden (in den Screenshots sind noch weitere Topics enthalten).

Ein Blick in die ioBroker-Objekte des MQTT-Adpaters zeigt ebenfalls, dass die abonnierten Topics korrekt angelegt wurden (Pfad kann sich von der hier gezeigten Konfiguration unterscheiden):

ESPHome ioBroker MQTT Objekte

ESPHome ioBroker MQTT Objekte

Jetzt können wir dafür sorgen, dass wir die Objekte mit Daten befüllen, die dann automatisch an den ESPHome übertragen werden. Hierzu nutzen wir ein einfaches Blockly-Script im ioBroker. Die Idee: Sobald sich die produzierte Leistung des aktuellen Tages ändert, soll der Wert in das Objekt geschrieben und damit an ESPHome übetragen werden. Unsere PV Daten des Hoymiles HM 400 beziehen wir ebenfalls über MQTT, hierzu setzen wir ebenfalls auf einem ESP32 die alternative Software Ahoy DTU ein, die die Wechselrichter-Daten über eine Antenne empfängt und per MQTT an ioBroker meldet.

Das Blockly sieht wie folgt aus:

ioBroker MQTT Daten aktualisieren

ioBroker MQTT Daten aktualisieren

Natürlich können wir die Daten auch alle X Minuten/Stunden automatisch übertragen lassen.

Sobald die Datenpunkte in ioBroker gesetzt werden, erfolgt auch die Übertragung der Werte in MQTT, dies können wir im logging des ESPHome nachvollziehen:

ESPHome MQTT-Werte empfangen

ESPHome MQTT-Werte empfangen

Ab sofort werden also alle neuen Werte durch das Blockly-Script über MQTT an das ESPHome Device übertragen und können dort genutzt werden. Im nächsten Schritt zeigen wir, wie wir die Daten über ein OLED-Display anzeigen können.