[DRAFT]
Powermeter
Nachdem ich in Make 2/2022 über das Auslesen von Stromzählern gelesen hatte und via Handykamera festgestellt habe, dass unser Zähler auch Daten via Infrarot sendet (mit dem OnePlus6; bei manchen Handys ist ein IR-Filter installiert, der die Signale blockiert), wollte ich das auch mal nachbauen. Aber wie es so oft kommt, habe ich mehr Ideen als Zeit….

Stromzähler mit den Fotodioden für den Datenaustausch
Im Zuge von Last-bezogenen Aktivitäten (Waschmaschine nutzen, Auto aufladen, … ) kam dann doch mal wieder die Frage auf, wie viel wir eigentlich wann beziehen – und von der Solaranlage einspeisen.
Aufgrund der Suche in welchem Heft, wohl der obige Artikel war, bin ich auf diesen Artikel gestoßen: Ausprobiert: Günstiger IR-Lesekopf für SmartMeter und habe mir dann so ein Teil auf eBay bestellt. Neben einer Anleitung aus Papier gibt es auch eine FAQ.
Sensor Setup
Das Setup des Sensors ist schon im Artikel beschrieben. Im nachfolgenden Bild ist der Typ des Zählers zu sehen (orange Box), für den ich dann das Skript von GitHub heruntergeladen und installiert habe. Wichtig ist, dass das “Schwänzchen” nach oben zeigt, damit die entsprechenden Dioden das korrekte Gegenstück bekommen (das paast für die meisten Zähler).

Zähler mit installiertem Lesekopf. Der Lesekopf hät mittels eines eingebauten Magneten.
Nachdem man ich mich mit dem Webinterface verbunden hatte, konnte ich auch gleich die ausgelesenen Daten sehen.
Ich hatte das Glück, dass mein Zähler bereits für den Export der Daten freigeschaltet war. Ich kann nicht sagen, ob die Tasmota-Firmware in der Lage ist, die Freischaltung zu erledigen, falls dies notwendig ist.

Screenshot vom Handy mit Daten für Gesamtbezug aus dem Netz und aktuellem Bezug.
Nun ist es allerdings lästig, wenn man den Verbrauch über den Tag monitoren will, oder gar wie beschrieben eine Wallbox oder andere Verbraucher damit steuern möchte.
Zum Glück kann der Sensor seine Daten via mqtt
kontinuierlich senden.
Im Standard-Setup geschieht dies alle 300 Sekunden (5 Minuten).
Bevor ich hierauf genauer eingehe, möchte ich kurz mein Seup beschreiben
Das komplette Szenario

Komplettes Setup
Der Sensor sendet also seine Daten via mqtt, von wo sie angeholt und für die Prometheus-Datenbank zur Verfügung gestellt werden. Die dort gespeicherten Daten können dann via Grafana visualisiert werden.
Mqtt-Setup
Mqtt ist ein Hub & Spoke Netzwerk: Clients senden ihre Daten an einen Broker. Zu diesem Broker können sich dann andere Clients verbinden und die Daten abrufen. Für meinen Fall habe ich Mosquitto als Broker ausgewählt und via
brew install mosquitto
installiert. Das Setup war recht einfach:
- In der Konfiguration
mosquitto.conf
(bei mir in/usr/local/etc/mosquitto
) wurden explizite Listener eingetragen
Desweiteren habe ich erst Mal den anonymen Zugang erlaubtlistener 1883 172.31.7.2 listener 1883 127.0.0.1
Das ist nicht optimal, aber für erste Tests genugallow_anonymous true
- Im Sensor bin ich dann auf die Configure Seite gegangen und habe unter Configure MQTT die Adresse des MQTT-Servers eingtragen.
- Zuguter Letzt musste ich dann noch nach dem Start von Mqosquitto den ‘Darf Mosquitto Netzwerkverbindungen empfangen’-Dialog von macOS abnicken.
Setup verifizieren
Nimmt man nun ein Tool wie mqttui, kann man die empfangenen Daten anschauen.
brew install mqttui
/usr/local/Cellar/mqttui/0.18.0/bin/mqttui

MqttUI in Aktion.
Im linken Teil sieht man die Topics.
Die Sensoren liefern ihre Daten im Topic tele/tasmota*/SENSOR
ab.
Auf der rechten Seite ist oben das Datenpaket zu sehen und für Daten, die
als numerische Werte geliefert werden, sieht man unten automatisch einen
Graphen für die empfangenen Werte.
Daten empfangen
Wie geschrieben, liefert der Sensor seine Daten per MQTT nur alle 5 Minuten (auf der Web-Oberfläche erfolgt die Aktualisierung häufiger). Damit der Sensor die Daten öfter sendet kann man in seine Console gehen und diesen Befehl eingeben:
teleperiod 30
Damit sendet er nun alle 30 Sekunden.
Nun da wir Daten empfangen, können wir anfangen diese zu perisitieren.
Daten nach Prometheus schreiben
Prometheus ist eine populäre Datenbank für Monitoringdaten. Leider kann Prometheus von Hause aus nichts mit MQTT anfangen, so dass man hier einen kleinen Helfer benötigt.
Ich bin auf Mqtt2prometheus gestossen und das Tool macht genau, was es soll.
Mqtt2prometheus
Mqtt2prometheus liest dabei die Daten von MQTT und stellt sie für Prometheus
zum Scraping auf einem /metrics
HTTP-Endpunkt bereit.
Das Paket gibt es auf Github zum Download und benötigt eine Konfigurationsdatei, die zum Einen den MQTT-Server angibt und zum Anderen die Metriken im Prometheus-Format beschreibt.
Meine Konfiguration sieht wie folgt aus:
mqtt:
server: tcp://127.0.0.1:1883
topic_path: tele/+/SENSOR
device_id_regex: "tele/(?P<deviceid>.*)/SENSOR"
metrics:
- prom_name: strom_Bezug
mqtt_name: MT681.Total_in
type: counter
help: "Vom Netz bezogener Strom in kWh"
- prom_name: strom_Einspeisung
mqtt_name: MT681.Total_out
type: counter
help: "In das Netz eingespeister Strom in kWh"
- prom_name: strom_Aktuell
mqtt_name: MT681.Power_cur
type: gauge
help: "Aktueller Verbrauch in W. Negative Zahlen sind Einspeisung"
Mqtt2prometheus kann man dann wie folgt starten:
mqtt2prometheus -config mqtt2prometheus.conf
Ich habe Programm und Konfiguration unterhalb von /usr/local/
installiert
und dann noch eine .plist
-Datei angelegt, damit das
Programm beim Systemstart mit gestartet werden kann. Diese kann von
hier heruntergeladen werden.
Konfiguration für Prometheus
Prometheus hatte ich bereits in der Vergangenhit via homebrew
installiert und musste deswegen nur noch das folgende Schnipsel
an die Konfiguration in /usr/local/etc/prometheus.yml
anhängen.
scrape_configs:
- job_name: 'tasmota'
scrape_interval: 14s
static_configs:
- targets: ['127.0.0.1:9641']
Daten in Grafana
Zu guter Letzt habe ich dann noch ein Dashboard in Grafana angelegt, um die Daten zu visualisieren.

Visualisierung der Daten in Grafana
Fazit
Das Setup des Sensors ist recht einfach und liefert schnell Daten. Um die Abfrage und Trends in den Daten zu erkennen, werden diese in Prometheus gespeichert und via Grafana visualisiert.
Der Sensor kann allerdings nur die Daten vom Zähler zeigen; d.h. dass sobald die Solaranlage Strom liefert ich den eigentlichen Verbrauch im Haushalt erst einmal nicht sehen kann. Eine Erweiterung wäre in Zukunft, den Wechselrichter ebenso auszulesen um so über die Differenz aus Produktion und Einspeisung den Verbrauch zu ermitteln.