Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Grafana
    5. Grafana Zeitstempel für bar anpassen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Grafana Zeitstempel für bar anpassen

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

      Hallo Zusammen,

      ich bin mir nicht sicher ob das Topic passt. Wenn es ein bessere gibt, bitte verschieben.
      Ich bau mir gerade ein Grafana bar charts zusammen, in dem mir die 3 verschiedene Daten angezeigt werden sollen:

      1. Strom aus dem Netz (gelb)
      2. Aus der Solaranlage verwendeter Strom (grün)
      3. Von der Solaranlage ins Netz eingespeist (blau)
        Alle Farben werden noch überarbeitet 😉

      Für die abgelaufenen Monate funktioniert das stacking wunderbar. Für den aktuell laufenden Monitor funktioniert es leider nicht. Ursache ist (nach meiner Vermutung) der Zeitstempel in der InfluxDB. Dieser liegt bei den abgelaufenen Monaten beim auf dem letzten Tag im Monat um 21:00 (Z? UTC?).
      Hat jemand ne Idee wie ich die 3 einzelnen Bars stacken kann?
      mir würde dazu einfallen den Zeitstempel dieses Messpunktes zu manipulieren (Uhrzeit abschneiden).
      Gibt es noch andere Möglichkeiten und weis jemand wie ich das durchführen kann?

      a59f216b-4d9f-4cc7-afc7-39ee28aaa5ca-image.png
      dd05e890-38c7-4b8c-8148-521a9a5ac591-image.png

      Ich freue mich über antworten, werde allerdings erst morgen Abend zum Antworten kommen.

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

        @gaunt sagte in Grafana Zeitstempel für bar anpassen:

        Gibt es noch andere Möglichkeiten und weis jemand wie ich das durchführen kann?

        Zeig mal bitte die Flux-Queries.

        1 Reply Last reply Reply Quote 0
        • G
          Gaunt last edited by

          @marc-berg said in Grafana Zeitstempel für bar anpassen:

          Zeig mal bitte die Flux-Queries.

          Hier die Querie von der Solarerzeugung:

          import "timezone"
          option location = timezone.location(name: "Europe/Berlin")
          from(bucket: "IOBroker")
            |> range(start: -10mo, stop: now())
            |> filter(fn: (r) => r["_measurement"] == "0_userdata.0.Energie.Strom.Historie.AktuellerMonat.StromSolarVerwendet")
            |> filter(fn: (r) => r["_field"] == "value")
            |> aggregateWindow(every: 1mo, offset: -10s, fn: last, createEmpty: false)
            |> yield(name: "Solar")
          

          Hier ist die vom Netzbezug:

          import "timezone"
          option location = timezone.location(name: "Europe/Berlin")
          from(bucket: "IOBroker")
            |> range(start: -10mo, stop: now())
            |> filter(fn: (r) => r["_measurement"] == "0_userdata.0.Energie.Strom.Historie.AktuellerMonat.StromBezug")
            |> filter(fn: (r) => r["_field"] == "value")
            |> aggregateWindow(every: 1mo, offset: -10s, fn: last, createEmpty: false)
            |> yield(name: "bezug")
          

          Und hier von der Einspeisung aus der Solaranlage ins Netz:

          import "timezone"
          option location = timezone.location(name: "Europe/Berlin")
          from(bucket: "IOBroker")
            |> range(start: -10mo, stop: now())
            |> filter(fn: (r) => r["_measurement"] == "0_userdata.0.Energie.Strom.Historie.AktuellerMonat.StromEingespeist")
            |> filter(fn: (r) => r["_field"] == "value")
            |> aggregateWindow(every: 1mo, offset: -10s, fn: last, createEmpty: false)
              |> map(fn: (r) => ({ r with _value: r._value * -1.0 }))
            |> yield(name: "Eingespeist")
          

          Alle Datenpunkte werden im IOBroker geschrieben wenn sich der Wert (z.B. Netzbezug) erhöht und vom IOBroker wird alle 10min in die InfluxDB geschrieben.

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

            @gaunt sagte in Grafana Zeitstempel für bar anpassen:

            |> aggregateWindow(every: 1mo, offset: -10s, fn: last, createEmpty: false)

            Ich bin kein Fan von Offsets in den Queries, was soll damit erreicht werden?

            Versuche mal die drei Zeilen

            |> aggregateWindow(every: 1mo, offset: -10s, fn: last, createEmpty: false)
            

            auszutauschen durch

            |> aggregateWindow(every: 1mo, fn: last, createEmpty: false, timeSrc: "_start")
            

            Ohne die Quelldaten ist es natürlich etwas schwierig.

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

              @marc-berg

              Super cool.
              das hat funktioniert. Der Wert der im November steht, ist zwar der falsche. Aber der gleiche falsche Wert steht auch in der Datenbank. Daher funktioniert es genau so wie es sollte.

              Kannst du mir noch sagen was der Code der das Offset ersetzt hat macht?

              timeSrc: "_start"
              

              aca72d85-e26f-49f1-ad51-274631a1ce2d-image.png

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

                @gaunt sagte in Grafana Zeitstempel für bar anpassen:

                Kannst du mir noch sagen was der Code der das Offset ersetzt hat macht?

                Mit der aggregateWindow Funktion werden ja eine Reihe von Werten (in deinem Fall von einem Monat) zusammengefasst und durch EINEN Wert ersetzt. Mit den "fn" Attribut wird festgelegt, was mit den einzelnen Werten passiert ("sum" für Summe, "mean" für Mittelwert etc.)
                Jedenfalls wird mit dem "timeSrc" Parameter festgelegt, welchen Zeitstempel der resultierende Wert bekommt. Im Standard wird das ENDE des Zeitfensters angenommen, das mit "aggregateWindow" gebildet wird. Mit "_start" wird dagegen der Anfang des Zeitfensters genommen, also 0 Uhr des ersten des Monats.
                Für den aktuellen Monat ist das Ende des jeweiligen Zeitfensters gleich dem letzten aufgezeichneten Wert. Und wenn nicht alle drei Werte in der selben Mikrosekunde aufgezeichnet wurden, kann nicht gestapelt werden.

                Schwierig zu erklären (ohne was dabei aufzumalen). Ich hoffe, ich konnte es ein wenig klarstellen.

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

                  @marc-berg

                  Doch perfekt erklärt. Zu mindestens habe ich es verstanden.

                  Was ich eben in meiner Freude Übersehen habe, ist das sich der "Versatz" jetzt auf den Anfang der Datenreihe verschoben hat.
                  0a459aa7-a8ca-4f83-bd3a-9320215567a1-image.png

                  Die von Grafana aus der DB ausgelesenen Daten sehen so aus:
                  ecd2269f-9d03-4c7a-85a9-f3d7713d8384-image.png
                  b1faa1e4-64b4-4997-a8fe-184b8e3d53ee-image.png
                  1e427364-a640-4112-b931-1e6ce80231bb-image.png
                  Das sind die Daten die für diesen Monat in der Datenbank vorliegen (Normalerweise liegen jedoch mehrere Daten für einen Monat vor).
                  7ab477be-00de-4efc-b512-043d2a0487fb-image.png

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

                    @gaunt sagte in Grafana Zeitstempel für bar anpassen:

                    "Versatz" jetzt auf den Anfang der Datenreihe verschoben hat.

                    Je nachdem, welchen Zeitraum man anzeigen lässt kann das natürlich passieren. Das kann man verhindern, indem man immer den Anfang des (bei dir) Monats nimmt. Das geht mit der truncate Funktion. Also die "range" Zeilen noch austauschen und "date" importieren.

                    import "date"
                    |> range(start: date.truncate(t:-10mo, unit:1mo))
                    

                    "stop: now()" kann man weglassen, da sowieso der Defaultwert

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

                      @marc-berg said in Grafana Zeitstempel für bar anpassen:

                      geht mit der truncate Funktion

                      Genau das hat funktioniert.
                      Vielen Dank nochmal. Das hat mir unglaublich viel geholfen und viele viele Stunden des testen, lesen und Suchens erspart.
                      Zu mindestens wenn das was ich bereits getan habe missachtet.

                      Vielen Dank nochmal 🙂

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      824
                      Online

                      31.7k
                      Users

                      79.7k
                      Topics

                      1.3m
                      Posts

                      2
                      9
                      515
                      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