Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Off Topic
  4. Grafana
  5. Einsparung durch PV-Anlage mit Fall-Unterscheidung

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    261

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Einsparung durch PV-Anlage mit Fall-Unterscheidung

Scheduled Pinned Locked Moved Grafana
11 Posts 4 Posters 935 Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    musicnrw
    wrote on last edited by
    #1

    Ich möchte in Grafana darstellen, welche Einsparung mir die PV-Anlage in Bezug auf die Stromkosten bringt.
    Dazu muss ich aus meiner Sicht zwei Szenarien unterscheiden:

    1. Es wird gerade weniger Strom erzeugt als ich Verbrauche.
      Dann entspricht die Einsparung dem Nicht-Bezug von x kWh Strom aus dem Netz, wobei x wiederum die Menge (kWh) des von der PV-Anlage erzeugten Stroms ist, multipliziert mit den Strombezugskosten je kWh.
    2. Es wird mehr Strom erzeugt als gerade vom Haus verbraucht wird.
      Dann setzt sich die Einsparung aus zwei Teilen zusammen: Zum einen wie unter 1) beschrieben. Dazu kommen aber als zweite Komponenten noch die in’s Netz eingespeisten kWh, multipilziert mit der Einspeisevergütung.
      Meine Frage jetzt: Wie kann ich in Grafana (mit Flux als Query-Sprache) diese Wenn-Dann-Formulierung umsetzen, eben einmal das Szenario nach Fall 1) oder eben nach Fall 2)? Kann ich da die Tranformations-Funktionen in iregndeiner Weise für nutzen? Ich habe schon einiges probiert, aber ich komme nicht zum Ziel.
      Bestimmt bin ich ja nicht der Erste, der das so visualisieren möchte. Kann mir jemand entsprechenden Code und ggfs. die Umsetzung über die Transformations-Funktionen in Grafana überlassen, die ich mit meinen spezifischen Daten/Definitionen anpassen kann?
      Vielen Dank!
    HomoranH Marc BergM C 3 Replies Last reply
    0
    • M musicnrw

      Ich möchte in Grafana darstellen, welche Einsparung mir die PV-Anlage in Bezug auf die Stromkosten bringt.
      Dazu muss ich aus meiner Sicht zwei Szenarien unterscheiden:

      1. Es wird gerade weniger Strom erzeugt als ich Verbrauche.
        Dann entspricht die Einsparung dem Nicht-Bezug von x kWh Strom aus dem Netz, wobei x wiederum die Menge (kWh) des von der PV-Anlage erzeugten Stroms ist, multipliziert mit den Strombezugskosten je kWh.
      2. Es wird mehr Strom erzeugt als gerade vom Haus verbraucht wird.
        Dann setzt sich die Einsparung aus zwei Teilen zusammen: Zum einen wie unter 1) beschrieben. Dazu kommen aber als zweite Komponenten noch die in’s Netz eingespeisten kWh, multipilziert mit der Einspeisevergütung.
        Meine Frage jetzt: Wie kann ich in Grafana (mit Flux als Query-Sprache) diese Wenn-Dann-Formulierung umsetzen, eben einmal das Szenario nach Fall 1) oder eben nach Fall 2)? Kann ich da die Tranformations-Funktionen in iregndeiner Weise für nutzen? Ich habe schon einiges probiert, aber ich komme nicht zum Ziel.
        Bestimmt bin ich ja nicht der Erste, der das so visualisieren möchte. Kann mir jemand entsprechenden Code und ggfs. die Umsetzung über die Transformations-Funktionen in Grafana überlassen, die ich mit meinen spezifischen Daten/Definitionen anpassen kann?
        Vielen Dank!
      HomoranH Do not disturb
      HomoranH Do not disturb
      Homoran
      Global Moderator Administrators
      wrote on last edited by
      #2

      @musicnrw
      in Fall1 musst du die durch den Eigenverbrauch fehlende Einspeisevergütung noch gegerechnen.

      kein Support per PN! - Fragen im Forum stellen -
      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
      Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      1 Reply Last reply
      0
      • M musicnrw

        Ich möchte in Grafana darstellen, welche Einsparung mir die PV-Anlage in Bezug auf die Stromkosten bringt.
        Dazu muss ich aus meiner Sicht zwei Szenarien unterscheiden:

        1. Es wird gerade weniger Strom erzeugt als ich Verbrauche.
          Dann entspricht die Einsparung dem Nicht-Bezug von x kWh Strom aus dem Netz, wobei x wiederum die Menge (kWh) des von der PV-Anlage erzeugten Stroms ist, multipliziert mit den Strombezugskosten je kWh.
        2. Es wird mehr Strom erzeugt als gerade vom Haus verbraucht wird.
          Dann setzt sich die Einsparung aus zwei Teilen zusammen: Zum einen wie unter 1) beschrieben. Dazu kommen aber als zweite Komponenten noch die in’s Netz eingespeisten kWh, multipilziert mit der Einspeisevergütung.
          Meine Frage jetzt: Wie kann ich in Grafana (mit Flux als Query-Sprache) diese Wenn-Dann-Formulierung umsetzen, eben einmal das Szenario nach Fall 1) oder eben nach Fall 2)? Kann ich da die Tranformations-Funktionen in iregndeiner Weise für nutzen? Ich habe schon einiges probiert, aber ich komme nicht zum Ziel.
          Bestimmt bin ich ja nicht der Erste, der das so visualisieren möchte. Kann mir jemand entsprechenden Code und ggfs. die Umsetzung über die Transformations-Funktionen in Grafana überlassen, die ich mit meinen spezifischen Daten/Definitionen anpassen kann?
          Vielen Dank!
        Marc BergM Offline
        Marc BergM Offline
        Marc Berg
        Most Active
        wrote on last edited by
        #3

        @musicnrw sagte in Einsparung durch PV-Anlage mit Fall-Unterscheidung:

        gerade weniger Strom erzeugt als ich Verbrauche

        In der "map" Funktion kann man auch mit "if ...then" Bedingungen arbeiten.

        Unter den Annahme, dass sowohl Hausverbrauch als auch Solarertrag in einem Measurement "Energie" zu finden sind und unter Berücksichtigung vom @Homoran s Einwand, kann man das prinzipiell so machen:

        strompreis = 0.28 // Beispielwert €/kWh
        einspeiseverguetung = 0.08 // Beispielwert €/kWh
        
        from(bucket: "deinBucket")
          |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
          |> filter(fn: (r) => r["_measurement"] == "Energie")
          |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
          |> map(fn: (r) => ({
              _time: r._time,
              _measurement: r._measurement,
              PV_Leistung: r.PV_Leistung,
              Hausverbrauch: r.Hausverbrauch,
              einsparung:
                if r.PV_Leistung <= r.Hausverbrauch then
                  r.PV_Leistung * strompreis
                else
                  (r.Hausverbrauch * strompreis) + ((r.PV_Leistung - r.Hausverbrauch) * einspeiseverguetung)
            })
          )
        

        ... ergänzt um ein sinnvolles "aggregateWindow"

        NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

        Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

        Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

        M 1 Reply Last reply
        0
        • M musicnrw

          Ich möchte in Grafana darstellen, welche Einsparung mir die PV-Anlage in Bezug auf die Stromkosten bringt.
          Dazu muss ich aus meiner Sicht zwei Szenarien unterscheiden:

          1. Es wird gerade weniger Strom erzeugt als ich Verbrauche.
            Dann entspricht die Einsparung dem Nicht-Bezug von x kWh Strom aus dem Netz, wobei x wiederum die Menge (kWh) des von der PV-Anlage erzeugten Stroms ist, multipliziert mit den Strombezugskosten je kWh.
          2. Es wird mehr Strom erzeugt als gerade vom Haus verbraucht wird.
            Dann setzt sich die Einsparung aus zwei Teilen zusammen: Zum einen wie unter 1) beschrieben. Dazu kommen aber als zweite Komponenten noch die in’s Netz eingespeisten kWh, multipilziert mit der Einspeisevergütung.
            Meine Frage jetzt: Wie kann ich in Grafana (mit Flux als Query-Sprache) diese Wenn-Dann-Formulierung umsetzen, eben einmal das Szenario nach Fall 1) oder eben nach Fall 2)? Kann ich da die Tranformations-Funktionen in iregndeiner Weise für nutzen? Ich habe schon einiges probiert, aber ich komme nicht zum Ziel.
            Bestimmt bin ich ja nicht der Erste, der das so visualisieren möchte. Kann mir jemand entsprechenden Code und ggfs. die Umsetzung über die Transformations-Funktionen in Grafana überlassen, die ich mit meinen spezifischen Daten/Definitionen anpassen kann?
            Vielen Dank!
          C Online
          C Online
          Chrunchy
          wrote on last edited by
          #4

          @musicnrw Schau dir das Video von @haus-automatisierung an.
          https://www.youtube.com/watch?v=rTLQ15Fy85U
          Da ist eigentlich alles drin.

          Gruß Chrunchy

          1 Reply Last reply
          1
          • Marc BergM Marc Berg

            @musicnrw sagte in Einsparung durch PV-Anlage mit Fall-Unterscheidung:

            gerade weniger Strom erzeugt als ich Verbrauche

            In der "map" Funktion kann man auch mit "if ...then" Bedingungen arbeiten.

            Unter den Annahme, dass sowohl Hausverbrauch als auch Solarertrag in einem Measurement "Energie" zu finden sind und unter Berücksichtigung vom @Homoran s Einwand, kann man das prinzipiell so machen:

            strompreis = 0.28 // Beispielwert €/kWh
            einspeiseverguetung = 0.08 // Beispielwert €/kWh
            
            from(bucket: "deinBucket")
              |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
              |> filter(fn: (r) => r["_measurement"] == "Energie")
              |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
              |> map(fn: (r) => ({
                  _time: r._time,
                  _measurement: r._measurement,
                  PV_Leistung: r.PV_Leistung,
                  Hausverbrauch: r.Hausverbrauch,
                  einsparung:
                    if r.PV_Leistung <= r.Hausverbrauch then
                      r.PV_Leistung * strompreis
                    else
                      (r.Hausverbrauch * strompreis) + ((r.PV_Leistung - r.Hausverbrauch) * einspeiseverguetung)
                })
              )
            

            ... ergänzt um ein sinnvolles "aggregateWindow"

            M Offline
            M Offline
            musicnrw
            wrote on last edited by
            #5

            @marc-berg , vielen Dank für Deine Unterstützung. Hab ich soweit verstanden, nu habe ich die Werte für Hausverbrauch und Ertrag eben nicht in einem Measurement vorhanden sondern getrennt. Wie sieht das dann aus?

            Marc BergM 1 Reply Last reply
            0
            • M musicnrw

              @marc-berg , vielen Dank für Deine Unterstützung. Hab ich soweit verstanden, nu habe ich die Werte für Hausverbrauch und Ertrag eben nicht in einem Measurement vorhanden sondern getrennt. Wie sieht das dann aus?

              Marc BergM Offline
              Marc BergM Offline
              Marc Berg
              Most Active
              wrote on last edited by
              #6

              @musicnrw sagte in Einsparung durch PV-Anlage mit Fall-Unterscheidung:

              Wie sieht das dann aus?

              Dann musst du dir die Daten aus zwei Abfragen zusammenbauen. So ähnlich vom Prinzip (ungetestet):

              strompreis = 0.28 // €/kWh
              einspeiseverguetung = 0.08 // €/kWh
              
              // PV-Leistungsdaten abfragen
              pv = from(bucket: "deinBucket")
                |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                |> filter(fn: (r) => r["_measurement"] == "PV_Measurement")
                |> filter(fn: (r) => r["_field"] == "Einspeisung")
                |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
                |> rename(columns: {_value: "PV_Einspeisung"})
              
              // Hausverbrauchsdaten abfragen
              verbrauch = from(bucket: "deinBucket")
                |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                |> filter(fn: (r) => r["_measurement"] == "Verbrauch_Measurement")
                |> filter(fn: (r) => r["_field"] == "Leistung")
                |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
                |> rename(columns: {_value: "Hausverbrauch"})
              
              // Daten zusammenführen
              join(
                tables: {pv: pv, verbrauch: verbrauch},
                on: ["_time"]
              )
              |> map(fn: (r) => ({
                  _time: r._time,
                  PV_Einspeisung: r.PV_Einspeisung,
                  Hausverbrauch: r.Hausverbrauch,
                  einsparung:
                    if r.PV_Einspeisung <= r.Hausverbrauch then
                      r.PV_Einspeisung * strompreis
                    else
                      (r.Hausverbrauch * strompreis) + ((r.PV_Einspeisung - r.Hausverbrauch) * einspeiseverguetung)
                })
              )
              
              

              Das "PV_Leistung" oben war falsch, es sollte "Einspeisung" lauten. Das sollte aber selbsterklärend sein.

              NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

              Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

              Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

              M 1 Reply Last reply
              0
              • Marc BergM Marc Berg

                @musicnrw sagte in Einsparung durch PV-Anlage mit Fall-Unterscheidung:

                Wie sieht das dann aus?

                Dann musst du dir die Daten aus zwei Abfragen zusammenbauen. So ähnlich vom Prinzip (ungetestet):

                strompreis = 0.28 // €/kWh
                einspeiseverguetung = 0.08 // €/kWh
                
                // PV-Leistungsdaten abfragen
                pv = from(bucket: "deinBucket")
                  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                  |> filter(fn: (r) => r["_measurement"] == "PV_Measurement")
                  |> filter(fn: (r) => r["_field"] == "Einspeisung")
                  |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
                  |> rename(columns: {_value: "PV_Einspeisung"})
                
                // Hausverbrauchsdaten abfragen
                verbrauch = from(bucket: "deinBucket")
                  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                  |> filter(fn: (r) => r["_measurement"] == "Verbrauch_Measurement")
                  |> filter(fn: (r) => r["_field"] == "Leistung")
                  |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
                  |> rename(columns: {_value: "Hausverbrauch"})
                
                // Daten zusammenführen
                join(
                  tables: {pv: pv, verbrauch: verbrauch},
                  on: ["_time"]
                )
                |> map(fn: (r) => ({
                    _time: r._time,
                    PV_Einspeisung: r.PV_Einspeisung,
                    Hausverbrauch: r.Hausverbrauch,
                    einsparung:
                      if r.PV_Einspeisung <= r.Hausverbrauch then
                        r.PV_Einspeisung * strompreis
                      else
                        (r.Hausverbrauch * strompreis) + ((r.PV_Einspeisung - r.Hausverbrauch) * einspeiseverguetung)
                  })
                )
                
                

                Das "PV_Leistung" oben war falsch, es sollte "Einspeisung" lauten. Das sollte aber selbsterklärend sein.

                M Offline
                M Offline
                musicnrw
                wrote on last edited by
                #7

                @marc-berg, das "pv=...." macht anscheinend Probleme. Der Query-Editor bringt die Meldung "invalid: error in query specification while starting program: this Flux script returns no streaming data. Consider adding a "yield" or invoking streaming functions directly, without performing an assignment"

                Marc BergM 1 Reply Last reply
                0
                • M musicnrw

                  @marc-berg, das "pv=...." macht anscheinend Probleme. Der Query-Editor bringt die Meldung "invalid: error in query specification while starting program: this Flux script returns no streaming data. Consider adding a "yield" or invoking streaming functions directly, without performing an assignment"

                  Marc BergM Offline
                  Marc BergM Offline
                  Marc Berg
                  Most Active
                  wrote on last edited by
                  #8

                  @musicnrw sagte in Einsparung durch PV-Anlage mit Fall-Unterscheidung:

                  das "pv=...." macht anscheinend Probleme.

                  Ich kenne weder deine angepasste Query noch die zugrunde liegenden Daten. Wie soll man da helfen?

                  NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

                  Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                  Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                  M 1 Reply Last reply
                  0
                  • Marc BergM Marc Berg

                    @musicnrw sagte in Einsparung durch PV-Anlage mit Fall-Unterscheidung:

                    das "pv=...." macht anscheinend Probleme.

                    Ich kenne weder deine angepasste Query noch die zugrunde liegenden Daten. Wie soll man da helfen?

                    M Offline
                    M Offline
                    musicnrw
                    wrote on last edited by
                    #9

                    @marc-berg, ich habe Deinen vorherigen Code genommen und natürlich das Bucket und die Measurement-Bezeichnungen sowie Feldnamen gemäß meiner Daten angepasst.

                    Marc BergM 1 Reply Last reply
                    0
                    • M musicnrw

                      @marc-berg, ich habe Deinen vorherigen Code genommen und natürlich das Bucket und die Measurement-Bezeichnungen sowie Feldnamen gemäß meiner Daten angepasst.

                      Marc BergM Offline
                      Marc BergM Offline
                      Marc Berg
                      Most Active
                      wrote on last edited by
                      #10

                      @musicnrw sagte in Einsparung durch PV-Anlage mit Fall-Unterscheidung:

                      ich habe Deinen vorherigen Code genommen und natürlich das Bucket und die Measurement-Bezeichnungen sowie Feldnamen gemäß meiner Daten angepasst.

                      Dann zeig doch bitte mal die konkrete Query (als Text in Code Tags) sowie einen Screenshot vom Query Editor.

                      NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

                      Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                      Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                      M 1 Reply Last reply
                      0
                      • Marc BergM Marc Berg

                        @musicnrw sagte in Einsparung durch PV-Anlage mit Fall-Unterscheidung:

                        ich habe Deinen vorherigen Code genommen und natürlich das Bucket und die Measurement-Bezeichnungen sowie Feldnamen gemäß meiner Daten angepasst.

                        Dann zeig doch bitte mal die konkrete Query (als Text in Code Tags) sowie einen Screenshot vom Query Editor.

                        M Offline
                        M Offline
                        musicnrw
                        wrote on last edited by
                        #11

                        @marc-berg, sorry, dass ich mich erst jetzt wieder melde, aber ich war beruflich unterwegs. Das ist meine Query, wie gesagt, genau Dein Vorschlag, nur mit meinen Influx-spezifischen Namen:

                        strompreis = 0.32 // €/kWh
                        einspeiseverguetung = 0.08 // €/kWh
                         
                        // PV-Leistungsdaten abfragen
                        pv = from(bucket: "iobroker")
                          |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                          |> filter(fn: (r) => r["_measurement"] == "senec.0.ENERGY.GUI_INVERTER_POWER")
                          |> filter(fn: (r) => r["_field"] == "value")
                          |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
                          |> rename(columns: {_value: "PV_Einspeisung"})
                         
                        // Hausverbrauchsdaten abfragen
                        verbrauch = from(bucket: "iobroker")
                          |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                          |> filter(fn: (r) => r["_measurement"] == "senec.0.ENERGY.GUI_HOUSE_POW")
                          |> filter(fn: (r) => r["_field"] == "value")
                          |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
                          |> rename(columns: {_value: "Hausverbrauch"})
                         
                        // Daten zusammenführen
                        join(
                          tables: {pv: pv, verbrauch: verbrauch},
                          on: ["_time"]
                        )
                        |> map(fn: (r) => ({
                            _time: r._time,
                            PV_Einspeisung: r.PV_Einspeisung,
                            Hausverbrauch: r.Hausverbrauch,
                            einsparung:
                              if r.PV_Einspeisung <= r.Hausverbrauch then
                                r.PV_Einspeisung * strompreis
                              else
                                (r.Hausverbrauch * strompreis) + ((r.PV_Einspeisung - r.Hausverbrauch) * einspeiseverguetung)
                          })
                        )
                        
                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        592

                        Online

                        32.7k

                        Users

                        82.5k

                        Topics

                        1.3m

                        Posts
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Home
                        • Recent
                        • Tags
                        • Unread 0
                        • Categories
                        • Unreplied
                        • Popular
                        • GitHub
                        • Docu
                        • Hilfe