Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Grafana
    5. Sammelthread - Custom Grafana Visualization

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Sammelthread - Custom Grafana Visualization

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      hennerich last edited by

      Hallo zusammen,

      besteht ev. Interesse an einem Sammelthread, in dem man Anpassungen und Customizing an Grafana Graphen diskutiert?
      Falls ja, dann mal los. Falls nicht, lieber Mod, dann kannst du den Thread auch wieder wegwerfen.

      Die Idee ist, dass jeder kurz seinen Wunsch vorträgt und man dann am Ende das gewünschte Ergebnis MIT einer Anleitung bekommt, wie man das ganze bewerkstelligen kann.

      Ich würde mal anfangen 😊
      Das hier ist mein (mittlerweile migriertes) Dashboard:
      c1ccd503-1e29-4b82-ad55-ac3ae5b6d3e1-grafik.png
      Seit ich auf InfluxDB V2 umgestiegen bin, ist vieles anders als bisher. Man muss sich erst einmal an die neue Flux Sprache "gewöhnen" bzw. braucht Leute, die einem Tipps geben.
      Ich hab mich z.B. durch die Videos von Eddy viel Input geholt.

      Mein Graph für die Anzeige des Tagesverbrauchs über die letzten 3 Wochen funktionierte nicht mehr.
      0418e2ff-86dc-43e1-8db6-8d859aeba171-grafik.png
      Normalerweise sieht ein Flux Query so aus:

      from(bucket: "iobdata")
        |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
        |> filter(fn: (r) => r["_measurement"] == "javascript.0.Solar.Wechselrichter.PVErzeugteEnergieAktuell")
        |> filter(fn: (r) => r["_field"] == "value")
        |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)
        |> yield(name: "last")
      

      So umgesetzt sah mein Graph dann so aus:
      b1535c27-4217-4ebd-9afc-e25284c770f3-grafik.png

      Ich musste die 3 Wochen erst hier konfigurieren:
      08fe60f7-50eb-4180-a1b4-40fbe006f410-grafik.png
      Das 3w steht für 3 Wochen. Damit sah der Graph nun so aus:
      cfea7600-748e-45fe-add5-a4265148864f-grafik.png
      Ich wollte aber die Summe der Werte pro Tag in jeweils einem Balken angezeigt bekommen. Dazu musste ich den Query wie folgt umbauen:

      from(bucket: "iobdata")
        |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
        |> filter(fn: (r) => r["_measurement"] == "javascript.0.Solar.Wechselrichter.PVErzeugteEnergieAktuell")
        |> filter(fn: (r) => r["_field"] == "value")
        |> aggregateWindow(every: 1d, fn: last, createEmpty: false)
        |> yield(name: "last")
      

      Damit bekam ich dann das Ergebnis:
      45ebe07d-f642-4327-9604-430fc72752c0-grafik.png
      Jetzt noch den Graph Style sowie die Fill opacity anpassen
      8da776ad-330e-4014-80a8-e5c4d27cc4fc-grafik.png
      und hier ist das Ergebnis:
      ee9b7907-071c-4db5-8870-60e6b1b95306-grafik.png

      H Homoran 2 Replies Last reply Reply Quote 1
      • H
        hennerich @hennerich last edited by

        Hier nun die erste Frage.
        Auch meine Heizung soll noch ein paar Graphen bekommen.
        Einen habe ich schon gebaut:
        98d52494-67ef-4cd1-8fe4-6ce55279757f-grafik.png
        Hier sieht man die Puffertemperatur und die jeweilige Brennerlaufzeit als true/false Wert.
        Ich möchte aber diese digitalen Werte nicht über die gesamte Anzeigehöhe haben. Cooler wäre, wenn sie in einem Diagramm separat angezeigt werden würde. Also unten z.B. die binären Zustände und darüber die analogen.
        Habt ihr eine Idee wie man das anstellen kann?
        Meine Konfiguration sieht so aus:
        Query Nr. 1:

        from(bucket: "iobdata")
          |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
          |> filter(fn: (r) => r["_measurement"] == "modbus.0.holdingRegisters.6_TempPufferO")
          |> filter(fn: (r) => r["_field"] == "value")
          |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)
          |> yield(name: "last")
        

        Query Nr. 2:

        from(bucket: "iobdata")
          |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
          |> filter(fn: (r) => r["_measurement"] == "modbus.0.coils.22_AnfBrenner")
          |> filter(fn: (r) => r["_field"] == "value")
          |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)
          |> yield(name: "last")
        
        1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @hennerich last edited by

          @hennerich sagte in Sammelthread - Custom Grafana Visualization:

          besteht ev. Interesse an einem Sammelthread, in dem man Anpassungen und Customizing an Grafana Graphen diskutiert?

          Da Grafana eine externe Software und kein Bestandteil von ioBroker ist, habe ich es nach OffTopic verschoben.

          1 Reply Last reply Reply Quote 0
          • M
            MarioS. last edited by MarioS.

            Hey Leute, hier sind bestimmt ein paar Grafana profis unter euch.
            Kann man 2 Abfragen ( z.b. strom letztes jahr und dieses jahr ) vergleichen und prozentual in der aktuellen anzeige darstellen?

            H 1 Reply Last reply Reply Quote 0
            • M
              MarioS. last edited by

              f73d8267-d8b0-4068-b87f-07aae963d51b-Unbenannt.png

              1 Reply Last reply Reply Quote 0
              • H
                hennerich @MarioS. last edited by

                @marios sagte in Sammelthread - Custom Grafana Visualization:

                Hey Leute, hier sind bestimmt ein paar Grafana profis unter euch.
                Kann man 2 Abfragen ( z.b. strom letztes jahr und dieses jahr ) vergleichen und prozentual in der aktuellen anzeige darstellen?

                Hey, bin gerade bei Eddy über diese Passage gestolpert. Da macht der das zwar nur über 7 Tage, aber das Grundprinzip sollte doch das gleiche sein.

                1 Reply Last reply Reply Quote 0
                • S
                  Skarpain last edited by

                  Hi ich habe grafana/influxdb auch nur durch iobroker kennengelernt und durch Eddys videos 😃
                  leider gibts eigentlich sehr wenig input zu grafana und man muss sich alles irgendwie selber basteln
                  und irgendwie wird das dashboard nie fertig 😃
                  hier mal paar screens
                  Unbenannt.png
                  Unbenannt1.png
                  Unbenannt2.png

                  Damrak2022 1 Reply Last reply Reply Quote 0
                  • Damrak2022
                    Damrak2022 @Skarpain last edited by Damrak2022

                    @skarpain Hallo, auch ich wusel mit Grafana rum und habe einige Boards erstellt. Dann habe ich Deinen Post mit den Daten für den Stromverbrauch gesehen, welche mir gut gefallen.
                    Wie hast Du das hinbekommen, das Du für jedes Gerät einen einzelnes Balkendiagramm hast?

                    Wenn ich das bei mir auf Bar Charts umstelle sieht das so aus:
                    Bildschirm­foto 2023-02-21 um 06.04.14.png

                    Und wenn ich mit der Time Range rumspiele sieht es so aus:
                    Bildschirm­foto 2023-02-21 um 06.18.50.png

                    Also immer noch nicht so, wie Die es hinbekommen hast.

                    Das habe ich mittlerweile hinbekommen.

                    1 Reply Last reply Reply Quote 0
                    • S
                      Skarpain last edited by

                      @damrak2022
                      Hi hab das über Bar Gauge gemacht

                      data = from(bucket: "iobroker")
                          |> range(start: -7d)
                      //  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                      |> filter(fn: (r) => r["_measurement"] =~ /.ENERGY_Total+/)
                      |> filter(fn: (r) => r["_field"] == "value") min = data 
                      |> min() 
                      |> set(key: "_field", value: "delta") max = data 
                      |> max()
                      |> set(key: "_field", value: "delta") 
                      union(tables: [min, max]) 
                      |> difference()
                      |> group()
                      |> top (n: 20, columns: ["_value"])
                      |> drop(columns: ["_field"])
                      |> sort(desc: true)
                      
                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      847
                      Online

                      31.7k
                      Users

                      79.7k
                      Topics

                      1.3m
                      Posts

                      5
                      9
                      748
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo