Einleitung & Hintergrund

Hier geht es direkt zur Anleitung

Seit einiger Zeit besitze ich bereits einen myStrom WiFi Switch, den ich abwechselnd als Zwischenstecker für den Saugroboter, die Waschmaschine und eine Stehlampe nutze. Über die App kann ich so zum Beispiel die Lampe an und ausschalten oder die Waschmaschine vom Strom trennen, wenn diese mit ihrem Programm fertig ist. Die WiFi-Steckdose hat aber, neben vielen weiteren Features, zwei weitere interessante Funktionen für mich, die ich bisher noch nicht vollständig ausreizen konnte:

  1. Abfrage von Daten über REST API
  2. Messung von Solar Panel / Strom Produktion

Gerade der zweite Punkt macht die Dose so interessant für mich, denn sie ist mit dieser Funktion perfekt dafür geeignet die Leistung meines Balkonkraftwerks zu messen. Bisher war der Zwischenstecker nur für den Innenbetrieb geeignet und ich konnte diese Funktion nicht auf dem Balkon nutzen. Aus einer Diskussion bei X (ehemals Twitter) heraus, bekam ich die Information, dass Ende 2023 ein Schutzmantel für den Stecker herausgebracht werden soll. Kurz vor Ende des Jahres bin ich auf einen frisch gelisteten Artikel mit der Bezeichnung “myStrom Switch Protect” aufmerksam geworden. Dieser sorgt für eine IP44 Zertifizierung und macht den smarten Zwischenstecker damit für den Außenbetrieb nutzbar. Das habe ich zum Anlass genommen, mich noch einmal etwas intensiver mit der Thematik “Abfrage über REST API und Visualisierung in Grafana” zu befassen. Deshalb geht es in diesem Artikel um die Abfrage der Daten aus einem myStrom WiFi Switch über REST API und die Weiterleitung der Daten an eine InfluxDB mit anschließender Visualisierung in Grafana. Dabei werden die Daten von einem Telegraf Agent eingesammelt und in die InfluxDB geschrieben.

An dieser Stelle der Hinweis, dass mir der “myStrom Switch Protect” dankenswerterweise von myStrom zu Testzwecken zugesandt wurde, dies jedoch keinen Einfluss auf die Berichterstattung hat. In erster Linie geht es in diesem Artikel um die Abfrage der Daten über die API und die Visualisierung der Daten in Grafana.

myStrom Switch Protect: Unboxing und Montage an WiFi Switch

Voraussetzungen für die Anleitung

  • Alle Hardware- und Software-Komponenten installiert und eingerichtet:
    • myStrom WiFi Switch im Netzwerk (WLAN) eingebunden
    • InfluxDB + Telegraf + Grafana installiert

myStrom REST API

Auf api.mystrom.ch findet man eine ausführliche Dokumentation der API für alle myStrom Geräte. So auch für die Abfrage eines “Reports” des myStrom WiFi Switch, der mit “http://IP-ADRESSE-MYSTROM-WIFI-SWITCH/report” folgende Werte als Antwort in einem JSON-String liefert:

{
  "power": 1.69,
  "Ws": 0.42,
  "relay": true,
  "temperature": 18.5
}

Für eine simple Darstellung der aktuellen Leistung verwende ich in dieser Anleitung den Wert “power” und gebe diesen später als Graph in Grafana aus. Wenn man genauer bestimmen möchte, wie viel Energie ein Haushaltsgerät benötigt hat oder wie viel Energie ein Balkonkraftwerk ins Hausnetz eingespeist hat, dann muss man dafür die Summe aller Werte von Ws vom Zeitpunkt der Abfrage bis zum Zeitpunkt der letzten Abfrage bilden (wird in einem weiteren Artikel behandelt). Um zu überprüfen, ob die IP-Adresse stimmt und ob der Switch auch Daten zurückgibt, kann man testweise einen cURL-Befehl über die Konsole/das Terminal eingeben:

curl --location -g 'http://IP-ADRESSE-MYSTROM-WIFI-SWITCH/report'

Telegraf Konfiguration

Die aus dem früheren Artikel erstellte Telegraf Konfiguration habe ich am Ende um den nachstehenden Teil ergänzt.

## myStrom WiFi Switch
[[inputs.http]]
  urls = ["http://IP-ADRESSE-MYSTROM-WIFI-SWITCH/report"]
  method = "GET"
  timeout = "5s"
  response_timeout = "5s"
  data_format = "json"
  [inputs.http.tags]
    device = "mystrom_switch_01"

Dieser Teil der Telegraf Konfiguration ist extra so geschrieben, dass man mehr als nur einen HTTP Input hinzufügen kann und diese auch nachher in der InfluxDB anhand eines spezifischen Tags wiedererkennt. Für jeden weiteren Adapter kann der oben stehende Code einfach mehrfach untereinander eingefügt werden - es müssen lediglich noch die “IP-Adresse” und der “Tag” angepasst werden. Wenn man einfach nur mehrere Geräte ohne Tag hinzufügen möchte, dann kann man das auch so lösen:

## myStrom WiFi Switch
[[inputs.http]]
  ## Liste mit IP-Adressen der Geräte
  urls = [
    "http://IP-ADRESSE-MYSTROM-WIFI-SWITCH-01/report",
    "http://IP-ADRESSE-MYSTROM-WIFI-SWITCH-02/report",
    "http://IP-ADRESSE-MYSTROM-WIFI-SWITCH-03/report"
  ]
  method = "GET"
  timeout = "5s"
  response_timeout = "5s"
  data_format = "json"

Information: Nach jeder Änderung an der Telegraf Konfiguration, muss der Agent neu gestartet werden. Das geht über folgenden Befehl:

systemctl restart telegraf

Ob der Telegraf Agent korrekt arbeitet, kann mit nachstehendem Befehl überprüft werden (Habt ihr, wie ich, noch andere Inputs in der Konfigurationsdatei, dann müsst ihr diese zunächst auskommentieren, um sicher zugehen, dass er auch wirklich die HTTP Inputs des myStrom Steckers verarbeitet).

telegraf --config /etc/telegraf/telegraf.conf --debug

Wenn alles funktioniert, sieht die Ausgabe aus wie hier gezeigt.

Abfrage in InfluxDB

Um es etwas angenehmer zu machen, kann man die Abfragen der Daten im Data Explorer der InfluxDB per Mausklick zusammenbauen. Dazu geht man in den Data Explorer und baut sich eine Query wie im Bild zusammen. Ich habe zunächst mein Bucket, dann den “host”, das “device” (das taucht hier nur auf, wenn ihr in der Telegraf Konfigurationen einen Tag gesetzt habt), das “field” “power” ausgewählt und abschließend auf “Submit” gedrückt. Danach sollte wie im Bild unten ein Graph zu sehen sein, der die gemessene Leistung, zum Zeitpunkt der Abfrage, anzeigt.

InfluxDB: Data Explorer und Query Builder

Über den Button “Script Editor” kann man sich diese Abfrage in der Skriptsprache Flux anzeigen lassen. Das sieht dann so aus:

from(bucket: "solar")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["host"] == "influxdb")
  |> filter(fn: (r) => r["device"] == "mystrom_switch_01")
  |> filter(fn: (r) => r["_field"] == "power")
  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)
  |> yield(name: "last")

Diesen Code-Schnipsel benötigt man, um in Grafana recht einfach einen Graph zu erstellen. Deshalb kopiert man sich den Code nun und wechselt anschließend zu Grafana.

Visualisierung in Grafana

In Grafana öffnet man ein bestehendes Dashboard oder erstellt zunächst ein neues. Über “Add” fügt man eine neue “Visualization” hinzu und wählt als “Data source” “InfluxDB”. Wie im Bild unten, sollte ein Code-Feld sichtbar sein, in das man den soeben kopierten Code aus InfluxDB einfügt. Mit einem Mausklick außerhalb des Code-Felds sollte jetzt ein Graph sichtbar sein, den man sich nach Belieben weiter konfigurieren kann. Über “Apply” speichert man die Änderungen ab. Wenn alle Änderungen am Dashboard erledigt sind, muss auch dieses abgespeichert werden.

Grafana: Anlage einer neuen Visualisierung

Der Anpassung des Graphs in Grafana sind kaum Grenzen gesetzt und so kann man die einzelnen Graphen ganz nach seinem Geschmack konfigurieren. Neben der Leistung zum Messzeitpunkt, habe ich noch einen weiteren Graphen angelegt, der sich über Zugriff auf die REST-API mit “http://IP-ADRESSE-MYSTROM-WIFI-SWITCH/temperature” die gemessene Temperatur abgreift und den Wert als Zahl + Verlauf darstellt.

Grafana: Visualisierung der Leistung einer Lampe und der Temperatur

myStrom WiFi Switch Funktion “Solar Panel”

Im Vergleich zu anderen smarten Zwischensteckern auf dem Markt, bietet der WiFi Switch von myStrom eine interessante Zusatzfunktion speziell für Betreiber eines Balkonkraftwerks an, die man über die App in den gerätespezifischen Einstellungen aktivieren kann. Hier kann man dem Stecker mitteilen, dass man keinen Stromabnehmer, sondern einen Stromlieferanten, zum Beispiel in Form einer Mini-PV-Anlage, anschließt.

myStrom App: Aktivieren der Funktion “Solar Panel”

Nach dieser Änderung befindet sich auf dem Homescreen der myStrom App eine weitere Kachel mit der Bezeichnung “Produktion”, hinter der sich die Anzeige für die Solarproduktion befindet. In dieser Übersicht erhält man Informationen zur produzierten Energiemenge eines ausgewählten Zeitraums (Jahr, Monat, Woche, Tag, Stunde, Heute) und einen Verlauf der Leistung zum jeweiligen Messzeitpunkt.

myStrom App: Graph Solar Produktion

In den gerätespezifischen Einstellungen des WiFi Switch kommt eine weitere Funktion mit Bezeichnung “Solar Actions” hinzu, mit der man bis zu drei Aktionen basierend auf Werten der Solaranlage triggern kann. Hiermit lassen sich andere Switches an/aus schalten, wenn ein bestimmter Leistungswert der Solaranlage erreicht ist. Das kann nützlich sein, wenn man sein E-Bike oder seine Akkus für Kleingeräte nur dann laden möchte, wenn ausreichend Solarstrom vorhanden ist.

myStrom App: Solar Actions

myStrom App: Solar Actions Trigger

myStrom App: Solar Actions Trigger Beispiel

Bei diesem Beispiel soll ein anderer Switch erst nach Erreichen einer Leistung von 350 W und mit einer Verzögerung von drei Minuten getriggert werden. Zusätzlich kann man sich über diese Ereignisse per Push & E-Mail, nur per Push oder nur per E-Mail benachrichtigen lassen.

myStrom Switch Protect (IP44)

Bisher konnte man den myStrom WiFi Switch nur im Innenbereich nutzen und leider war das Wetter die letzten Wochen und Monate auch zu schlecht, um das Risiko einzugehen den Switch ungeschützt auf dem verregneten Balkon einzusetzen. Wie bereits in der Einleitung erwähnt, gab es seitens myStrom bereits den Hinweis, dass ein Produkt zum Schutz der Switche kommen soll und genau das ist jetzt auch passiert. Ende 2023 ist auf der Webseite zum WiFi Switch der Switch Protect aufgetaucht, welcher den Zwischenstecker um eine IP44 Zertifizierung erweitert und ihn damit für den Außenbereich tauglich macht. Für den Bereich Solar gibt es seit kurzem sogar einen extra Bereich auf der Webseite, der explizit Besitzer von Balkonkraftwerken anspricht. Dort finden sich auch alle weiteren Informationen rund um die Schutzhülle, sowie weitere Produkte für den Einsatz an und um eine Balkonsolaranlage.

myStrom WiFi Switch mit Switch Protect an einer Außensteckdose

Da ich schon länger überlege, wie ich zusätzlich zu den Daten des Wechselrichters die Werte des Balkonkraftwerks messen kann, kam diese Neuerung genau zur richtigen Zeit. (Aufwendigere) Alternativen wären das Flashen von Tasmota auf den Growatt ShineWiFi-X-Stick oder das Anbringen eines Shelly Plus PM Mini hinter der Außensteckdose gewesen. Der WiFi Protect lässt sich mit ein wenig Gefummel einfach über den WiFi Switch stülpen und fertig. Nach der Modifizierung habe ich den Zwischenstecker noch in die Außensteckdose gesteckt und mit dem Kabel des Balkonkraftwerks verbunden (siehe Bild unten).

myStrom WiFi Switch: mit Switch Protect an Außensteckdose

Messdaten des Wifi Switch an InfluxDB und Grafana

Mit den ersten Sonnenstrahlen auf das Balkonkraftwerk zeigte die myStrom App die dazu passenden Messdaten an (siehe Bild oben). Diese Wollte ich natürlich direkt weiterverarbeiten und habe diese, wie in der Anleitung des Artikels, an meine InfuxDB weitergeleitet und in Grafana visualisiert. Als erster Wurf kam dabei dieser Graph heraus, der die Leistung des Balkonkraftwerks und die kumulierte Energie über den Tag abbildet. Wenn ich dazu längere Messstrecken habe, kann ich den Flux-Code dazu gerne veröffentlichen.

Abschließender Tipp

Am Ende noch ein kleiner Tipp: Stellt in der myStrom App die Einstellung “Schaltsperre” auf “AN” (true), wenn ihr nicht möchtet, dass “jemand”(meistens ihr selbst) versehentlich und unbemerkt das Balkonkraftwerk vom Netz trennt.

myStrom App: Schaltsperre für Solar Panel WiFi Switch an Balkonkraftwerk