5.2 – Grafana – Dashboard für den Stromzähler
In diesem Artikel zeige ich Dir, wie Du Dir ein einfaches Dashboard für Deinen Stromzähler aufbauen kannst.
Für meine Auswertung des Strom-Verbrauchs war ich schon länger auf der Suche nach einer Darstellung des aktuellen Leistungsbezugs sowie der Verbräuche innerhalb der letzten Stunden und der Tageswerte im Rückblick auf einen Monat. Mit Grafana sollte diese Darstellung kein Problem darstellen. Im Artikel werde ich euch zeigen, wie ich dieses Dashboard umgesetzt habe.
Bevor wir mit dem Aufbau des Dashboards beginnen, hier zunächst der verwendete Stromzähler aus dem Homematic-System. Du kannst natürlich auch jeden anderen Sensor für Dein ioBroker verwenden. In meinem Fall ist Homematic verfügbar, daher habe ich mich für diese Lösung entschieden.
ELV Homematic Komplettbausatz Zählersensor-Sendeeinheit Strom/Gas HM-ES-TX-WMDer Zähler verfügt in meinem Beispiel über eine IR-Schnittstelle, daher habe ich den folgenden Sensor verwendet.
ELV Homematic Komplettbausatz Energiesensor für Smart Meter ES-IECNach dem wir die Sensoren erfolgreich in Homematic und ioBroker integriert haben, können wir nun die folgenden Datenpunkte in der InfluxDB speichern:
– Aktuelle Leistung in Watt
– Zählerstand in kWh
Wir können jetzt mit der Erstellung des Dashboard beginnen. Ich habe mir dazu zunächst in leeres Dashboard angelegt. Im nächsten Schritt fügen wir dann ein neues Panel hinzu. In den Panel-Einstellungen habe ich als Visualisierungstyp Graph gewählt.
Im Query-Editor habe ich dann in der FROM Klausel den Datenpunkt der aktuellen Leistung gewählt. In der GROUP BY Klausel müssen wir dann noch den fill auf null setzen. Alternativ könnt ihr hier auch linear einstellen. Im Graphen sehen wir jetzt bereits die Leistung in Watt der letzten Stunden.
Im nächsten Schritt habe ich dann noch den Titel des Panels gesetzt.
In den Display-Einstellungen habe ich die Linie aktiviert und die Breite (line width) auf 1 gesetzt. Hier könnt ihr natürlich nach euren Belieben den Graphen formatieren.
Im nächsten Schritt fügen wir das Panel für die Visualisierung der aktuellen Leistung ein. Hierzu habe ich ein STAT-Widget gewählt. Im Query-Editor habe ich in der FROM Klausel den Datenpunkt der aktuellen Leistung gewählt und zudem in der GROUP BY Klausel entfernt, da wir im Select-Statement nur einen Wert lesen werden.
In den Panel-Einstellungen müssen wir dann noch im Bereich Display – die Calculation Eigenschaft auf Last setzen. Zudem habe ich auch hier den Titel des Panels gesetzt.
Im letzten Schritt definieren wir nun ein weiteres GRAPH Panel mit dem Stromverbrauch der letzten 30 Tage. Dazu habe im ersten Schritt die folgende Query über die manuelle SQL-Statement Eingabe definiert:
select non_negative_difference(last(cumulative_sum)) from (
select cumulative_sum(non_negative_difference(last("value"))) from "linkeddevices.0.Stromzaehler.Zaehlerstand"
WHERE $timeFilter GROUP BY time(24h)
) WHERE $timeFilter GROUP BY time(24h)
Bitte passt in der Query euern Datenpunkt entsprechend an.
Für die Anzeige der letzten 30 Tage habe ich hier die relative Zeit der Query mit dem Wert 1M (1 Monat) überschrieben. Somit reagiert das Panel nicht mehr auf die Zeit-Einstellung des Dashboards.
In der Panel-Konfiguration des Graphen habe ich zudem noch die Einheit (Unit) der linken Y-Achse definiert. Im Graphen verwenden wir Kilowattstunden (kWh). Ich habe zudem den minimalen Wert auf 0 und den maximalen Wert auf 15 gesetzt. Hier solltet ihr die Einstellungen an eure Werte anpassen.
Nach dem das Panel gespeichert wurde, können wir jetzt die Panels entsprechend platzieren und die Größe anpassen. In meinem Fall sieht das Dashboard jetzt so aus:
- 1 - Einleitung
- 1.1 - Einrichtung eines neuen Proxmox Containers
- 1.2 - Installation von InfluxDB und Integration in ioBroker
- 1.3 - Installation von Grafana
- 1.4 - Alternative Installation auf einem Raspberry Pi
- 2 - Grundlagen von Grafana
- 2.1 - Aufbau der Software
- 2.2 - Hinzufügen einer neuen Datenquelle
- 3 - Visualisierung im Dashboard
- 3.1 - Graph
- 3.2 - Stat
- 3.3 - Gauge
- 3.4 - Bar gauge
- 3.5 - Plugin - Discret Panel
- 3.6 - Plugin - Clock Panel
- 4 - Weitere Dashboard Einstellungen und Funktionen
- 4.1 - Festlegung des Zeitraums
- 4.2 - Aktualisierung des Dashboards
- 4.3 - Playlists
- 5 - Anwendungsbeispiele
- 5.1 - Dashboard für Wetterdaten
- 5.2 - Dashboard für den Stromzähler
- 5.3 - Dashboard für die Internet Geschwindigkeit
- 5.4 - Gerät/Leuchtmittel History visualisieren
- 6 - Einbindung in andere Systeme
- 6.1 - Anpassung der Grafana Konfiguration
- 6.2 - Dashboard oder Panel freigeben
- 6.3 - ioBroker VIS Integration
- 6.4 - ioBroker Jarvis Integration
- 7 - Grafana-Cloud Einführung
- 7.1 – iobroker, InfluxDB Cloud und Grafana Cloud – InfluxDB Cloud Installation
- 7.2 – iobroker, InfluxDB Cloud und Grafana Cloud – Grafana Cloud Einrichtung
- 7.3 – iobroker, InfluxDB Cloud und Grafana Cloud – Einfaches Dashboard erstellen
Ich hoffe Dir gefällt der Artikel. Über Kommentare, Anregungen oder Ideen freue ich mich wie immer 🙂
Eine Frage: Ich messe den Stromverbrauch einzelner Funksteckdosen (Tasmota). Dabei ist mir nur der Gesamtverbrauch des Vortages wichtig. Wie schaffe ich es, auf der y-Achse Datum – 1 Tag darzustellen?Als aktueller Tag wird mir jetzt der Verbrauch des Vortages angezeigt. Danke.
Hi,
ich habe ebenfalls versucht den Stromzähler „nachzubauen“ und bekomme auch den aktuellen Stromverbrauch in Grafana angezeigt (über influxdb).
Allerdings funktioniert der Query zur Anzeige des Gesamtverbrauchs pro Tag bei mir nicht. Es werden einfach keine Werte angezeigt.
Setze ich das Interval runter auf 1h, so bekomme ich Werte. Bei allem über 1h kommt „No data“.
Weißt du zufällig woran das liegen kann?
Das funktioniert nicht:
select non_negative_difference(last(cumulative_sum)) from (
select cumulative_sum(non_negative_difference(last(„value“))) from „0_userdata.0.consumption“
WHERE $timeFilter GROUP BY time(24h)
) WHERE $timeFilter GROUP BY time(24h)
Das zeigt Werte an:
select non_negative_difference(last(cumulative_sum)) from (
select cumulative_sum(non_negative_difference(last(„value“))) from „0_userdata.0.consumption“
WHERE $timeFilter GROUP BY time(1h)
) WHERE $timeFilter GROUP BY time(24h)
Lieben Dank vorab.
Ich habe leider das gleiche Phänomen, wie Michael oben beschreibt. Gibt es schon eine Lösung?
Ich habe das gleiche Problem. Wäre super, wenn jemand eine Lösung hätte. Und noch besser dann auch zusätzlich eine Monatsübersicht 😉
Leider ist es bei mir auch so. 🙁
Morgen!
Habt ihr den Code einfach reinkopiert, und dann den Datenpunkt angepasst?
select non_negative_difference(last(cumulative_sum)) from (
select cumulative_sum(non_negative_difference(last(„value“))) from „knx.0.Zentral.Elektrozähler.Wirkenergie_A__total_in_kWh_HT“
WHERE $timeFilter GROUP BY time(24h)
) WHERE $timeFilter GROUP BY time(24h)
Funktioniert tadelos! Außer das bei mir am WE wegen HT NT erstmal nichts angezeigt wird 🙂
Danke für die Hilfe!
erledigt! geht auch. ….
Mit Grafana 8.x geht die Query leider nicht – kannst du bitte helfen?
Aloha,
ich habe es gerade in der 8.2 nachgebaut. Bei mir wurden im Query Editor auch keine Daten angezeigt, dies lag bei mir an der Voreinstellung einer Betrachtungszeit von 24h, ein schnelles Einstellen auf 30d hat es behoben. Habt ihr das mal ausprobiert?
Beste Grüße
Björn
Servus!
Bei 2 Tarifzählern ist es sinnvoll auf der rechten Seite „Stack Series“ auf „normal“ zu stellen.
Somit werden beiden Balken HT und NT „aufeinander“ gestellt.
Ansonsten überlagert der eine den anderen, in meinem Fall NT den HT Balken, und die Summe des Verbrauchs stimmte nicht.
Nach einem Upgrade der Influx OSS auf 2.2 habe ich jetzt Flux anstatt InfluxQL als Abfragesprache in Grafana…
Aus:
SELECT non_negative_difference(LAST(cumulative_sum)) FROM (
SELECT cumulative_sum(non_negative_difference(LAST(„value“))) FROM „ZaehlerstandIMPORT“
WHERE $timeFilter GROUP BY time(24h)
) WHERE $timeFilter GROUP BY time(24h)
habe ich jetzt folgendes gemacht:
from(bucket: „iobroker/global“)
|> range(start: -30d)
|> filter(fn: (r) => r._measurement == „ZaehlerstandIMPORT“ and r._field == „value“)
|> aggregateWindow(every: 1d, period: 1d, fn:mean, createEmpty: false )
|> difference()
Allerdings stimmen die Werte nicht exakt überein. Hat hier jemand einen Tip?
Ich habe diesen Datenpunkt genommen
select non_negative_difference(last(cumulative_sum)) from (
select cumulative_sum(non_negative_difference(last(„value“))) from „shelly.0.SHPLG-S#E423FA#1.Relay0.Energy“
WHERE $timeFilter GROUP BY time(24h)
) WHERE $timeFilter GROUP BY time(24h)
Mir wird aber auch nichts angezeigt. Oder ist mein Datenpunkt falsch? Wenn ich anstatt Energy den Power Datenpunkt nehme geht es auch nicht.
Oder muss ich den von Konsumtion aus Sourceanalytix nehmen? Sorry, aber ich stehe noch recht am Anfang.
Hallo!
Eine Sache habe ich noch nicht verstanden. Warum nicht einfach
SELECT difference(last(„value“)) FROM „messung“ WHERE $timeFilter GROUP BY time(1h)
Was bringt das Aufsummieren und später wieder differenzieren?