Grafana

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-WM

Der 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-IEC

Nach 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:

Ich hoffe Dir gefällt der Artikel. Über Kommentare, Anregungen oder Ideen freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

13 Gedanken zu „5.2 – Grafana – Dashboard für den Stromzähler

  • Thomas D.

    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.

    Antwort
  • Michael

    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.

    Antwort
  • Thomas

    Ich habe leider das gleiche Phänomen, wie Michael oben beschreibt. Gibt es schon eine Lösung?

    Antwort
  • Achim

    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 😉

    Antwort
  • vsa

    Leider ist es bei mir auch so. 🙁

    Antwort
  • Johannes

    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!

    Antwort
    • Johannes

      erledigt! geht auch. ….

      Antwort
  • Mit Grafana 8.x geht die Query leider nicht – kannst du bitte helfen?

    Antwort
    • Bjoern

      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

      Antwort
  • Johannes

    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.

    Antwort
  • 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?

    Antwort
  • 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.

    Antwort
  • Florian

    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?

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.