Shelly Verbrauchsdaten über MQTT an openHab senden

Die Heimautomatisierung in unserem Zuhause basiert auf einer openHab Installation. Diese regelt alles was es hier zu regeln gibt. Bei der Überlegung ein Balkonkraftwerk hier zuhause zu installieren war klar, dass die Werte entsprechend protokolliert werden müssen um die Wirtschaftlichkeit des selbigen transparent zu machen. Zu diesem Zweck wurden im Haus einige Shelly Komponenten installiert. Nach der Einrichtung war es an der Zeit die Shelly Verbrauchsdaten über MQTT an OpenHab zu senden um diese im nächsten Schritt dort auszuwerten. So weit so unklar …

verwendete Komponenten für die Datenerfassung

Um sowohl den Bezug des Stromes vom Netzanbieter als auch die Erzeugung des selbigen durch das Balkonkraftwerk zu messen entschied ich mich für den Einbau 2er Komponenten.

Der Shelly Pro 3EM wurde direkt im Sicherungskasten verbaut. Dieser misst den Gesamtenergieverbrauch des gesamten Hauses über alle 3 Phasen. Dazu wurde direkt an der Anschlussdose das Balkonkraftwerkes ein Shelly Plus 1PM installiert welcher den Energieverbrauch des Balkonkraftwerkes erfasst.

Das schöne an den Shelly-Komponenten ist, dass diese über das MQTT Protokoll verfügen. Durch dieses sind die Komponenten in der Lage eine Nachricht zu senden, sobald sich ein Wert verändert. Diese Nachrichten können nun wieder in openHab eingesammelt und in ein entsprechendes Item übertragen werden. Wir sind also in der Lage die aktuellen Livedaten sowohl Strombezuges des gesamten Hauses als auch der Stromerzeugung des Balkonkraftwerks nach openHab zu transportieren.

Was ist MQTT eigentlich?

MQTT ist ein offenes Netzwerkprotokoll zur Übertragung von Nachrichten. Das Protokoll wurde für die Maschine zu Maschine Kommunikation und findet den Einsatz meist im Bereich IOT (Internet of Things). Hierbei senden Devices Informationen an einen Broker. Der Broker leitet diese an die entsprechenden Abonnenten weiter. Weitere Informationen zu MQTT selbst findet man am besten direkt auf MQTT.org.

Einrichtung des MQTT-Brokers auf dem Raspberry PI

Die Einrichtung des MQTT-Brokers auf dem Raspberry-PI ist recht schnell und mit wenigen Befehlen erledigt. Zuerst aktualisieren wir einmal die Pakete auf dem PI, anschliessend installieren wir das Paket ‘mosquitto‘:

# Update durchführen
sudo apt update
sudo apt upgrade

# Mosquitto installieren
sudo apt install mosquitto

Der MQTT-Broker Mosquitto ist nun auf dem System installiert. Nun müssen wir noch einige kleine Konfigurationen vornehmen damit der Zugriff auf den Broker funktioniert. Ich habe mich dazu entschieden den Broker ohne Authentifzierung laufen zu lassen, das muss selbigem jedoch beigebracht werden.

# Konfigurationsdatei öffnen
sudo nano /etc/mosquitto/conf.d/local.conf

#Einfügen der folgenden Inhalte zur Datei
listener 1883
allow_anonymous true

Nun ist der Broker installiert und vorkonfiguriert. Der Zugriff erfolgt über den Port 1883 und es werden keine Benutzerdaten zur Authentifzierung benötigt. Wir können selbigen nun starten und dem System mitteilen, dass der Start des Services auch bei einem Reboot des Systemes automatisch wieder mitgestartet werden soll:

# mosquitto beim Systemstart automatisch starten lassen
sudo systemctl enable mosquitto

# starten des mosquitto brokers
sudo systemctl start mosquitto

MQTT in den Shelly Komponenten einrichten

Nachdem der MQTT-Broker nun läuft können die Shelly-Komponenten konfiguriert werden so dass diese bei jeder Änderung eine Message an den Broker senden. Dies funktioniert über die Oberfläche des Komponenten. Der Zugriff erfolgt entweder über die interne IP (ist im Router zu finden) oder die Shelly-Cloud. Meine Screenshots stammen aus der Shelly-Cloud, welche bei mir allerdings inzwischen deaktiviert wurde.

Aktivierung der MQTT Einstellung in der Shelly

Schritt 1:
Die MQTT Konfiguration befindet sich im Settings-Bereich unter dem Punkt Network \ MQTT

Aktivierung der MQTT Einstellung in der Shelly

Schritt 2:
MQTT selbst ist zu aktivieren. Damit openHab die Nachrichten auswerten kann sollte unbedingt die Optin ‘Generic status update over MQTT’ aktiviert werden, ansonsten gibt es Probleme bei der Auswertung der Nachrichten.
Im Feld Host geben wir den Namen oder die IP unseres Rapsberry-PI zusammen mit dem konfigurierten Port 1883 an. Das FeldUsername und Passwort lassen wir einfach leer

Nachdem die Änderungen übernommen wurden senden die Shellys bereits Nachrichten an den MQTT Broker welche nun “nur noch” ausgewertet werden müssen.

Nachrichteneingang mit dem MQTT-Explorer prüfen

Nachdem ich den Shellys den Versand der MQTT Nachrichten beigebracht habe entschied ich mich, erstmal zu prüfen ob die Nachrichten auch wirklich ankommen. Hierfür setze ich einen freien MQTT-Client Namens ‘MQTT-Explorer‘ ein. Nach dem Start des Tools hinterlege ich auch hier den Hostnamen des MQTT-Brokers und schon kann ich die eingehenden Nachrichten sehen.

Shelly MQTT Nachricht der Shelly Pro 3em

Nachricht des Shelly Pro 3PM* aus dem Hauptverteiler. Markiert ist hierbei der Wert des aktuellen Netzbezuges.

Shelly MQTT Nachricht der Shelly Plus 1 pm

Nachricht des Shelly Plus 1PM* des Balkonkraftwerkes. Markiert ist hier der aktuelle Wert des Stromes, welcher durch die Solarmodule erzeugt werden.

Die Kontrolle der Nachrichten gibt zum einen ein gutes Gefühl und stellt sicher, dass die Kommunikation sauber funktioniert. Des weiteren ist diese Kontrolle relevant um zu erfahren, welche Inhalte die MQTT-Nachricht hat. Wie zu sehen ist beinhaltet die Nachricht eine Vielzahl von Werten. Für meine Zwecke sind von beiden Nachricht jedoch nur 2 Werte relevant welche im nächsten Schritt in openHab integriert werden.

Einrichtung des MQTT-Clients in openHab

Etwas mehr als die Hälfte des Weges ist gemacht. Nun sollen die Nachrichten der Shellys noch in openHab ausgewertet werden. Hierzu benötigen wir als erstes einmal das MQTT-Binding in OpenHab. Nachdem selbiges installiert ist richten wir zuerst einmal einen MQTT-Client ein welcher die Verbindung zum MQTT-Broker herstellt. Als nächstes definieren wir ein MQTT-Topic (über ein Generic-MQTT-Thing) welches dazu dient, alle Nachrichten des MQTT-Brokers zu empfangen:

Einrichtung des MQTT-Client in openHab

Schritt 1
Definition eines neues Items vom Typ ‘MQTT Broker’ welches als Client fungiert. Im Feld Hostname tragen wir die IP-Adresse des installierten Mosquitto Servers ein. In meinem Fall läuft dieser auf dem gleichen PI wie auch openHab wodurch die Angabe von 127.0.0.1 völlig genügt. Weitere Angaben sind nicht notwendig (sofern der gleiche Port und der anonyme Zugriff wie hier beschrieben gewählt wurden)

Einrichtung des MQTT-Topic in openHab

Schritt 2
Nachdem das Thing für den MQTT-Client eingerichtet wurde definieren wir ein weiteres Item. Dieses ist vom Typ ‘Generic MQTT Thing’ und nutzt als Bridge den im vorherigen Schritt angelegten Client.
Auch hier ist keine weitere Konfiguration notwendig.

Definition der benötigen Channels und Items in openHab

Nachdem beide Items angelegt sind sehen wir … nichts. Im Hintergrund passiert nun aber doch schon einiges, auch wenn wir es nicht sehen. Die Shellys senden bei jeder Änderung eine MQTT-Nachricht an den installierten Mosquitto-Broker. Das im Schritt 1 eingerichtet Item stellt die Verbindung zum Broker her. Das im Schritt 2 eingerichtet Topic nutzt den Client und empfängt alle Nachrichten. Diese werden noch nicht ausgewertet wodurch wir noch nichts sehen, also los.

Für meinen Anwendungsfall genügen mir 2 Werte. Zum einen möchte ich gerne wissen wie viel Strom ich gerade vom Netzbetreiber beziehe. Zum zweiten möchte ich wissen wie viel Strom mein Balkonkraftwerk generiert. Aus diesen beiden Werten lassen sich alle weiteren Werte berechnen (mehr dazu in einem anderen Beitrag).

Bevor die MQTT Nachrichten verarbeitet werden können wird ein weiteres Modul in openHab benötigt. Die eingehenden Nachrichten kommen im JSON-Format an. Damit dieses einfach verarbeitet werden kann installieren wir das ‘JsonPath Transformation‘ Plugin. Sobald dies geschehen ist können wir die benötigten Channels anlegen.

Als erstes benötigen wir 2 Channels auf dem eingerichteten MQTT-Topic. Diese Channels extrahieren die gewünschten Informationen aus den MQTT-Nachrichten und stellen diese für die weitere Verarbeitung bereit.

Channel 1: Strombezug vom Netzbetreiber

Channel Identifier: HouseEnergyCurrent 
Label: aktueller Stromverbrauch
Channel Type: Number
MQTT-State Topic: shelly-sicherungskasten/status/em:0
Unit Of Measurement: W
Incoming Value Transformations: JSONPATH:$.total_act_power

Channel 2: Balkonkraftwerk Stromgenerierung

Channel Identifier: GarageProduction
Label: Balkonkraftwerk Garage Erzeugung
Channel Type: Number
MQTT-State Topic: shelly-balkonkraftwerk-garage/status/switch:0
Unit Of Measurement: W
Incoming Value Transformations: JSONPATH:$.apower

Nun können wir endlich die so lang ersehnten Items anlegen:

MQTT Things in openHab

aktuelle Live Stromwerte in openHab

Ich muss zugeben, dass mich dieser Weg einiges an Zeit gekostet hat. Jetzt, wo ich weiß wie es funktioniert, ist es alles logisch. Zu Beginn jedoch sah ich den Wald vor lauter Bäumen nicht und musste ein wenig kämpfen bis ich alle losen Enden zusammen hatte. Jetzt bin ich endlich so weit dass die Shelly Verbrauchsdaten über MQTT an openHab gesendet und dort ausgewertet werden können.

Auswertung der MQTT Verbrauchsdaten

Die obige Grafik zeigt den Verlauf eines Tages an wobei die blaue Linie dem Bezug vom Netz (also den eingekauften Strom) darstellt. Die grüne Linie zeigt an wie viel Strom das Balkonkraftwerk produziert hat.

Als nächstes werde ich mich der Berechnung der Tageswerte widmen. Das Ziel ist es eine genaue Übersicht darüber zu erhalten wie viel Strom ich vom Netzbetreiber beziehe, was mein Balkonkraftwerk an Strom generiert und wie der Wirkungsgrad des selbigen wirklich ist. Stichworte wie “Eigenverbrauchsquote” oder auch die Amortisierungszeit sind hierbei Fragen die mich herumtreiben. Sobald ich hier etwas brauchbares zu vermelden habe werde ich diese Scripte natürlich ebenfalls veröffentlichen.

Artikel teilen

This article was written by Thomas Schiffler

Alles was mit IT zu tun hat steht bei mir hoch im Kurs. Hierbei dreht sich vieles um Java, Python oder auch mal PHP. Unser Zuhause ist mit diversen Raspberry PIs ausgestattet mit welchen ich versuche unser Leben durch etwas Automatisierung ein wenig smarter zu gestalten. Hierbei möchte ich die Technik und die dahinter eingesetzten Tools / Frameworks verstehen und nicht einfach nur Anwenden. Ich selbst bezeichne mich als ITler aus Leidenschaft :) Seit 2020 ist das Thema Chatbot / Voicebot / Conversational.ai in meinen Focus gerückt. In diesem Bereich investiere ich gerade viel Zeit.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert