Wenn man Strom sparen möchte, ist es vorteilhaft zu wissen, welche Geräte wann wie viel Strom verbrauchen. Um das herauszufinden, gibt es Messsteckdosen, die man zwischen Steckdose und Stecker stecken kann, um den Stromverbrauch zu messen. Eine Möglichkeit dafür ist die Shelly Plug S. Diese Steckdose lässt sich per App bedienen. Dort kann man neben der aktuellen Leistung auch den Stromverbrauch sehen. Ein Diagramm, welches die Leistung über einen Zeitraum angibt, gibt es hier aber leider nicht. Und außerdem ist die Steckdose in dieser Form von der Cloud abhängig – das möchte auch nicht jeder.

Was ich an Shellys gut finde, ist, dass man sie auch völlig Lokal per Webinterface oder MQTT bedienen kann. Theoretisch kann man auf den meisten von ihnen sogar eine eigene Firmware flashen (Info dazu hier: https://templates.blakadder.com/index.html ), aber das wäre mir an dieser Stelle zu viel.

Material

Installation von MQTT

Auf dem Server müssen wir einen MQTT Server installieren, an den die Shelly die Daten senden kann:

Konfiguration der Shelly

Die Shelly macht bei ersten Start einen Hotspot auf, mit dem man sich beispielsweise mit dem Handy verbinden kann. Im Browser gibt man dann die Adresse http://192.168.33.1 ein, wo man dann die Zugangsdaten zum WLAN eingeben kann. Danach startet die Shelly neu und man kann nun das Webinterface aus dem Heimnetz öffnen und dort sämtliche Einstellungen vornehmen.

Unter „Internet & Security“, „Advanced Developer Settings“ gibt es hier den Punkt „Enable action execution via MQTT“. Diesen aktivieren wir und geben dann unter „Server“ die IP-Adresse des Servers und den Port (Standard ist 1883) an. Danach das Speichern nicht vergessen!

Shelly MQTT Einstellungen

Eine andere wichtige Einstellung wäre noch unter dem Punkt „Settings“ „POWER ON DEFAULT MODE“, also was passieren soll, wenn die Shelly mal keinen Strom mehr bekommt (z.B. bei einem Stromausfall). Das hängt davon ab, was an der Shelly hängt. Bei einer Lampe macht es Sinn, sie nach einem Stromausfall auszuschalten, während ein Kühlschrank immer an bleiben sollte.

Test

Mit dem Befehl

werden alle Nachrichten im Terminal angezeigt, die per MQTT verschickt werden. Nach spätestens 30 Sekunden (Die Shelly sendet alle 30 Sekunden Daten) sollte es eine Ausgabe geben, die ungefähr so aussieht:

Interessant sind hier die Punkte „Power“ (aktuelle Leistung in Watt) und „Energy“ (Gesamtverbrauch in Wattminuten)

Python Skript

Zuerst müssen folgende Python Module installiert werden:

Mein Code dafür ist folgender:

Kurze Erklärung: (Diese stellen müssen angepasst werden!)

Z. 7-8: Es wird eine Verbindung zur Datenbank hergestellt
Z. 14-15: Die topics von power und energy der Shelly werden subscribed. Hier können auch noch zusätzliche topics hinzukommen, z.B. für die Betriebstemperatur oder weitere Shellys, siehe Abschnitt „Test“)
Z. 19-30: Auch hier muss das topic angepasst werden. In diesem Abschnitt wird dann der Wert in der Konsole ausgegeben und anschließend in die Datenbank in das measurement „shellyplugs1“ in das Feld „leistung“ eingetragen. Dieser Abschnitt muss auch wiederholt werden, falls weitere topics nach Z. 15 hinzugefügt wurden.
Z. 44: Es wird eine Verbindung zum MQTT Broker hergestellt.

Dieses Skript kann nun laufen, zum Beispiel als Systemd Service Unit und schreibt die Daten dann in die Influx Datenbank, von wo sie beispielsweise mit Grafana visualisiert werden können.

Beispiel Visualisierung mit Grafana

Die Shelly hängt bei mir am Kühlschrank. Im folgenden Diagramm sieht man gut, dass die Ausschläge in der Nacht im Gesamtstromverbrauch (gelb) vom Kühlschrank kommen (grün):

Grafna Grafik