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 und IO Broker "Negativer Strom"

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Grafana und IO Broker "Negativer Strom"

    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      wolfi913 @spiffel1234 last edited by

      @spiffel1234

      Probier mal vor der letzten Zeile

        |> map(fn: (r) => ({r with _value: r._value * (-1.0)}))
      

      einzufügen

      S 1 Reply Last reply Reply Quote 0
      • C
        Chrunchy @spiffel1234 last edited by

        @spiffel1234 Schreibe in die Influx-DB doch einfach beide Werte separat "Bezug" und "Einspeisung".
        Beides über einen Alias, da kannst du dann auch direkt die negativen Werte in positive umwandeln.

        Ist dann auch für eine Statistik einfacher, weil du nur noch Summen bilden musst über den gewünschten Zeitraum.

        1 Reply Last reply Reply Quote 0
        • S
          spiffel1234 @wolfi913 last edited by spiffel1234

          @wolfi913 said in Grafana und IO Broker "Negativer Strom":

          |> map(fn: (r) => ({r with _value: r._value * (-1.0)}))

          Hi das hat schon mal gut aus das Minus ist weg. Kann man das jetzt auch mit "+" darstellen?

          Hier mal der aktuelle Code:
          from(bucket: "iobroker")
          |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
          |> filter(fn: (r) => r["_measurement"] == "dbstromz_in_watt")
          |> filter(fn: (r) => r["_field"] == "value")
          |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
          |> map(fn: (r) => ({r with _value: r._value * (-1.0)}))
          |> yield(name: "mean")

          W 1 Reply Last reply Reply Quote 0
          • W
            wolfi913 @spiffel1234 last edited by wolfi913

            @spiffel1234

            Wenn ich's richtig verstehe hast Du in dem Datenpunkt sowohl positive als auch negative Werte die alle als positiv dargestellt werden sollen. Also solltest Du den Datenpunkt auftrennen. Könnte so klappen.

              |> map(fn: (r) => ({r with _positive: 
                  if r._value < 0.0 then 0.0
                  else r._value }))
              |> map(fn: (r) => ({r with _negative:
                  if r._value >= 0.0 then 0.0
                  else r._value * (-1.0)}))
              |> keep(columns: ["_time", "_positive", "_negative"])
            

            Setz' das mal anstelle von |> yield(name: "mean") in Deiner ursprünglichen Fassung ein. Dann solltest Du zwei Datenpunkte für die Anzeige im Grafana-Chart haben. Die Variablen (positive/negative) kannst Du natürlich auch anders benennen.

            S 1 Reply Last reply Reply Quote 0
            • S
              spiffel1234 @wolfi913 last edited by

              Hi, da schaut doch schon mal sehr gut aus!
              a790df5b-47cb-4012-9fa2-1f70997cc04d-image.png

              Jetzt noch eine nächste Frage und zwar wenn meine Solaranlage Nachts nichts mehr liefert, bleibt da immer noch z.B. 2 Watt stehen. Der Graph ist aber schon auf Null. Wie kann man das auf 0 ändern?
              Gehe davon aus das es der letzte Wert war bis der Controller offline gegangen ist.

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

                Hi, da schaut doch schon mal sehr gut aus!
                a790df5b-47cb-4012-9fa2-1f70997cc04d-image.png

                Jetzt noch eine nächste Frage und zwar wenn meine Solaranlage Nachts nichts mehr liefert, bleibt da immer noch z.B. 2 Watt stehen. Der Graph ist aber schon auf Null. Wie kann man das auf 0 ändern?
                Gehe davon aus das es der letzte Wert war bis der Controller offline gegangen ist.

                Hier der letzte Code Block:
                from(bucket: "iobroker")
                |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                |> filter(fn: (r) => r["_measurement"] == "dbstromz_in_watt")
                |> filter(fn: (r) => r["_field"] == "value")
                |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
                |> map(fn: (r) => ({r with _value: r._value * (-1.0)}))
                |> map(fn: (r) => ({r with Überschuss_an_Strom:
                if r._value < 0.0 then 0.0
                else r._value }))
                |> map(fn: (r) => ({r with Bezug_aus_Stromnetz:
                if r._value >= 0.0 then 0.0
                else r._value * (-1.0)}))
                |> keep(columns: ["_time", "Überschuss_an_Strom", "Bezug_aus_Stromnetz"])

                W 1 Reply Last reply Reply Quote 0
                • W
                  wolfi913 @spiffel1234 last edited by

                  @spiffel1234 sagte in Grafana und IO Broker "Negativer Strom":

                  |> map(fn: (r) => ({r with _value: r._value * (-1.0)}))
                  |> map(fn: (r) => ({r with Überschuss_an_Strom:
                  if r._value < 0.0 then 0.0
                  else r._value }))
                  |> map(fn: (r) => ({r with Bezug_aus_Stromnetz:
                  if r._value >= 0.0 then 0.0
                  else r._value * (-1.0)}))
                  |> keep(columns: ["_time", "Überschuss_an_Strom", "Bezug_aus_Stromnetz"])

                  1. Du drehst jetzt übrigens zweimal das "+/-" um. In der oberen Zeile holst Du die positiven Werte ins Negative und umgekehrt. Und unten holst Du dann die negativen Werte wieder zurück. Eigentlich reichts einmal. Also die obere Zeile an besser rausnehmen und unten ggf. die Bezeichnungen anpassen.

                  2. Evtl. könntest Du einfach den Bereich z.B. zwischen -5 und +5 komplett auf 0 setzen. Wäre eine schnelle Lösung für Dein 2W-Problem
                    |> map(fn: (r) => ({r with Überschuss_an_Strom:
                    if r._value < 5.0 then 0.0
                    else r._value }))
                    |> map(fn: (r) => ({r with Bezug_aus_Stromnetz:
                    if r._value >= (-5.0) then 0.0
                    else r._value * (-1.0)}))

                  S 1 Reply Last reply Reply Quote 0
                  • S
                    spiffel1234 @wolfi913 last edited by

                    @wolfi913

                    Hi mir ist da ein Fehler unterlaufen und zwar dreht es sich um die obere Visualisierung und zwar steht hier ab und 2 Watt und jetzt aktuell das "No Data":
                    acf8e33c-6ea4-4a30-a7f0-3326234f75d7-image.png

                    Manchmal bleibt er da noch bei 2 Watt hängen und jetzt bei No data.....

                    Da Soll dann halt 0 Watt stehen.

                    Hier mal der Code:

                    from(bucket: "iobroker")
                    |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                    |> filter(fn: (r) => r["_measurement"] == "dbsolaranlage_gesamt_leistung_aktuell")
                    |> filter(fn: (r) => r["_field"] == "value")
                    |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
                    |> yield(name: "mean")

                    W 1 Reply Last reply Reply Quote 0
                    • W
                      wolfi913 @spiffel1234 last edited by wolfi913

                      @spiffel1234
                      Vermutlich hast Du im abgefragten Zeitraum keine Daten in der InfluxDB.
                      Du möchtest wahrscheinlich den aktuellen PV-Wert darstellen, dürfte zu dieser Uhrzeit ja vermutlich auch nichts vom Dach geliefert werden.
                      Das kannst Du in Grafana (rechts) bei den "Standard options" abfangen wenn Du bei "No value" eine 0 einträgst.
                      Außerdem ist mir aufgefallen, dass in der Influx-Query der Mittelwert für den Abfragezeitraum abgefragt wird.
                      Für den aktuell letzten Wert sollte da dann nicht "mean" sondern "last"

                        |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)
                        |> yield(name: "last")
                      

                      stehen.

                      Edit / Ergänzung: Der Eintrag des 0-Wertes bei "No value" in Grafana wirkt als Textfeld, d.h. falls Du eine Einheit dahinter haben möchtest muss die mit eingetragen werden (z.B. "0 W", "0 kWh" etc.). Die hinterlegte Einheit greift nicht. Kannst aber auch bspw. "---" eintragen.

                      S 1 Reply Last reply Reply Quote 0
                      • S
                        spiffel1234 @wolfi913 last edited by

                        @wolfi913 said in Grafana und IO Broker "Negativer Strom":


                        So habe es jetzt mal modifiziert auf "last" das geht und habe im Grafana die Standartoptions bei "No Value" 0 eingetragen.. Aber wo fliest deine letzte Ergänzung ein? mache ich das auch bei den Standart Options?

                        Hier der aktuelle Code: \
                        from(bucket: "iobroker")
                        |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                        |> filter(fn: (r) => r["_measurement"] == "dbsolaranlage_gesamt_leistung_aktuell")
                        |> filter(fn: (r) => r["_field"] == "value")
                        |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)
                        |> yield(name: "last")

                        W 1 Reply Last reply Reply Quote 0
                        • W
                          wolfi913 @spiffel1234 last edited by

                          @spiffel1234 sagte in Grafana und IO Broker "Negativer Strom":

                          @wolfi913 said in Grafana und IO Broker "Negativer Strom":

                          --- Aber wo fliest deine letzte Ergänzung ein? mache ich das auch bei den Standart Options?

                          Ja, weil Dir ansonsten nur die 0 angezeigt wird. Du hast in Deinen Anzeigen ja Einheiten hinter dem Wert stehen. Und dann schaut das halt "unschön" aus wenn da nur eine 0 steht anstelle von z. B. 0 W. Es ist halt nur ein Textfeld, dass greift, wenn kein Wert da ist.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          954
                          Online

                          31.7k
                          Users

                          79.7k
                          Topics

                          1.3m
                          Posts

                          4
                          14
                          891
                          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