Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    827

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Einsparung durch PV-Anlage mit Fall-Unterscheidung

Geplant Angeheftet Gesperrt Verschoben Grafana
11 Beiträge 4 Kommentatoren 871 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • 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 Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #2

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

    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    1 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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 Offline
        C Offline
        Chrunchy
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      647

                      Online

                      32.6k

                      Benutzer

                      82.0k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe