Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Grafana & FLUX - count() every day

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Grafana & FLUX - count() every day

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

      Guten Morgen zusammen,

      also richtige Freunde werden wir nicht mit Grafana und dieser neuen FLUX Sprache. Da war mir das alte InfluxQL wesentlich angenehmer. Aber zukünftig setzt man ja auf FLUX.

      Hampel seit Tagen damit rum einfach mal ein Balkendiagramm zu erstellen wo einfach von einem Datenpunkt die Anzahl der Punkte aufsummiert werden und als Balkendiagramm in Grafana angezeigt werden.
      Ich hab das ähnlicherweise bei meiner PV Anlage mit InfluxQL gemacht (PV Prod einfach aufsummiert und als Balkendia dargestellt).
      Mit Flux bekomme ich es einfach nicht hin - jemand eine Idee:

      FLUX:

      from(bucket: "iobroker")
        |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
        |> filter(fn: (r) => r["_measurement"] == "meinDatenpunkt")
        |> filter(fn: (r) => r["_field"] == "value")
        |> count()
        |> yield(name: "count")
      

      f3cd8a7b-f07c-4ae5-ad95-ea6d13bd4404-image.png

      Hier der InfluxQL als Beispiel:

      SELECT max("value") FROM "meinDatenpunkt" WHERE time >= 1671788809115ms and time <= now() GROUP BY time(1d) fill(null)
      

      b2cd920f-3ebc-4b82-a614-5c0b0f4364cc-image.png

      Meister Mopper 1 Reply Last reply Reply Quote 0
      • Meister Mopper
        Meister Mopper @Segway last edited by

        @segway

        Hier ein Beispiel für anwachsende Werte:

        import "timezone"
        option location = timezone.location(name: "Europe/Berlin")
        
        from(bucket: "iobroker")
          |> range(start: -30d, stop: v.timeRangeStop)
          |> filter(fn: (r) => r["_measurement"] == "0_userdata.0.Energie.PV.Tagesverbrauch" and r["_field"] == "value")
          |> difference()
          |> aggregateWindow(every: 1d, fn: sum, timeSrc: "_start")
        

        114453b3-bc9e-4594-87b5-d5f23489e059-grafik.png

        Segway 1 Reply Last reply Reply Quote 0
        • Segway
          Segway last edited by

          @meister-mopper sagte in Grafana & FLUX - count() every day:

          |> difference()
          |> aggregateWindow(every: 1d, fn: sum, timeSrc: "_start")```

          Ah sooooo, erst difference und dann aggregate
          Oh man ey.....das sieht gut aus

          1 Reply Last reply Reply Quote 0
          • Segway
            Segway @Meister Mopper last edited by

            @meister-mopper
            Der Wert für den aktuellen Tag stimmt aber nicht. Da steht 21 aber ich habe schon 23 Werte drin:

            from(bucket: "iobroker")
              |> range(start: -7d, stop: now())
              |> filter(fn: (r) => r["_measurement"] == "meinDP")
              |> filter(fn: (r) => r["_field"] == "value")
              |> difference()
              |> aggregateWindow(every: 1d, fn: count, timeSrc: "_start")
            
            
            Marc Berg 1 Reply Last reply Reply Quote 0
            • Marc Berg
              Marc Berg Most Active @Segway last edited by Marc Berg

              @segway Das dürfte ein Zeitzonenproblem sein, guck doch mal bei @Meister-Mopper

              Ansonsten wird UTC als Grundlage genommen und damit die Summe zeitlich verschoben.

              Segway 1 Reply Last reply Reply Quote 0
              • Segway
                Segway @Marc Berg last edited by

                @marc-berg
                Yup, war ein timezone Problem. Nun passt es !

                1 Reply Last reply Reply Quote 0
                • OstfrieseUnterwegs
                  OstfrieseUnterwegs last edited by

                  mMn kannst du dir difference() sparen. Du berechnest damit die Differenz der einzelnen values, aber machst damit später nichts sondern zählst einfach nur, und zwar jeweils über ein Zeitfenster von einem Tag. Lass also mal difference weg und schau, ob das gleiche rauskommt.

                  Eigentlich ist flux genial, wenn man mal begriffen hat, wie es funktioniert - ich bin da auch noch gaaanz am Anfang.

                  Segway Meister Mopper 2 Replies Last reply Reply Quote 0
                  • Segway
                    Segway @OstfrieseUnterwegs last edited by

                    @ostfrieseunterwegs sagte in Grafana & FLUX - count() every day:

                    mMn kannst du dir difference() sparen. Du berechnest damit die Differenz der einzelnen values, aber machst damit später nichts sondern zählst einfach nur, und zwar jeweils über ein Zeitfenster von einem Tag. Lass also mal difference weg und schau, ob das gleiche rauskommt.

                    Habe ich mal weggelassen.
                    Für den laufenden Tag bleibt es gleich ABER für die vorherigen kommt ein Datenpunkt weniger raus mhhhh

                    Eigentlich ist flux genial, wenn man mal begriffen hat, wie es funktioniert - ich bin da auch noch gaaanz am Anfang.

                    Ja FLUX ist richtig mächtig, aber man muss es erstmal verstehen. Da bin ich noch vor dem Anfang

                    1 Reply Last reply Reply Quote 0
                    • Meister Mopper
                      Meister Mopper @OstfrieseUnterwegs last edited by

                      @ostfrieseunterwegs sagte in Grafana & FLUX - count() every day:

                      mMn kannst du dir difference() sparen.

                      Dann kommen bei mir komplett andere Werte.

                      OstfrieseUnterwegs 1 Reply Last reply Reply Quote 0
                      • OstfrieseUnterwegs
                        OstfrieseUnterwegs @Meister Mopper last edited by

                        @meister-mopper Ja bei Dir schon, du summierst ja auch auf, Da brauchst du Difference. Aber @Segway will ja wohl nur zählen und nicht rechnen (summieren)

                        Segway 1 Reply Last reply Reply Quote 1
                        • Segway
                          Segway @OstfrieseUnterwegs last edited by

                          @ostfrieseunterwegs
                          Jo ich will einfach nur wissen wieviel Datenpunkt pro Tag in dem Datenpunkt drin sind.

                          1 Reply Last reply Reply Quote 0
                          • OstfrieseUnterwegs
                            OstfrieseUnterwegs last edited by OstfrieseUnterwegs

                            Wahrscheinlich wisst ihr das, aber ich mache mir das mit flux immer folgendermaßen klar

                            from(bucket: "iobroker")
                            --> Schau mal in den Datentopf iobroker, zapfe ihn an und liefere mir mal alles was

                            |> range(start: -30d, stop: v.timeRangeStop)
                            --> in dem Zeitfenster von -30 Tage bis jetzt liegt

                            |> filter(fn: (r) => r["_measurement"] == "0_userdata.0.Energie.PV.Tagesverbrauch" and r["_field"] == "value")
                            --> aber doch nicht alles sondern nur die Datensätze, die dem Kriterium _measurement == "0_userdata.Energie.PV.Tagesverbrauch" entsprechen. Und da auch nicht alle Werte, sondern nur die, die im Feld 'value' stehen

                            Nun habe ich einen stream, der nur noch aus den Paaren Zeitstempel, Wert besteht. Der wird nun weitergereicht an

                            |> difference()
                            --> Berechnet jeweils die Differenz aus zwei aufeinanderfolgenden Werten. Daher nun ein Stream aus Zeitstempel, Differenz-zum-Vorgänger-Wert.
                            Das schieben wir nun in die Aggregate Funktion

                            |> aggregateWindow(every: 1d, fn: sum, timeSrc: "_start")
                            --> die teilt das Ganze in Blöcke auf, die jeweils die Differenzwerte für einen Tag enthalten. Fängt dabei bei _start (das kommt aus dem Range von ganz oben) an. Und innerhalb dieser Blöcke summiere alles auf. Bei @Segway entsprechen fn: count. Weil da nur gezählt wird, ist egal was im Wert steht, da ist nur wichtig, dass irgendwas drin steht.

                            Segway 1 Reply Last reply Reply Quote 2
                            • Segway
                              Segway @OstfrieseUnterwegs last edited by

                              @ostfrieseunterwegs
                              Sehr gute Erklärung !!! TOP

                              Frage:
                              ich habe immer wieder das Problem, dass die Beschriftung der Datenpunkte nicht passt und ich dann per Override arbeiten muss.
                              Kriegt ich das nicht irgendwie "automatisierter" hin ???

                              Meister Mopper OstfrieseUnterwegs Glasfaser 3 Replies Last reply Reply Quote 0
                              • Meister Mopper
                                Meister Mopper @Segway last edited by

                                @segway sagte in Grafana & FLUX - count() every day:

                                Kriegt ich das nicht irgendwie "automatisierter" hin ???

                                Ist mir noch nicht gelungen, ich arbeite auch mit overrides.

                                Glasfaser 1 Reply Last reply Reply Quote 0
                                • OstfrieseUnterwegs
                                  OstfrieseUnterwegs @Segway last edited by

                                  @segway Jain... in flux funktioniert leider yield nicht mehr, damit konnte man früher den Namen der Ausgabe setzen, Das geht nun nur noch in Grafana per Override.
                                  Aber eine Andere Möglichkeit ist, bei den Einstellungen zum Datenpunkt, einen Alias zu benutzen. Statt dem ellenlangen Namen (oben) kommt es geschmeidig mit dem Alias (unten) in influx an. Da müssten sogar Blanks etc funktionieren, da der Wert ja in das Feld _measurement in der influxdb geschrieben wird.

                                  65b46b73-05b6-4d99-bd62-a3f0286877b6-image.png

                                  1 Reply Last reply Reply Quote 0
                                  • Glasfaser
                                    Glasfaser @Meister Mopper last edited by

                                    @meister-mopper sagte in Grafana & FLUX - count() every day:

                                    Ist mir noch nicht gelungen, ich arbeite auch mit overrides.

                                    Ab 28:50 erklärt , mit Value Mapping REGEX

                                    https://www.youtube.com/watch?v=fbbmhhgyIn4

                                    OstfrieseUnterwegs 1 Reply Last reply Reply Quote 1
                                    • OstfrieseUnterwegs
                                      OstfrieseUnterwegs @Glasfaser last edited by

                                      @glasfaser Stimmt, damit kann man Value mappen. Das geht auch schon in flux. Unten hab ich aus den Werten das % rausgelöscht, weil ich das im Dashboard nicht brauchen konnte. Das import "strings" in der ersten Zeile ist wichtig
                                      Außerdem gibt es auch im tab transformation die Möglichkeit, das zu tun. Wie immer gilt: man sollte sich auf eine Art festlegen, sonst sucht man später ewig, wenn mal was nicht funktioniert (also ich: IMMER)

                                      import "strings"
                                      from(bucket: "iobroker")
                                        |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                                        |> filter(fn: (r) => r["_measurement"] == "Device-Status")
                                        |> filter(fn: (r) => r["_field"] == "value")
                                        |> aggregateWindow(every: 12h, fn: last, createEmpty: false)
                                        |> map(fn: (r) => ({r with _value: strings.replaceAll(v: r._value, t: "%", u: "")}))
                                      
                                      1 Reply Last reply Reply Quote 1
                                      • Glasfaser
                                        Glasfaser @Segway last edited by Glasfaser

                                        @segway

                                        Die Video´s von diesem YouTuber würde ich dir empfehlen ... bin auch gerade bei 1.8 > 2. am wechseln .

                                        Habe aber die Datenbankabfrage schon in Grafana mit diesem API HTTP hinbekommen , so das ich noch die alte Influx Sprache nutzen kann .

                                        1 Reply Last reply Reply Quote 0
                                        • Marc Berg
                                          Marc Berg Most Active last edited by Marc Berg

                                          Ein Umbenennen geht auch einfacher mit der Funktion:

                                          |> rename(columns: {_value: "test"})

                                          Ich weiß nicht, ob das euren Anwendungsfall erschlägt?

                                          Ansonsten arbeite ich gern mit dem "Data Explorer" der Datenbank, damit kann man sich seine Querys schön zusammenklicken und hat auch eine Hilfe bzgl. zusätzlicher Funktionen. Die Query kann man dann nach Grafana kopieren.

                                          a476c59f-4994-45ac-82b1-c4752801365e-grafik.png

                                          e00a1d9f-45ce-49b1-944d-d3065ec266d2-grafik.png

                                          c75be685-3f97-4ec5-ba1f-92328b9dc634-grafik.png

                                          OstfrieseUnterwegs 1 Reply Last reply Reply Quote 1
                                          • OstfrieseUnterwegs
                                            OstfrieseUnterwegs @Marc Berg last edited by

                                            @marc-berg sagte in Grafana & FLUX - count() every day:

                                            |> rename(columns: {_value: "test"})

                                            Jau, wieder was gelernt. 👍

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            456
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            20
                                            1474
                                            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