NEWS
Test Adapter fronius-solarweb
-
@tombox Ich hab eine Kopie vom Log mit debug hier angehangen: fronius.log.zip
Danke schon mal für die Mühe
Edit: Dropbox Link raus und Log als Dateianhang eingefügt
@kaeptnkessl Bitte keine extetnen Hoster verwenden!
Alles hier im Forum entweder als Text in code-tags posten oder wenn das nicht geht, als Datei hochladen -
@tombox Ich hab eine Kopie vom Log mit debug hier angehangen: fronius.log.zip
Danke schon mal für die Mühe
Edit: Dropbox Link raus und Log als Dateianhang eingefügt
@kaeptnkessl kannst die Datei wieder löschen
hast du pro?
funktionert der weather energy forecast in der app? -
@kaeptnkessl kannst die Datei wieder löschen
hast du pro?
funktionert der weather energy forecast in der app?@tombox Ja, Pro habe ich und der Forecast funktioniert in der App.
Interessante Beobachtung: Seit dem ich das Protokoll des Adapters wieder von debug zurück auf Info gestellt habe: Keine Fehler mehr ...
-
@vierlingmt ich habe was angepasst aber für mich ist keine offensichtliche Änderung
einfach mal die GitHub version drüber installieren.
sie enthält auch livedata und efm stateist das problem dauerhaft?
-
@tombox hallo unter welchen Datenpunkt finde ich Livedata und EFM State!ist das unter flowdata??
Lg
Hallo, bei meinem adapter kommt nun seit einige Woche die Fehlermeldung im sekundentakt. AxiosError: Request failed with status code 404..
Debug / Info hat nix gebracht.
Habt ihr noch einen Tipp?
danke & mfg Wolfgang -
Hallo, bei meinem adapter kommt nun seit einige Woche die Fehlermeldung im sekundentakt. AxiosError: Request failed with status code 404..
Debug / Info hat nix gebracht.
Habt ihr noch einen Tipp?
danke & mfg Wolfgang@wolfgang-gary Bei mir auch seit Monaten. Mir konnte da noch keiner helfen.
-
Ebenso bei mir:
fronius-solarweb.0 2025-12-17 14:44:51.413 error {"responseError":1002,"responseMessage":"Requested resource not found."} fronius-solarweb.0 2025-12-17 14:44:51.413 error AxiosError: Request failed with status code 404 fronius-solarweb.0 2025-12-17 14:44:51.413 error https://swqapi.solarweb.com/pvsystems/xxxxxxxxxxxxxxxxxxxxxx/devices/xxxxxxxxxxxxxxxx/flowdataJede Minute diese drei Einträge - welche Lösung gibt es hierzu?
Danke und lg -
Ebenso bei mir:
fronius-solarweb.0 2025-12-17 14:44:51.413 error {"responseError":1002,"responseMessage":"Requested resource not found."} fronius-solarweb.0 2025-12-17 14:44:51.413 error AxiosError: Request failed with status code 404 fronius-solarweb.0 2025-12-17 14:44:51.413 error https://swqapi.solarweb.com/pvsystems/xxxxxxxxxxxxxxxxxxxxxx/devices/xxxxxxxxxxxxxxxx/flowdataJede Minute diese drei Einträge - welche Lösung gibt es hierzu?
Danke und lg@ToK sagte in Test Adapter fronius-solarweb:
.. welche Lösung gibt es hierzu?
Will man seines eigenen (Un)Glückes Schmied sein, sollte man auf eine auf Modbus basierende Lösung setzen. Diese Schnittstelle zu verwenden, hat zwei große Vorteile:
- streng lokaler Datenzugriff
- über Modbus können nicht nur alle Daten abgerufen werden, auch Steuerungen des Wechselrichters sind möglich.
Da bleiben kaum noch Wünsche offen ..

-
@ToK sagte in Test Adapter fronius-solarweb:
.. welche Lösung gibt es hierzu?
Will man seines eigenen (Un)Glückes Schmied sein, sollte man auf eine auf Modbus basierende Lösung setzen. Diese Schnittstelle zu verwenden, hat zwei große Vorteile:
- streng lokaler Datenzugriff
- über Modbus können nicht nur alle Daten abgerufen werden, auch Steuerungen des Wechselrichters sind möglich.
Da bleiben kaum noch Wünsche offen ..

@legro sagte in Test Adapter fronius-solarweb:
Da bleiben kaum noch Wünsche offen ..
Dies habe ich auch so umsetzt - lese über Modbus vom Fronius Gen24, alle Energiedaten ein und verwende diese seit etwa einem Monat für die aktuellen Daten und deren Aufzeichnung.
Da die Anlage aber schon mehrere Jahre läuft möchte ich die "alten" Daten, die der letzten Monate und Jahre - diese sind ja nur bei Fronius gespeichert, ebenso in der nun erstellten Visu darstellen. Dies sollte mit Hilfe der fronius-solarweb möglich sein - bekomme aber jede Minuten (entsprechend dem Update Intervall) die vorhin genannten 3 Einträge im Protokoll - dies sollte bestimmt nicht so ein.
Deinstallation und erneute Installation des Adapters brachte keine Veränderung ... -
@TimoWald sagte in Test Adapter fronius-solarweb:
Nutzt ihr dazu den Modbus Adapter?
Anfangs hatte ich den Fronius-Adapter verwendet. Als dessen erste Version nicht mehr gepflegt wurde und die Neuauflage recht viele Anpassungen erforderte, habe ich mich für Modbus entschieden. Darüber hinaus hatte ich ursprünglich die Daten in InfluxDB gespeichert und mit Grafana dargestellt. Als die Entwickler dieser Programme ebenfalls anfingen rumzuzanken, nach dem Motto: „Rein in die Kartoffeln; raus aus den Kartoffeln!“ (InfluxQL -> Flux -> InfluxQL ..), hatte ich von dieser Art Agrarinformatik die Nase voll und bastelte meine eigenen Lösungen.
Seither speichere ich meine Daten in Monatstabellen (JSON-ARRAY), in denen ich die Daten für jeden Tag ablege. So bin ich unabhängig davon, ob Adapter gepflegt werden, Updates in verwendeten Anwendungen Anpassungen erfordern, ..
Fronius sorgt in geradezu vorbildlicher Weise für die Bereitstellung der Werte als sog. livetime values. Dies sind Register, in denen die Werte seit in Betriebnahme des GEN24 saldierend gesammelt werden. Mein Vorgehen:
- Um 0:00 Uhr speichere ich den Zählerstand eines jeden dieser Register in eine Variable.
- Die Tageswerte erhalte ich als Differenz zum Vortag.
- Diese Tageswerte speichere ich für jeden Tag in eine entsprechende Monatstabelle.
Damit ist es ein Leichtes die hier gezeigten Diagramme zu erstellen.
-
Genauso Ähnlich wollte ich es auch aufbauen.
Ich suche die Register für: Ohmpilot Heute KW; gelieferte KW heute; bezogen KW heute; Produktion heute KW; Direktverbrauch heute KW; Gesamtverbrauch heute KW, Ertrag heute €.@TimoWald sagte in Test Adapter fronius-solarweb:
Genauso Ähnlich wollte ich es auch aufbauen.
Damit du nicht ganz von vorne anfangen musst, hier meine oben beschriebene Lösung in Form eines JavaScripts ..
let partsDate = {jahr: '', monat: '', tag: ''} let eventPV = null let eventFromGrid = null let eventEnergyTotal = null function setPartsDate() { let alleMonate = ['Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'] let d = new Date() partsDate = {jahr: d.getFullYear().toString(), monat: alleMonate[d.getMonth()], tag: d.getDate().toString()} } setPartsDate() schedule({hour: 0, minute: 0}, function () { setPartsDate() //TagesStartwert für PV setState(`0_userdata.0.Fronius.Modbus.atHome.startDayWhPV`,getState(`modbus.2.holdingRegisters.1.40186_ActWh`).val,true) setState(`0_userdata.0.Counter.Strom.startTagPV`,getState(`modbus.2.holdingRegisters.1.40186_ActWh`).val,true) //TagesStartwert für Export setState(`0_userdata.0.Fronius.Modbus.toGrid.startDayWh`,getState(`modbus.2.holdingRegisters.200.40107_TotWhExp`).val,true) setState(`0_userdata.0.Counter.Strom.startTagVerkaufStrom`,getState(`modbus.2.holdingRegisters.200.40107_TotWhExp`).val,true) //TagesStartwert für Import setState(`0_userdata.0.Fronius.Modbus.fromGrid.startDayWh`,getState(`modbus.2.holdingRegisters.200.40115_TotWhImp`).val,true) setState(`0_userdata.0.Counter.Strom.startTagBezugStrom`,getState(`modbus.2.holdingRegisters.200.40115_TotWhImp`).val,true) //TagesStartWert für Gas setState('0_userdata.0.Counter.Gas.startTagGas',getState('0_userdata.0.Counter.Gas.volGas').val,true) }) eventFromGrid = on({id: `modbus.2.holdingRegisters.200.40115_TotWhImp`, change: 'gt'}, (obj) => { let aktImp = obj.state.val - getState(`0_userdata.0.Fronius.Modbus.fromGrid.startDayWh`).val setState(`0_userdata.0.Fronius.Modbus.fromGrid.tmpDayWh`,aktImp,true) let tmpPV = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.fromGridWh`).val) tmpPV[Number(partsDate.tag)-1] = aktImp setState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.fromGridWh`,JSON.stringify(tmpPV),true) }) eventPV = on({id: `modbus.2.holdingRegisters.200.40107_TotWhExp`, change: 'gt'}, (obj) => { let aktExp = obj.state.val - getState(`0_userdata.0.Fronius.Modbus.toGrid.startDayWh`).val setState('0_userdata.0.Fronius.Modbus.toGrid.tmpDayWh',aktExp,true) let tmpPV = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.toGridWh`).val) tmpPV[Number(partsDate.tag)-1] = aktExp setState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.toGridWh`,JSON.stringify(tmpPV),true) }) eventEnergyTotal = on({id: `modbus.2.holdingRegisters.1.40186_ActWh`, change: 'gt'}, (obj) => { let aktGen = obj.state.val - getState(`0_userdata.0.Fronius.Modbus.atHome.startDayWhPV`).val setState(`0_userdata.0.Fronius.Modbus.atHome.tmpDayWhPV`,aktGen,true) let tmpPV = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.solarWh`).val) tmpPV[Number(partsDate.tag)-1] = aktGen setState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.solarWh`,JSON.stringify(tmpPV),true) })Da ich keinen Ohmpilot habe, musst du dir hierzu die Register leider selbst suchen.
-
@TimoWald sagte in Test Adapter fronius-solarweb:
Wo finde ich die Liste mit den Registern?
NACHTRAG
- Du benötigst für meine hier zitierte Lösung ein Fronius Smartmeter, dessen Register werden im JavaScript über die Modbus ID = 200 referenziert.
- Der Ohmpilot hat wohl einen eigenen Modbus und IP. In diesem Thread findest du vermutlich alles, was du brauchst.
-
@TimoWald sagte in Test Adapter fronius-solarweb:
Genauso Ähnlich wollte ich es auch aufbauen.
Damit du nicht ganz von vorne anfangen musst, hier meine oben beschriebene Lösung in Form eines JavaScripts ..
let partsDate = {jahr: '', monat: '', tag: ''} let eventPV = null let eventFromGrid = null let eventEnergyTotal = null function setPartsDate() { let alleMonate = ['Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'] let d = new Date() partsDate = {jahr: d.getFullYear().toString(), monat: alleMonate[d.getMonth()], tag: d.getDate().toString()} } setPartsDate() schedule({hour: 0, minute: 0}, function () { setPartsDate() //TagesStartwert für PV setState(`0_userdata.0.Fronius.Modbus.atHome.startDayWhPV`,getState(`modbus.2.holdingRegisters.1.40186_ActWh`).val,true) setState(`0_userdata.0.Counter.Strom.startTagPV`,getState(`modbus.2.holdingRegisters.1.40186_ActWh`).val,true) //TagesStartwert für Export setState(`0_userdata.0.Fronius.Modbus.toGrid.startDayWh`,getState(`modbus.2.holdingRegisters.200.40107_TotWhExp`).val,true) setState(`0_userdata.0.Counter.Strom.startTagVerkaufStrom`,getState(`modbus.2.holdingRegisters.200.40107_TotWhExp`).val,true) //TagesStartwert für Import setState(`0_userdata.0.Fronius.Modbus.fromGrid.startDayWh`,getState(`modbus.2.holdingRegisters.200.40115_TotWhImp`).val,true) setState(`0_userdata.0.Counter.Strom.startTagBezugStrom`,getState(`modbus.2.holdingRegisters.200.40115_TotWhImp`).val,true) //TagesStartWert für Gas setState('0_userdata.0.Counter.Gas.startTagGas',getState('0_userdata.0.Counter.Gas.volGas').val,true) }) eventFromGrid = on({id: `modbus.2.holdingRegisters.200.40115_TotWhImp`, change: 'gt'}, (obj) => { let aktImp = obj.state.val - getState(`0_userdata.0.Fronius.Modbus.fromGrid.startDayWh`).val setState(`0_userdata.0.Fronius.Modbus.fromGrid.tmpDayWh`,aktImp,true) let tmpPV = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.fromGridWh`).val) tmpPV[Number(partsDate.tag)-1] = aktImp setState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.fromGridWh`,JSON.stringify(tmpPV),true) }) eventPV = on({id: `modbus.2.holdingRegisters.200.40107_TotWhExp`, change: 'gt'}, (obj) => { let aktExp = obj.state.val - getState(`0_userdata.0.Fronius.Modbus.toGrid.startDayWh`).val setState('0_userdata.0.Fronius.Modbus.toGrid.tmpDayWh',aktExp,true) let tmpPV = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.toGridWh`).val) tmpPV[Number(partsDate.tag)-1] = aktExp setState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.toGridWh`,JSON.stringify(tmpPV),true) }) eventEnergyTotal = on({id: `modbus.2.holdingRegisters.1.40186_ActWh`, change: 'gt'}, (obj) => { let aktGen = obj.state.val - getState(`0_userdata.0.Fronius.Modbus.atHome.startDayWhPV`).val setState(`0_userdata.0.Fronius.Modbus.atHome.tmpDayWhPV`,aktGen,true) let tmpPV = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.solarWh`).val) tmpPV[Number(partsDate.tag)-1] = aktGen setState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.solarWh`,JSON.stringify(tmpPV),true) })Da ich keinen Ohmpilot habe, musst du dir hierzu die Register leider selbst suchen.
-
@TimoWald sagte in Test Adapter fronius-solarweb:
@legro Was genau mache ich mit dem Javascript?
Du kannst findest zumindest einige der von dir gewünschten Datenpunkte in dem Script. Darüber hinaus dokumentiert das Script mein Vorgehen, wie man die Daten in eigenen Monatstabellen ablegen kann.
Wenn du das Ganze ggf. ähnlich gestalten willst, helfe ich gerne.
-
@TimoWald sagte in Test Adapter fronius-solarweb:
@legro Was genau mache ich mit dem Javascript?
Du kannst findest zumindest einige der von dir gewünschten Datenpunkte in dem Script. Darüber hinaus dokumentiert das Script mein Vorgehen, wie man die Daten in eigenen Monatstabellen ablegen kann.
Wenn du das Ganze ggf. ähnlich gestalten willst, helfe ich gerne.
-
@legro Sorry aber ich kann echt nix mit dem Script anfangen.
Aktuell sieht es bei mir so aus.
@TimoWald sagte in Test Adapter fronius-solarweb:
@legro Sorry aber ich kann echt nix mit dem Script anfangen.
Aktuell sieht es bei mir so aus.Irgendwie geht‘s mir wie dir: Mit deiner Abbildung kann ich nichts anfangen.
Hast du die Modbus Register (noch) nicht in deine ioBroker Installation eingefügt? Das ist ganz schön viel Arbeit. Aber auch hier musst du das Rad nicht neu erfinden. Ich habe in diesem Beitrag alles zusammengetragen, was man benötigt, den GEN24 via Modbus auszulesen und zu steuern. Am einfachsten importierst du die TSV Datei(en), die du benötigst, dann musst die vielen Datenpunkte nicht selbst erstellen.
Wenn du dies erledigt hast, solltest du etwa das Register „ modbus.2.holdingRegisters.1.40186_ActWh“ finden, dass ich in dem Script in Zeile 17 referenziere. Dieses Register enthält beim GEN24 die seit Inbetriebnahme erzeugte Energie (DC) in der Einheit KWh.