Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Tester
  4. Test Adapter fronius-solarweb

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    2.4k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    1.3k

Test Adapter fronius-solarweb

Geplant Angeheftet Gesperrt Verschoben Tester
244 Beiträge 49 Kommentatoren 57.3k Aufrufe 43 Beobachtet
  • Ä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.
  • F Offline
    F Offline
    Friedo
    schrieb am zuletzt editiert von Friedo
    #233

    Hab es mit chatGPT gelöst...

    1 Antwort Letzte Antwort
    0
    • HomoranH Homoran verschob dieses Thema von Tester am
    • HomoranH Homoran verschob dieses Thema von ...nicht in offiziellem Repo am
    • NegaleinN Offline
      NegaleinN Offline
      Negalein
      schrieb am zuletzt editiert von
      #234

      Hallo

      ich habe hier nichts gefunden oder übersehn.

      Liefert der Adapter den Autarkiegrad, bzw. wie wird der aus den vorhandenen DP berechnet?

      ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
      ° Node.js Fixer ---> iob nodejs-update
      ° Fixer ---> iob fix

      T 1 Antwort Letzte Antwort
      0
      • NegaleinN Negalein

        Hallo

        ich habe hier nichts gefunden oder übersehn.

        Liefert der Adapter den Autarkiegrad, bzw. wie wird der aus den vorhandenen DP berechnet?

        T Offline
        T Offline
        tombox
        schrieb am zuletzt editiert von
        #235

        @Negalein er liefert nur was in der app angezeigt wird

        NegaleinN 2 Antworten Letzte Antwort
        0
        • T tombox

          @Negalein er liefert nur was in der app angezeigt wird

          NegaleinN Offline
          NegaleinN Offline
          Negalein
          schrieb am zuletzt editiert von
          #236

          @tombox sagte:

          er liefert nur was in der app angezeigt wird

          seh ich im Webportal

          3ae6bef0-601a-494b-93e4-4515db91ac9c-image.jpeg

          und das in der App

          422f40a5-54af-4e54-8b1c-c814438eb52e-image.jpeg

          ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
          ° Node.js Fixer ---> iob nodejs-update
          ° Fixer ---> iob fix

          1 Antwort Letzte Antwort
          0
          • T tombox

            @Negalein er liefert nur was in der app angezeigt wird

            NegaleinN Offline
            NegaleinN Offline
            Negalein
            schrieb am zuletzt editiert von Negalein
            #237

            @tombox sagte:

            er liefert nur was in der app angezeigt wird

            hab es jetzt per Script berechnet

            /**
             * -----------------------------------------------------------------------------
             * Fronius SolarWeb Autarkiegrad
             * -----------------------------------------------------------------------------
             * Version:     1.1.0
             * Author:      Christian Wimmer
             * Copyright:   (c) 2026 Christian Wimmer
             * License:     MIT
             *
             * Description:
             * Berechnet den aktuellen Autarkiegrad anhand der Fronius SolarWeb Daten
             * und schreibt das Ergebnis nach:
             *
             *   0_userdata.0.Fronius.Autarkiegrad
             *
             * Es wird automatisch der letzte verfügbare Tag mit gültigen Daten
             * verwendet, damit der Wert nach Mitternacht nicht auf 0 % fällt.
             *
             * Formel:
             *   (EnergyDirectConsumption + EnergyBattDischarge)
             *   / EnergyConsumptionTotal * 100
             * -----------------------------------------------------------------------------
             */
            
            const VERSION = '1.1.0';
            
            const base = 'fronius-solarweb.0.6f41428b-0208-4f01-ab38-c11b57543b46.day';
            const dpResult = '0_userdata.0.Fronius.Autarkiegrad';
            
            log(`Fronius Autarkiegrad v${VERSION} gestartet`, 'info');
            
            // Datenpunkt anlegen falls nicht vorhanden
            if (!existsState(dpResult)) {
                createState(dpResult, 0, {
                    name: 'PV Autarkiegrad',
                    type: 'number',
                    role: 'value.percent',
                    unit: '%',
                    read: true,
                    write: false
                });
            }
            
            function getValue(dp) {
                if (!existsState(dp)) {
                    return 0;
                }
            
                const state = getState(dp);
            
                if (!state || state.val === null || state.val === undefined) {
                    return 0;
                }
            
                const val = parseFloat(state.val);
            
                return isNaN(val) ? 0 : val;
            }
            
            function calculateAutarkie() {
            
                let day = new Date().getDate();
            
                // Letzten Tag mit Verbrauchsdaten suchen
                while (day > 0) {
            
                    const consumptionTest = getValue(
                        `${base}.EnergyConsumptionTotal.values.${day}`
                    );
            
                    if (consumptionTest > 0) {
                        break;
                    }
            
                    day--;
                }
            
                if (day === 0) {
                    log('Keine gültigen Fronius-Daten gefunden.', 'warn');
                    return;
                }
            
                const consumption = getValue(
                    `${base}.EnergyConsumptionTotal.values.${day}`
                );
            
                const direct = getValue(
                    `${base}.EnergyDirectConsumption.values.${day}`
                );
            
                const battery = getValue(
                    `${base}.EnergyBattDischarge.values.${day}`
                );
            
                let autarkie = 0;
            
                if (consumption > 0) {
                    autarkie = ((direct + battery) / consumption) * 100;
                }
            
                autarkie = Math.round(autarkie * 10) / 10;
            
                setState(dpResult, autarkie, true);
            
                log(
                    `Autarkiegrad: ${autarkie}% | Tag=${day} | Verbrauch=${consumption} | Direkt=${direct} | Batterie=${battery}`,
                    'info'
                );
            }
            
            // Alle 15 Minuten aktualisieren
            schedule('*/15 * * * *', calculateAutarkie);
            
            // Beim Start sofort berechnen
            calculateAutarkie();
            

            ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
            ° Node.js Fixer ---> iob nodejs-update
            ° Fixer ---> iob fix

            1 Antwort Letzte Antwort
            0
            • L Online
              L Online
              legro
              schrieb zuletzt editiert von legro
              #238

              Mittlerweile habe ich unsere Visualisierung zum dritten Mal überarbeitet. Herausgekommen ist u.a. dabei eine View mit vier Ansichten: Kosten, Energie (AC), Quoten und Energie (DC).

              2fdb1b5d-2211-4056-bbb9-77e962e91b78-image.jpeg
              93b7004b-7ecb-40b4-9735-d79b5792a8ff-image.jpeg

              19722fdb-82c7-44e1-8651-c45b78c6d234-image.jpeg

              Die Berechnung der Quoten (Autarkie und Eigenverbrauch) habe ich aus den Daten der AC-Werte errechnet; diese sind somit echte Werte, nicht etwa die etwas geschönten aus der App, die auf den DC-Werten basieren. Der Gesamtwirkungsgrad (AC/DC) beinhaltet somit alle Verluste aus AC->DC Wandlung und in/aus Batterie. Da bei uns nur ein geringer Teil der Energie in der Batterie zwischengespeichert wird, ist der Wirkungsgrad mit über 91% recht hoch.

              Die in den Views angegebenen Wirkungsgrade beruhen ebenfalls auf AC-Werten. Sie basieren aus mittlerweile über drei Jahre gesammelten Daten.

              In den Zeilen 71 bis 78 findet man die Berechnung der Werte für Autarkie und Eigenquote. Die verwendeten Daten stammen zwar aus den ECharts-Diagrammen (s. FlexCharts-Adapter von @jrbwh ), aber ihre Herkunft findet man in den Zeilen 53 - 69 erläutert.

              Bei weiteren Fragen - insbesondere zu dem im Skript nicht dokumentierten Programmcode - helfe ich gerne weiter.

              function getAktMonthYear() {
                  return {
                      month: G_getMonthAsNumber(getState('0_userdata.0.Fronius.flexCharts.selMonth').val),
                      year: getState('0_userdata.0.Fronius.flexCharts.selYear').val
                      }
              }
              
              function checkTarifStrom(d) {
                  let arr = JSON.parse(getState('0_userdata.0.Energie_Tarife.Strom.StromBezug').val)
                  for(let i=0; i<arr.length; i++) {
                      if(new Date(arr[i].Zeitraum.Start) <= d && d <= new Date(arr[i].Zeitraum.Ende)) {
                          return {Verkaufspreis: arr[i].Verkaufspreis, Energiepreis: arr[i].Energiepreis}
                      }
                  }
                  return 0
              }
              //############################ chartEnergieYear: Monatsenergien ############################
              
              
              function refreshYear() {
              
                  let aktYear = getState('0_userdata.0.Fronius.flexCharts.selYear').val
                  let dataMonths = []
              
                  //Diagramm Energien in KWh im RAM allokieren
                  let jsonChartKWh = '0_userdata.0.Fronius.flexCharts.chartEnergieYear'
                  let yearChartKWh = JSON.parse(getState(jsonChartKWh).val)
                  //Diagramm Autarkie&Effizienz in % im RAM allokieren
                  let jsonChartAutPrc = '0_userdata.0.Fronius.flexCharts.chartEffienzYear'
                  let yearChartAutPrc = JSON.parse(getState(jsonChartAutPrc).val)
                  //Diagramm Kosten im RAM allokieren
                  let jsonChartKosten = '0_userdata.0.Fronius.flexCharts.chartKostenYear'
                  let yearChartKosten = JSON.parse(getState(jsonChartKosten).val)
                  //Diagramm Energie DC im RAM allokieren
                  let jsonChartYearDC = '0_userdata.0.Fronius.flexCharts.chartYearDC'
                  let yearChartDC = JSON.parse(getState(jsonChartYearDC).val)
              
                  yearChartKWh.series[0].data = []  //fromGridKWh
                  yearChartKWh.series[1].data = []  //toGridKWh
                  yearChartKWh.series[2].data = []  //fromSolarKWh (Eigenverbrauch)
              
                  yearChartAutPrc.series[0].data = [] //Autarkie
                  yearChartAutPrc.series[1].data = [] //Eigenverbrauch
              
                  yearChartKosten.series[0].data = [] //fromGridEuro
                  yearChartKosten.series[1].data = [] //toGridEuro
                  yearChartKosten.series[2].data = [] //EigenverbrauchEuro
              
                  yearChartDC.series[0].data =[] //dcGartenhaus
                  yearChartDC.series[1].data =[] //dcTerrasse
              
                  for (let i=1;i<13;i++) {
                      //Monatstarif - Der Stromtarif ändert sich nur zum Monatswechsel
                      let tarif = checkTarifStrom(new Date(`${aktYear}-('0'+ ${('0' + i).slice(-2)}-15`))
              
                      //fromGrid
                      let fromGridKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.fromGridWh`).val)
                      yearChartKWh.series[0].data.push(G_runden(fromGridKWh.reduce((sum, item) => sum + item, 0) / 1000,3))
                      yearChartKosten.series[0].data.push(G_runden(tarif.Energiepreis * yearChartKWh.series[0].data[i-1],3))        
              
                      //toGrid
                      let toGridKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.toGridWh`).val)
                      yearChartKWh.series[1].data.push(G_runden(toGridKWh.reduce((sum, item) => sum + item, 0) / 1000,3))
                      yearChartKosten.series[1].data.push(G_runden(tarif.Verkaufspreis * yearChartKWh.series[1].data[i-1],3))
              
                      //fromSolar bzw. Eigenverbrauch
                      let fromSolarKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.solarWh`).val)
                      yearChartKWh.series[2].data.push(G_runden(fromSolarKWh.reduce((sum, item) => sum + item, 0) / 1000 - yearChartKWh.series[1].data[i-1],3))
                      yearChartKosten.series[2].data.push(G_runden(tarif.Energiepreis * yearChartKWh.series[2].data[i-1],3))
              
                      //Autarkie
                      let gesamtVerbrauch = yearChartKWh.series[0].data[i-1] + yearChartKWh.series[2].data[i-1]
                      let eigenVerbrauch = yearChartKWh.series[2].data[i-1]
                      let autarkieQuote = eigenVerbrauch / gesamtVerbrauch
                      let gesamtSolar = yearChartKWh.series[2].data[i-1] + yearChartKWh.series[1].data[i-1]
                      let eigenQuote = eigenVerbrauch / gesamtSolar
                      yearChartAutPrc.series[0].data.push(G_runden(100*autarkieQuote,2))
                      yearChartAutPrc.series[1].data.push(G_runden(100*eigenQuote,2))
              
                      //Energien DC
                      let dcGartenhausKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.dcGartenhausKWh`).val)
                      dcGartenhausKWh ||= []
                      yearChartDC.series[0].data.push(G_runden(dcGartenhausKWh.reduce((sum, item) => sum + item,0) / 1000,3))
                      let dcTerrasseKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.dcTerrasseKWh`).val)
                      dcTerrasseKWh ||= []
                      yearChartDC.series[1].data.push(G_runden(dcTerrasseKWh.reduce((sum, item) => sum + item,0) / 1000,3))
              
                  }
              
                  //Jahresummen
                  // - fromGrid
                  let fromGridKWhJahressumme = yearChartKWh.series[0].data.reduce((sum, item) => sum + item, 0)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrFromGridKWh', fromGridKWhJahressumme, true)
                  let fromGridEuroJahressumme = yearChartKosten.series[0].data.reduce((sum, item) => sum + item, 0)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrFromGridEuro', fromGridEuroJahressumme, true)
              
                  // - toGrid
                  let toGridKWhJahressumme = yearChartKWh.series[1].data.reduce((sum, item) => sum + item, 0)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrToGridKWh', toGridKWhJahressumme, true)
                  let toGridEuroJahressumme = yearChartKosten.series[1].data.reduce((sum, item) => sum + item, 0)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrToGridEuro', toGridEuroJahressumme, true)
              
                  // - eigenverbrauch
                  let eigenverbrauchKWhJahressumme = yearChartKWh.series[2].data.reduce((sum, item) => sum + item, 0)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrEigenverbrauchKWh', eigenverbrauchKWhJahressumme, true)
                  let eigenverbrauchEuroJahressumme = yearChartKosten.series[2].data.reduce((sum, item) => sum + item, 0)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrEigenverbrauchEuro', eigenverbrauchEuroJahressumme, true)
                  //Gesamtverbrauch
                  setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrKonsumKWh', eigenverbrauchKWhJahressumme + fromGridKWhJahressumme, true)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrKonsumEuro', eigenverbrauchEuroJahressumme + fromGridEuroJahressumme, true)
              
                  //Titelzeilen
                  yearChartKWh.title.text = 'elektrische Energien in ' + aktYear
                  yearChartKosten.title.text = 'Energienkosten in ' + aktYear
                  yearChartAutPrc.title.text = 'Autarkie/Eigenquoten in ' + aktYear
                  yearChartDC.title.text = 'elektrische Energie DC in ' + aktYear
                  //x-Achse beschriften
                  yearChartKWh.xAxis[0].data = Array.from({length: 12}, (tmp,i) => G_shrtMonths[i])
                  //yearChartKWh.xAxis[0].data = Array.from({length: 12}, (tmp,i) => i+1)
              
                  //Diagrammm als JSON im Objektbaum ablegen
                  setState(jsonChartKWh,JSON.stringify(yearChartKWh),true)
                  setState(jsonChartAutPrc,JSON.stringify(yearChartAutPrc),true)
                  setState(jsonChartKosten,JSON.stringify(yearChartKosten),true)
                  setState(jsonChartYearDC,JSON.stringify(yearChartDC),true)
              
              }
              
              
              //############################ chartEnergieMonth : Tagesenergien ############################
              
              
              function refreshMonth() {
              
                  let aktMonthYear = getAktMonthYear()
                  let tarif = checkTarifStrom(new Date(`${aktMonthYear.year}-('0'+ ${('0' + aktMonthYear.month).slice(-2)}-15`))
              
                  //Diagramm Energien in KWh im RAM allokieren
                  let jsonChartKWh = '0_userdata.0.Fronius.flexCharts.chartEnergieMonth'
                  let monthChartKWh = JSON.parse(getState(jsonChartKWh).val)
                  //Diagramm Autarkie&Effizienz in % im RAM allokieren
                  let jsonChartAutPrc = '0_userdata.0.Fronius.flexCharts.chartEffizienzMonth'
                  let monthChartAutPrc = JSON.parse(getState(jsonChartAutPrc).val)
                  //Diagramm Kosten in € im RAM allokieren
                  let jsonChartKosten = '0_userdata.0.Fronius.flexCharts.chartKostenMonth'
                  let monthChartKosten = JSON.parse(getState(jsonChartKosten).val)
                  //Diagramm Energie DC im RAM allokieren
                  let jsonChartMonthDC = '0_userdata.0.Fronius.flexCharts.chartMonthDC'
                  let monthChartDC = JSON.parse(getState(jsonChartMonthDC).val)
                  
                  //Tabelle fromGridKWh in KWh im RAM allokieren
                  let fromGridKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.fromGridWh`).val)
                  fromGridKWh = fromGridKWh.map(item => item / 1000)
                  //Tabelle toGridKWh in KWh im RAM allokieren
                  let toGridKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.toGridWh`).val)
                  toGridKWh = toGridKWh.map(item => G_runden(item/1000,3))
                  let fromSolarKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.solarWh`).val) 
                  fromSolarKWh = fromSolarKWh.map(item => item / 1000) //erzeugte Solarenergie AC
                  //Tabelle eigenVerbrauch
                  let eigenVerbrauchKWh = fromSolarKWh.map((item, i) => G_runden(item - toGridKWh[i],3)) //Eigenverbrauch AC
                  let gesamtVerbrauchKWh = eigenVerbrauchKWh.map((item, i) => G_runden(item + fromGridKWh[i],3)) //Gesamtverbrauch AC
              
                  //Tabelle dcGartenhausKWh und dcTerrasseKWh in KWh im RAM allokieren
                  let dcGartenhausKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.dcGartenhausKWh`).val)
                  dcGartenhausKWh ||= []
                  dcGartenhausKWh = dcGartenhausKWh.map(item => G_runden(item / 1000,3))
                  let dcTerrasseKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.dcTerrasseKWh`).val)
                  dcTerrasseKWh ||= []
                  dcTerrasseKWh = dcTerrasseKWh.map(item => G_runden(item / 1000,3))
              
                  //Energiesummen
                  // - fromGrid
                  let fromGridKWhSum = fromGridKWh.reduce((sum, item) => sum + item, 0)
                  let fromGridEuroSum = fromGridKWhSum * tarif.Energiepreis
                  // - toGrid
                  let toGridKWhSum = toGridKWh.reduce((sum, item) => sum + item, 0)
                  let toGridEuroSum = toGridKWhSum * tarif.Verkaufspreis
                  // - Eigenverbrauch    
                  let eigenverbrauchKWhSum = fromSolarKWh.reduce((sum, item) => sum + item) - toGridKWhSum
                  let eigenverbrauchEuroSum = eigenverbrauchKWhSum * tarif.Energiepreis
                  //Gesamtverbrauch bzw. Konsum
                  let konsumKWhSum = fromGridKWhSum + eigenverbrauchKWhSum
                  let konsumEuroSum = konsumKWhSum * tarif.Energiepreis
                  //Energien DC
              
              
                  //Summen in Objekte Speichern
                  // - fromGrid
                  setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatFromGridKWh',fromGridKWhSum,true)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatFromGridEuro',fromGridEuroSum,true)
                  // - toGrid
                  setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatToGridKWh',toGridKWhSum,true)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatToGridEuro',toGridEuroSum,true)
                  // - Eigenverbrauch
                  setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatEigenverbrauchKWh',eigenverbrauchKWhSum,true)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatEigenverbrauchEuro',eigenverbrauchEuroSum,true)
                  // - Konsum
                  setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatKonsumKWh',konsumKWhSum,true)
                  setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatKonsumEuro',konsumEuroSum,true)
              
                  //Titelzeilen
                  //Energien AC
                  monthChartKWh.title.text = 'elektrische Energien im '
                  monthChartKWh.title.text = (aktMonthYear.month == 3) ? monthChartKWh.title.text.concat('März') : monthChartKWh.title.text.concat(G_getMonthLongName(aktMonthYear.month))
                  monthChartKWh.title.text = monthChartKWh.title.text.concat(' (' + aktMonthYear.year + ')')
                  //Kosten
                  monthChartKosten.title.text = 'Stromkosten im '
                  monthChartKosten.title.text = (aktMonthYear.month == 3) ? monthChartKosten.title.text.concat('März') : monthChartKosten.title.text.concat(G_getMonthLongName(aktMonthYear.month))
                  monthChartKosten.title.text = monthChartKosten.title.text.concat(' (' + aktMonthYear.year + ')')
                  //Quoten
                  monthChartAutPrc.title.text = 'Autarkie&Eigenquote im '
                  monthChartAutPrc.title.text = (aktMonthYear.month == 3) ? monthChartAutPrc.title.text.concat('März') : monthChartAutPrc.title.text.concat(G_getMonthLongName(aktMonthYear.month))
                  monthChartAutPrc.title.text = monthChartAutPrc.title.text.concat(' (' + aktMonthYear.year + ')')
                  //Energien DC
                  monthChartDC.title.text = 'elektrische Energien DC im '
                  if (aktMonthYear.month == 3) {
                      monthChartDC.title.text = monthChartDC.title.text + 'März'
                  } else {
                      monthChartDC.title.text = monthChartDC.title.text + G_getMonthLongName(aktMonthYear.month)
                  }
                  monthChartDC.title.text = monthChartDC.title.text +' (' + aktMonthYear.year + ')'
                  //x-Achse beschriften
                  //x-Achse
                  monthChartKWh.xAxis[0].data = Array.from({length: G_getDaysOfMonth(aktMonthYear.year, aktMonthYear.month)}, (tmp,i) => i+1)
                  monthChartKosten.xAxis[0].data = Array.from({length: G_getDaysOfMonth(aktMonthYear.year, aktMonthYear.month)}, (tmp,i) => i+1)
                  monthChartAutPrc.xAxis[0].data = Array.from({length: G_getDaysOfMonth(aktMonthYear.year, aktMonthYear.month)}, (tmp,i) => i+1)
                  monthChartDC.xAxis[0].data = Array.from({length: G_getDaysOfMonth(aktMonthYear.year, aktMonthYear.month)}, (tmp,i) => i+1)
                  //y-Achsenwerte eintragen ..
                  //Netzbezug, Einspeisung, Eigenverbrauch
                  monthChartKWh.series[0].data = fromGridKWh
                  monthChartKWh.series[1].data = toGridKWh
                  monthChartKWh.series[2].data = eigenVerbrauchKWh
                  //Kosten: Netzbezug, Einspeisung, Eigenverbrauch
                  monthChartKosten.series[0].data = fromGridKWh.map((item,i) => item * tarif.Energiepreis)
                  monthChartKosten.series[1].data = toGridKWh.map((item,i) => item * tarif.Verkaufspreis)
                  monthChartKosten.series[2].data = eigenVerbrauchKWh.map((item,i) => item * tarif.Energiepreis)
                  //Autarkie&Eigenverbrauch
                  monthChartAutPrc.series[0].data = eigenVerbrauchKWh.map((item, i) => G_runden(100*item / gesamtVerbrauchKWh[i],1)) //Autarkie
                  monthChartAutPrc.series[1].data = eigenVerbrauchKWh.map((item,i) => G_runden(100*item / fromSolarKWh[i],1)) //Eigenquote
              
                  //Energien DC
                  monthChartDC.series[0].data = dcGartenhausKWh
                  monthChartDC.series[1].data = dcTerrasseKWh
              
              
                  //Diagrammme als JSON im Objektbaum ablegen
                  setState(jsonChartKWh,JSON.stringify(monthChartKWh),true)
                  setState(jsonChartKosten,JSON.stringify(monthChartKosten),true)
                  setState(jsonChartAutPrc,JSON.stringify(monthChartAutPrc),true)
                  setState(jsonChartMonthDC,JSON.stringify(monthChartDC),true)
              }
              
              
              //############################ Scheduler & Trigger ############################
              
              
              //alle 4 Minuten die Anzeige aktualisieren
              
              schedule('*/4 * * * *', () => {
                  refreshMonth(); refreshYear()
                  setState('0_userdata.0.Fronius.flexCharts.rfhButton',0,false)
              });
              
              on({id:'0_userdata.0.Fronius.flexCharts.selMonth',change: 'any'},(obj) => {
                  refreshMonth()
                  setState('0_userdata.0.Fronius.flexCharts.rfhButton',0,false)
              })
              
              on({id:'0_userdata.0.Fronius.flexCharts.selYear',change: 'any'},(obj) => {
                  //G_setListYears('0_userdata.0.Fronius.Monatstabellen', '0_userdata.0.Fronius.Charts.lstYears')
                  setStateAsync('0_userdata.0.Fronius.flexCharts.rfhButton',0,false)
                  G_setListMonths(getState('0_userdata.0.Fronius.flexCharts.selYear').val, '0_userdata.0.Fronius.Monatstabellen',
                      '0_userdata.0.Fronius.flexCharts.lstMonths')
                  refreshYear(); refreshMonth()
                  setState('0_userdata.0.Fronius.flexCharts.rfhButton', 0, false)
              })
              
              on({id:'0_userdata.0.Fronius.flexCharts.buttonAktualisieren',change: 'any'},(obj) => {
                  refreshMonth(); refreshYear()
                  setState('0_userdata.0.Fronius.flexCharts.rfhButton',0,false)
              })
              
              
              //############################ Skriptstart ############################
              
              //listMonths des zugehörigen DropDown-Widgets füllen
              G_setListYears('0_userdata.0.Fronius.Monatstabellen', '0_userdata.0.Fronius.flexCharts.lstYear')
              //listYears des zugehörigen DropDown-Widgets füllen
              G_setListMonths(getState('0_userdata.0.Fronius.flexCharts.selYear').val, '0_userdata.0.Fronius.Monatstabellen',
                  '0_userdata.0.Fronius.flexCharts.lstMonths')
              

              Raspberry Pi 5 mit 8GB + 120GB SSD + Coordinator COD-m + ioBroker ..

              NegaleinN 1 Antwort Letzte Antwort
              1
              • L legro

                Mittlerweile habe ich unsere Visualisierung zum dritten Mal überarbeitet. Herausgekommen ist u.a. dabei eine View mit vier Ansichten: Kosten, Energie (AC), Quoten und Energie (DC).

                2fdb1b5d-2211-4056-bbb9-77e962e91b78-image.jpeg
                93b7004b-7ecb-40b4-9735-d79b5792a8ff-image.jpeg

                19722fdb-82c7-44e1-8651-c45b78c6d234-image.jpeg

                Die Berechnung der Quoten (Autarkie und Eigenverbrauch) habe ich aus den Daten der AC-Werte errechnet; diese sind somit echte Werte, nicht etwa die etwas geschönten aus der App, die auf den DC-Werten basieren. Der Gesamtwirkungsgrad (AC/DC) beinhaltet somit alle Verluste aus AC->DC Wandlung und in/aus Batterie. Da bei uns nur ein geringer Teil der Energie in der Batterie zwischengespeichert wird, ist der Wirkungsgrad mit über 91% recht hoch.

                Die in den Views angegebenen Wirkungsgrade beruhen ebenfalls auf AC-Werten. Sie basieren aus mittlerweile über drei Jahre gesammelten Daten.

                In den Zeilen 71 bis 78 findet man die Berechnung der Werte für Autarkie und Eigenquote. Die verwendeten Daten stammen zwar aus den ECharts-Diagrammen (s. FlexCharts-Adapter von @jrbwh ), aber ihre Herkunft findet man in den Zeilen 53 - 69 erläutert.

                Bei weiteren Fragen - insbesondere zu dem im Skript nicht dokumentierten Programmcode - helfe ich gerne weiter.

                function getAktMonthYear() {
                    return {
                        month: G_getMonthAsNumber(getState('0_userdata.0.Fronius.flexCharts.selMonth').val),
                        year: getState('0_userdata.0.Fronius.flexCharts.selYear').val
                        }
                }
                
                function checkTarifStrom(d) {
                    let arr = JSON.parse(getState('0_userdata.0.Energie_Tarife.Strom.StromBezug').val)
                    for(let i=0; i<arr.length; i++) {
                        if(new Date(arr[i].Zeitraum.Start) <= d && d <= new Date(arr[i].Zeitraum.Ende)) {
                            return {Verkaufspreis: arr[i].Verkaufspreis, Energiepreis: arr[i].Energiepreis}
                        }
                    }
                    return 0
                }
                //############################ chartEnergieYear: Monatsenergien ############################
                
                
                function refreshYear() {
                
                    let aktYear = getState('0_userdata.0.Fronius.flexCharts.selYear').val
                    let dataMonths = []
                
                    //Diagramm Energien in KWh im RAM allokieren
                    let jsonChartKWh = '0_userdata.0.Fronius.flexCharts.chartEnergieYear'
                    let yearChartKWh = JSON.parse(getState(jsonChartKWh).val)
                    //Diagramm Autarkie&Effizienz in % im RAM allokieren
                    let jsonChartAutPrc = '0_userdata.0.Fronius.flexCharts.chartEffienzYear'
                    let yearChartAutPrc = JSON.parse(getState(jsonChartAutPrc).val)
                    //Diagramm Kosten im RAM allokieren
                    let jsonChartKosten = '0_userdata.0.Fronius.flexCharts.chartKostenYear'
                    let yearChartKosten = JSON.parse(getState(jsonChartKosten).val)
                    //Diagramm Energie DC im RAM allokieren
                    let jsonChartYearDC = '0_userdata.0.Fronius.flexCharts.chartYearDC'
                    let yearChartDC = JSON.parse(getState(jsonChartYearDC).val)
                
                    yearChartKWh.series[0].data = []  //fromGridKWh
                    yearChartKWh.series[1].data = []  //toGridKWh
                    yearChartKWh.series[2].data = []  //fromSolarKWh (Eigenverbrauch)
                
                    yearChartAutPrc.series[0].data = [] //Autarkie
                    yearChartAutPrc.series[1].data = [] //Eigenverbrauch
                
                    yearChartKosten.series[0].data = [] //fromGridEuro
                    yearChartKosten.series[1].data = [] //toGridEuro
                    yearChartKosten.series[2].data = [] //EigenverbrauchEuro
                
                    yearChartDC.series[0].data =[] //dcGartenhaus
                    yearChartDC.series[1].data =[] //dcTerrasse
                
                    for (let i=1;i<13;i++) {
                        //Monatstarif - Der Stromtarif ändert sich nur zum Monatswechsel
                        let tarif = checkTarifStrom(new Date(`${aktYear}-('0'+ ${('0' + i).slice(-2)}-15`))
                
                        //fromGrid
                        let fromGridKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.fromGridWh`).val)
                        yearChartKWh.series[0].data.push(G_runden(fromGridKWh.reduce((sum, item) => sum + item, 0) / 1000,3))
                        yearChartKosten.series[0].data.push(G_runden(tarif.Energiepreis * yearChartKWh.series[0].data[i-1],3))        
                
                        //toGrid
                        let toGridKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.toGridWh`).val)
                        yearChartKWh.series[1].data.push(G_runden(toGridKWh.reduce((sum, item) => sum + item, 0) / 1000,3))
                        yearChartKosten.series[1].data.push(G_runden(tarif.Verkaufspreis * yearChartKWh.series[1].data[i-1],3))
                
                        //fromSolar bzw. Eigenverbrauch
                        let fromSolarKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.solarWh`).val)
                        yearChartKWh.series[2].data.push(G_runden(fromSolarKWh.reduce((sum, item) => sum + item, 0) / 1000 - yearChartKWh.series[1].data[i-1],3))
                        yearChartKosten.series[2].data.push(G_runden(tarif.Energiepreis * yearChartKWh.series[2].data[i-1],3))
                
                        //Autarkie
                        let gesamtVerbrauch = yearChartKWh.series[0].data[i-1] + yearChartKWh.series[2].data[i-1]
                        let eigenVerbrauch = yearChartKWh.series[2].data[i-1]
                        let autarkieQuote = eigenVerbrauch / gesamtVerbrauch
                        let gesamtSolar = yearChartKWh.series[2].data[i-1] + yearChartKWh.series[1].data[i-1]
                        let eigenQuote = eigenVerbrauch / gesamtSolar
                        yearChartAutPrc.series[0].data.push(G_runden(100*autarkieQuote,2))
                        yearChartAutPrc.series[1].data.push(G_runden(100*eigenQuote,2))
                
                        //Energien DC
                        let dcGartenhausKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.dcGartenhausKWh`).val)
                        dcGartenhausKWh ||= []
                        yearChartDC.series[0].data.push(G_runden(dcGartenhausKWh.reduce((sum, item) => sum + item,0) / 1000,3))
                        let dcTerrasseKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktYear}.${G_getMonthLongName(i)}.dcTerrasseKWh`).val)
                        dcTerrasseKWh ||= []
                        yearChartDC.series[1].data.push(G_runden(dcTerrasseKWh.reduce((sum, item) => sum + item,0) / 1000,3))
                
                    }
                
                    //Jahresummen
                    // - fromGrid
                    let fromGridKWhJahressumme = yearChartKWh.series[0].data.reduce((sum, item) => sum + item, 0)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrFromGridKWh', fromGridKWhJahressumme, true)
                    let fromGridEuroJahressumme = yearChartKosten.series[0].data.reduce((sum, item) => sum + item, 0)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrFromGridEuro', fromGridEuroJahressumme, true)
                
                    // - toGrid
                    let toGridKWhJahressumme = yearChartKWh.series[1].data.reduce((sum, item) => sum + item, 0)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrToGridKWh', toGridKWhJahressumme, true)
                    let toGridEuroJahressumme = yearChartKosten.series[1].data.reduce((sum, item) => sum + item, 0)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrToGridEuro', toGridEuroJahressumme, true)
                
                    // - eigenverbrauch
                    let eigenverbrauchKWhJahressumme = yearChartKWh.series[2].data.reduce((sum, item) => sum + item, 0)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrEigenverbrauchKWh', eigenverbrauchKWhJahressumme, true)
                    let eigenverbrauchEuroJahressumme = yearChartKosten.series[2].data.reduce((sum, item) => sum + item, 0)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrEigenverbrauchEuro', eigenverbrauchEuroJahressumme, true)
                    //Gesamtverbrauch
                    setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrKonsumKWh', eigenverbrauchKWhJahressumme + fromGridKWhJahressumme, true)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.summeJahrKonsumEuro', eigenverbrauchEuroJahressumme + fromGridEuroJahressumme, true)
                
                    //Titelzeilen
                    yearChartKWh.title.text = 'elektrische Energien in ' + aktYear
                    yearChartKosten.title.text = 'Energienkosten in ' + aktYear
                    yearChartAutPrc.title.text = 'Autarkie/Eigenquoten in ' + aktYear
                    yearChartDC.title.text = 'elektrische Energie DC in ' + aktYear
                    //x-Achse beschriften
                    yearChartKWh.xAxis[0].data = Array.from({length: 12}, (tmp,i) => G_shrtMonths[i])
                    //yearChartKWh.xAxis[0].data = Array.from({length: 12}, (tmp,i) => i+1)
                
                    //Diagrammm als JSON im Objektbaum ablegen
                    setState(jsonChartKWh,JSON.stringify(yearChartKWh),true)
                    setState(jsonChartAutPrc,JSON.stringify(yearChartAutPrc),true)
                    setState(jsonChartKosten,JSON.stringify(yearChartKosten),true)
                    setState(jsonChartYearDC,JSON.stringify(yearChartDC),true)
                
                }
                
                
                //############################ chartEnergieMonth : Tagesenergien ############################
                
                
                function refreshMonth() {
                
                    let aktMonthYear = getAktMonthYear()
                    let tarif = checkTarifStrom(new Date(`${aktMonthYear.year}-('0'+ ${('0' + aktMonthYear.month).slice(-2)}-15`))
                
                    //Diagramm Energien in KWh im RAM allokieren
                    let jsonChartKWh = '0_userdata.0.Fronius.flexCharts.chartEnergieMonth'
                    let monthChartKWh = JSON.parse(getState(jsonChartKWh).val)
                    //Diagramm Autarkie&Effizienz in % im RAM allokieren
                    let jsonChartAutPrc = '0_userdata.0.Fronius.flexCharts.chartEffizienzMonth'
                    let monthChartAutPrc = JSON.parse(getState(jsonChartAutPrc).val)
                    //Diagramm Kosten in € im RAM allokieren
                    let jsonChartKosten = '0_userdata.0.Fronius.flexCharts.chartKostenMonth'
                    let monthChartKosten = JSON.parse(getState(jsonChartKosten).val)
                    //Diagramm Energie DC im RAM allokieren
                    let jsonChartMonthDC = '0_userdata.0.Fronius.flexCharts.chartMonthDC'
                    let monthChartDC = JSON.parse(getState(jsonChartMonthDC).val)
                    
                    //Tabelle fromGridKWh in KWh im RAM allokieren
                    let fromGridKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.fromGridWh`).val)
                    fromGridKWh = fromGridKWh.map(item => item / 1000)
                    //Tabelle toGridKWh in KWh im RAM allokieren
                    let toGridKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.toGridWh`).val)
                    toGridKWh = toGridKWh.map(item => G_runden(item/1000,3))
                    let fromSolarKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.solarWh`).val) 
                    fromSolarKWh = fromSolarKWh.map(item => item / 1000) //erzeugte Solarenergie AC
                    //Tabelle eigenVerbrauch
                    let eigenVerbrauchKWh = fromSolarKWh.map((item, i) => G_runden(item - toGridKWh[i],3)) //Eigenverbrauch AC
                    let gesamtVerbrauchKWh = eigenVerbrauchKWh.map((item, i) => G_runden(item + fromGridKWh[i],3)) //Gesamtverbrauch AC
                
                    //Tabelle dcGartenhausKWh und dcTerrasseKWh in KWh im RAM allokieren
                    let dcGartenhausKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.dcGartenhausKWh`).val)
                    dcGartenhausKWh ||= []
                    dcGartenhausKWh = dcGartenhausKWh.map(item => G_runden(item / 1000,3))
                    let dcTerrasseKWh = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${aktMonthYear.year}.${G_getMonthLongName(aktMonthYear.month)}.dcTerrasseKWh`).val)
                    dcTerrasseKWh ||= []
                    dcTerrasseKWh = dcTerrasseKWh.map(item => G_runden(item / 1000,3))
                
                    //Energiesummen
                    // - fromGrid
                    let fromGridKWhSum = fromGridKWh.reduce((sum, item) => sum + item, 0)
                    let fromGridEuroSum = fromGridKWhSum * tarif.Energiepreis
                    // - toGrid
                    let toGridKWhSum = toGridKWh.reduce((sum, item) => sum + item, 0)
                    let toGridEuroSum = toGridKWhSum * tarif.Verkaufspreis
                    // - Eigenverbrauch    
                    let eigenverbrauchKWhSum = fromSolarKWh.reduce((sum, item) => sum + item) - toGridKWhSum
                    let eigenverbrauchEuroSum = eigenverbrauchKWhSum * tarif.Energiepreis
                    //Gesamtverbrauch bzw. Konsum
                    let konsumKWhSum = fromGridKWhSum + eigenverbrauchKWhSum
                    let konsumEuroSum = konsumKWhSum * tarif.Energiepreis
                    //Energien DC
                
                
                    //Summen in Objekte Speichern
                    // - fromGrid
                    setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatFromGridKWh',fromGridKWhSum,true)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatFromGridEuro',fromGridEuroSum,true)
                    // - toGrid
                    setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatToGridKWh',toGridKWhSum,true)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatToGridEuro',toGridEuroSum,true)
                    // - Eigenverbrauch
                    setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatEigenverbrauchKWh',eigenverbrauchKWhSum,true)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatEigenverbrauchEuro',eigenverbrauchEuroSum,true)
                    // - Konsum
                    setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatKonsumKWh',konsumKWhSum,true)
                    setStateAsync('0_userdata.0.Fronius.flexCharts.sumMonatKonsumEuro',konsumEuroSum,true)
                
                    //Titelzeilen
                    //Energien AC
                    monthChartKWh.title.text = 'elektrische Energien im '
                    monthChartKWh.title.text = (aktMonthYear.month == 3) ? monthChartKWh.title.text.concat('März') : monthChartKWh.title.text.concat(G_getMonthLongName(aktMonthYear.month))
                    monthChartKWh.title.text = monthChartKWh.title.text.concat(' (' + aktMonthYear.year + ')')
                    //Kosten
                    monthChartKosten.title.text = 'Stromkosten im '
                    monthChartKosten.title.text = (aktMonthYear.month == 3) ? monthChartKosten.title.text.concat('März') : monthChartKosten.title.text.concat(G_getMonthLongName(aktMonthYear.month))
                    monthChartKosten.title.text = monthChartKosten.title.text.concat(' (' + aktMonthYear.year + ')')
                    //Quoten
                    monthChartAutPrc.title.text = 'Autarkie&Eigenquote im '
                    monthChartAutPrc.title.text = (aktMonthYear.month == 3) ? monthChartAutPrc.title.text.concat('März') : monthChartAutPrc.title.text.concat(G_getMonthLongName(aktMonthYear.month))
                    monthChartAutPrc.title.text = monthChartAutPrc.title.text.concat(' (' + aktMonthYear.year + ')')
                    //Energien DC
                    monthChartDC.title.text = 'elektrische Energien DC im '
                    if (aktMonthYear.month == 3) {
                        monthChartDC.title.text = monthChartDC.title.text + 'März'
                    } else {
                        monthChartDC.title.text = monthChartDC.title.text + G_getMonthLongName(aktMonthYear.month)
                    }
                    monthChartDC.title.text = monthChartDC.title.text +' (' + aktMonthYear.year + ')'
                    //x-Achse beschriften
                    //x-Achse
                    monthChartKWh.xAxis[0].data = Array.from({length: G_getDaysOfMonth(aktMonthYear.year, aktMonthYear.month)}, (tmp,i) => i+1)
                    monthChartKosten.xAxis[0].data = Array.from({length: G_getDaysOfMonth(aktMonthYear.year, aktMonthYear.month)}, (tmp,i) => i+1)
                    monthChartAutPrc.xAxis[0].data = Array.from({length: G_getDaysOfMonth(aktMonthYear.year, aktMonthYear.month)}, (tmp,i) => i+1)
                    monthChartDC.xAxis[0].data = Array.from({length: G_getDaysOfMonth(aktMonthYear.year, aktMonthYear.month)}, (tmp,i) => i+1)
                    //y-Achsenwerte eintragen ..
                    //Netzbezug, Einspeisung, Eigenverbrauch
                    monthChartKWh.series[0].data = fromGridKWh
                    monthChartKWh.series[1].data = toGridKWh
                    monthChartKWh.series[2].data = eigenVerbrauchKWh
                    //Kosten: Netzbezug, Einspeisung, Eigenverbrauch
                    monthChartKosten.series[0].data = fromGridKWh.map((item,i) => item * tarif.Energiepreis)
                    monthChartKosten.series[1].data = toGridKWh.map((item,i) => item * tarif.Verkaufspreis)
                    monthChartKosten.series[2].data = eigenVerbrauchKWh.map((item,i) => item * tarif.Energiepreis)
                    //Autarkie&Eigenverbrauch
                    monthChartAutPrc.series[0].data = eigenVerbrauchKWh.map((item, i) => G_runden(100*item / gesamtVerbrauchKWh[i],1)) //Autarkie
                    monthChartAutPrc.series[1].data = eigenVerbrauchKWh.map((item,i) => G_runden(100*item / fromSolarKWh[i],1)) //Eigenquote
                
                    //Energien DC
                    monthChartDC.series[0].data = dcGartenhausKWh
                    monthChartDC.series[1].data = dcTerrasseKWh
                
                
                    //Diagrammme als JSON im Objektbaum ablegen
                    setState(jsonChartKWh,JSON.stringify(monthChartKWh),true)
                    setState(jsonChartKosten,JSON.stringify(monthChartKosten),true)
                    setState(jsonChartAutPrc,JSON.stringify(monthChartAutPrc),true)
                    setState(jsonChartMonthDC,JSON.stringify(monthChartDC),true)
                }
                
                
                //############################ Scheduler & Trigger ############################
                
                
                //alle 4 Minuten die Anzeige aktualisieren
                
                schedule('*/4 * * * *', () => {
                    refreshMonth(); refreshYear()
                    setState('0_userdata.0.Fronius.flexCharts.rfhButton',0,false)
                });
                
                on({id:'0_userdata.0.Fronius.flexCharts.selMonth',change: 'any'},(obj) => {
                    refreshMonth()
                    setState('0_userdata.0.Fronius.flexCharts.rfhButton',0,false)
                })
                
                on({id:'0_userdata.0.Fronius.flexCharts.selYear',change: 'any'},(obj) => {
                    //G_setListYears('0_userdata.0.Fronius.Monatstabellen', '0_userdata.0.Fronius.Charts.lstYears')
                    setStateAsync('0_userdata.0.Fronius.flexCharts.rfhButton',0,false)
                    G_setListMonths(getState('0_userdata.0.Fronius.flexCharts.selYear').val, '0_userdata.0.Fronius.Monatstabellen',
                        '0_userdata.0.Fronius.flexCharts.lstMonths')
                    refreshYear(); refreshMonth()
                    setState('0_userdata.0.Fronius.flexCharts.rfhButton', 0, false)
                })
                
                on({id:'0_userdata.0.Fronius.flexCharts.buttonAktualisieren',change: 'any'},(obj) => {
                    refreshMonth(); refreshYear()
                    setState('0_userdata.0.Fronius.flexCharts.rfhButton',0,false)
                })
                
                
                //############################ Skriptstart ############################
                
                //listMonths des zugehörigen DropDown-Widgets füllen
                G_setListYears('0_userdata.0.Fronius.Monatstabellen', '0_userdata.0.Fronius.flexCharts.lstYear')
                //listYears des zugehörigen DropDown-Widgets füllen
                G_setListMonths(getState('0_userdata.0.Fronius.flexCharts.selYear').val, '0_userdata.0.Fronius.Monatstabellen',
                    '0_userdata.0.Fronius.flexCharts.lstMonths')
                
                NegaleinN Offline
                NegaleinN Offline
                Negalein
                schrieb zuletzt editiert von
                #239

                @legro sagte:

                insbesondere zu den im Skript

                von wo bekommst du die Daten?
                Ich seh bei dir nur 0_userdata.0.Fronius

                ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                ° Node.js Fixer ---> iob nodejs-update
                ° Fixer ---> iob fix

                L 1 Antwort Letzte Antwort
                0
                • NegaleinN Negalein

                  @legro sagte:

                  insbesondere zu den im Skript

                  von wo bekommst du die Daten?
                  Ich seh bei dir nur 0_userdata.0.Fronius

                  L Online
                  L Online
                  legro
                  schrieb zuletzt editiert von legro
                  #240

                  @Negalein sagte:

                  von wo bekommst du die Daten?
                  Ich seh bei dir nur 0_userdata.0.Fronius

                  Die Daten stammen aus meinen in diesem Thread zuvor beschriebenen Monatstabellen. Hier findest du beschrieben, wie sie gefüllt werden können. Die Daten selbst werden dem Modbus-Adapter entnommen.

                  Raspberry Pi 5 mit 8GB + 120GB SSD + Coordinator COD-m + ioBroker ..

                  NegaleinN 1 Antwort Letzte Antwort
                  0
                  • L legro

                    @Negalein sagte:

                    von wo bekommst du die Daten?
                    Ich seh bei dir nur 0_userdata.0.Fronius

                    Die Daten stammen aus meinen in diesem Thread zuvor beschriebenen Monatstabellen. Hier findest du beschrieben, wie sie gefüllt werden können. Die Daten selbst werden dem Modbus-Adapter entnommen.

                    NegaleinN Offline
                    NegaleinN Offline
                    Negalein
                    schrieb zuletzt editiert von
                    #241

                    @legro sagte:

                    Die Daten stammen aus meinen in diesem Thread zuvor beschriebenen Monatstabelle

                    ah, du holst sie mit Modbus ab.
                    Das muss ich mir jetzt auch endlich mal anschaun.

                    ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                    ° Node.js Fixer ---> iob nodejs-update
                    ° Fixer ---> iob fix

                    1 Antwort Letzte Antwort
                    0
                    • L Online
                      L Online
                      legro
                      schrieb zuletzt editiert von
                      #242

                      So siehst meine dazugehörige Objekt-Struktur aus ..

                      5ea13e8f-e454-4e8d-9556-163262e4003c-image.jpeg

                      Raspberry Pi 5 mit 8GB + 120GB SSD + Coordinator COD-m + ioBroker ..

                      L 1 Antwort Letzte Antwort
                      0
                      • L legro

                        So siehst meine dazugehörige Objekt-Struktur aus ..

                        5ea13e8f-e454-4e8d-9556-163262e4003c-image.jpeg

                        L Online
                        L Online
                        legro
                        schrieb zuletzt editiert von legro
                        #243

                        Die Datenpunkte enthalten Arrays mit den Tageswerten.

                        Raspberry Pi 5 mit 8GB + 120GB SSD + Coordinator COD-m + ioBroker ..

                        1 Antwort Letzte Antwort
                        0
                        • NegaleinN Offline
                          NegaleinN Offline
                          Negalein
                          schrieb zuletzt editiert von
                          #244

                          so schaut derzeit mein Grafana Dashboard aus.
                          Daten aus dem Autarkie-Script und dem Solarweb-Adapter

                          1f356a4b-9bbe-443d-8267-4df550b95c85-image.jpeg

                          ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                          ° Node.js Fixer ---> iob nodejs-update
                          ° Fixer ---> iob fix

                          1 Antwort Letzte Antwort
                          0

                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                          Registrieren Anmelden
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          600

                          Online

                          32.9k

                          Benutzer

                          83.2k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2026
                          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