NEWS
Test Adapter fronius-solarweb
-
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).



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') -
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).



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') -
-
-
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."} -
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."} -
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
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

