Deutsch [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….

Das magische Auge
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.
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.
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
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
    listener 1883 172.31.7.2
    listener 1883 127.0.0.1
    
    Desweiteren habe ich erst Mal den anonymen Zugang erlaubt
    allow_anonymous true
    
    Das ist nicht optimal, aber für erste Tests genug
  • 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.
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
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.