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

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    8
    1
    462

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    14
    1
    2.7k

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

Test Adapter fronius-solarweb

Geplant Angeheftet Gesperrt Verschoben Tester
247 Beiträge 49 Kommentatoren 61.5k 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.
  • 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 Offline
        L Offline
        legro
        schrieb am 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 DC->AC 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 DC->AC 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 am 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 Offline
            L Offline
            legro
            schrieb am 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 am 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 Offline
                L Offline
                legro
                schrieb am 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 Offline
                  L Offline
                  legro
                  schrieb am 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 am 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
                    • NegaleinN Offline
                      NegaleinN Offline
                      Negalein
                      schrieb am zuletzt editiert von
                      #245

                      @tombox

                      Ich hab Solarweb Premium und bekomm seitdem diese Errors im Log.

                      2026-06-18 00:00:22.122 - error: fronius-solarweb.0 (152734) https://swqapi.solarweb.com/pvsystems/xxxxxxxxxxxx/weather/energyforecast?from=1781647204013&to=1781733599013
                      2026-06-18 00:00:22.125 - error: fronius-solarweb.0 (152734) AxiosError: Request failed with status code 404
                      2026-06-18 00:00:22.125 - error: fronius-solarweb.0 (152734) {"responseError":1002,"responseMessage":"Requested resource not found."}
                      

                      ° 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

                        @tombox

                        Ich hab Solarweb Premium und bekomm seitdem diese Errors im Log.

                        2026-06-18 00:00:22.122 - error: fronius-solarweb.0 (152734) https://swqapi.solarweb.com/pvsystems/xxxxxxxxxxxx/weather/energyforecast?from=1781647204013&to=1781733599013
                        2026-06-18 00:00:22.125 - error: fronius-solarweb.0 (152734) AxiosError: Request failed with status code 404
                        2026-06-18 00:00:22.125 - error: fronius-solarweb.0 (152734) {"responseError":1002,"responseMessage":"Requested resource not found."}
                        
                        T Offline
                        T Offline
                        tombox
                        schrieb am zuletzt editiert von
                        #246

                        @Negalein teste mal GitHub version

                        NegaleinN 1 Antwort Letzte Antwort
                        0
                        • T tombox

                          @Negalein teste mal GitHub version

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

                          @tombox sagte:

                          teste mal GitHub version

                          Fehler bleibt

                          fronius-solarweb.0 2026-06-18 13:23:20.601	error	{"responseError":1001,"responseMessage":"Error while processing request."}
                          fronius-solarweb.0 2026-06-18 13:23:20.601	error	AxiosError: Request failed with status code 500
                          fronius-solarweb.0 2026-06-18 13:23:20.599	error	https://swqapi.solarweb.com/pvsystems/xxxxxxxxxxxx/weather/energyforecast?from=2026-06-19T00:00:00&to=2026-06-19T23:59:59&timezone=local
                          

                          ° 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

                          303

                          Online

                          33.0k

                          Benutzer

                          83.3k

                          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