Geräte und Komponenten / JSON: merkwürdiges Timeout-Verhalten
Verfasst: So Mär 24, 2024 12:29 pm
Hallo zusammen,
ich habe festgestellt, dass die Abfrage der Komponenten über JSON (Konfiguration -> Geräte und Komponenten -> Jsom) zu Fehlern in den Logs führt. Zunächst hatte ich den Inhalt des JSONs in Verdacht, es scheint sich aber eher um ein TImeout-Problem zu handeln. Aber der Reihe nach.
Ich habe einen Senec-Speicher mit Wechselrichter. Dafür gibt es kein offizielles openWB-Modul, also konfguriere ich es über JSON.
Das Ursprungs-JSON aus dem lokalen Netzwerk direkt von Senec (Response-Zeit im Mittel ca. 20ms) ist für die openWB nicht zu verarbeiten:
Daher habe ich ein Programm geschrieben, das es in ein für die openWB lesbares Format umwandelt (Response-Zeit im Mittel ca. 40ms):
Die Einstellungen in der openWB sehen jetzt so aus:
Zähler:
WICHTIG: wenn man die zusätzlichen Werte nicht abfragt (z. B. "Abfrage für Zählerstand Bezug" nach wie vor leer), funktioniert weiterhin alles fehlerfrei.
Nun fragen wir auch die kumulierten Werte ab. Die Einstellungen sehen jetzt so aus:
Zähler:
Daher habe ich mir noch einen Trick einfallen lassen: um die Antwortzeiten meines Servers zu verringern, läuft ein Prozess daneben, der im Abstand von 9 Sekunden auch das lokale JSON cached und der openWB-Call dann nur noch die Werte aus dem Cache bekommt. Es kommt das gleiche JSON heraus, ein paar Sekunden verzögert, die Antwortzeiten liegen im Mittel aber bei ca. 25ms. Ergebnis: die Fehlerrate liegt bei unter 50%, immerhin deutlich niedriger als bei der ungecachten Version.
Auffällig ist also, dass die Response-Zeit einen signifikanten Einfluss auf die Fehlerrate hat. Vermutlich werden Timeouts überschritten. Merkwürdig finde ich allerdings die konkreten Zahlen. Selbst eine Antwortzeit von 60ms scheint mir nicht sonderlich viel zu sein.
Auffällig ist aber auch, dass es anscheinend nicht um die reine Antwortzeit des Servers geht, sondern die Verarbeiteung innerhalb der openWB auch einen erheblichen Einfluss hat. Nur so ist es zu erklären, dass das identische JSON fehlerfrei funktioniert, wenn nur die aktuellen Werte abgefragt werden, aber mehr als 50% Fehler wirft, wenn auch die kumulierten Werte ausgelesen werden (ohne lokalen Cache).
Meine Frage wäre daher, ob ich das richtig interpretiere und wenn ja, warum die Timeouts so extrem niedrig gesetzt sind und ob es ggf. eine Lösung für das Problem gibt.
ich habe festgestellt, dass die Abfrage der Komponenten über JSON (Konfiguration -> Geräte und Komponenten -> Jsom) zu Fehlern in den Logs führt. Zunächst hatte ich den Inhalt des JSONs in Verdacht, es scheint sich aber eher um ein TImeout-Problem zu handeln. Aber der Reihe nach.
Ich habe einen Senec-Speicher mit Wechselrichter. Dafür gibt es kein offizielles openWB-Modul, also konfguriere ich es über JSON.
Das Ursprungs-JSON aus dem lokalen Netzwerk direkt von Senec (Response-Zeit im Mittel ca. 20ms) ist für die openWB nicht zu verarbeiten:
Code: Alles auswählen
{
"STATISTIC": {
...
},
"ENERGY": {
"STAT_STATE": "u8_0E",
"GUI_BAT_DATA_CURRENT": "fl_4120CCCD",
"GUI_BAT_DATA_FUEL_CHARGE": "fl_415219DB",
"GUI_BAT_DATA_POWER": "fl_43F0A130",
"GUI_BAT_DATA_VOLTAGE": "fl_423F8B44",
"GUI_GRID_POW": "fl_C1416E00",
"GUI_HOUSE_POW": "fl_43CF95B0",
"GUI_INVERTER_POWER": "fl_44632128",
"STAT_HOURS_OF_OPERATION": "u3_00001A98"
},
Code: Alles auswählen
{
"energy": {
"current": {
"statState": 14,
"batteryCurrent": 29.58,
"batteryStateOfCharge": 27.272726,
"batteryPower": 1479.6135,
"batteryVoltage": 50.02,
"gridPower": 4.9908447,
"housePower": 529.38245,
"inverterPower": 2004.0051,
"hoursOfOperation": 6810
}
}
}
Zähler:
- Abfrage für Leistung: ".energy.current.gridPower"
- Abfrage für Zählerstand Bezug: ""
- Abfrage für Zählerstand Einspeisung: ""
- Abfrage für Leistung: ".energy.current.inverterPower"
- Abfrage für Zählerstand: ""
- Abfrage für Leistung: ".energy.current.batteryPower"
- Abfrage für Ladestand: ".energy.current.batteryStateOfCharge"
- Abfrage für Zählerstand Ladung: ""
- Abfrage für Zählerstand Entladung: ""
Code: Alles auswählen
{
"energy": {
"current": {
"statState": 14,
"batteryCurrent": 23.18,
"batteryStateOfCharge": 28.28,
"batteryPower": 1158.38,
"batteryVoltage": 49.97,
"gridPower": -15.62,
"housePower": 509.12,
"inverterPower": 1683.12,
"hoursOfOperation": 6810
},
"today": {
"gridImport": 1162.48,
"gridExport": 398.19,
"powerGenerated": 6402.34,
"powerConsumption": 6869.63,
"accuExport": 3220.95,
"accuImport": 2923.83,
"accuLevel": 6501.73
}
},
"cache": {
"statsWeb": {
"cached": true,
"cacheTime": "2024-03-24 13:16:01"
}
}
}
Nun fragen wir auch die kumulierten Werte ab. Die Einstellungen sehen jetzt so aus:
Zähler:
- Abfrage für Leistung: ".energy.current.gridPower"
- Abfrage für Zählerstand Bezug: ".energy.today.gridImport"
- Abfrage für Zählerstand Einspeisung: ".energy.today.gridExport"
- Abfrage für Leistung: ".energy.current.inverterPower"
- Abfrage für Zählerstand: ".energy.today.powerGenerated"
- Abfrage für Leistung: ".energy.current.batteryPower"
- Abfrage für Ladestand: ".energy.current.batteryStateOfCharge"
- Abfrage für Zählerstand Ladung: ".energy.today.accuExport"
- Abfrage für Zählerstand Entladung: ".energy.today.accuImport"
Code: Alles auswählen
2024-03-24 12:40:05,878 - {helpermodules.utils._thread_handler:26} - {ERROR:MainThread} - device0 konnte nicht innerhalb des Timeouts die Werte abfragen, die abgefragten Werte werden nicht in der Regelung verwendet.
2024-03-24 12:40:05,879 - {modules.common.utils.component_parser:25} - {ERROR:MainThread} - Keine aktuellen Werte für Gerät 'Json'(0) der Komponente 'Wechselrichter'(1) verfügbar.
2024-03-24 12:40:06,444 - {modules.common.utils.component_parser:25} - {ERROR:MainThread} - Keine aktuellen Werte für Gerät 'Json'(0) der Komponente 'Speicher'(2) verfügbar.
2024-03-24 12:40:07,698 - {modules.common.utils.component_parser:25} - {ERROR:MainThread} - Keine aktuellen Werte für Gerät 'Json'(0) der Komponente 'Zähler'(0) verfügbar.
Auffällig ist also, dass die Response-Zeit einen signifikanten Einfluss auf die Fehlerrate hat. Vermutlich werden Timeouts überschritten. Merkwürdig finde ich allerdings die konkreten Zahlen. Selbst eine Antwortzeit von 60ms scheint mir nicht sonderlich viel zu sein.
Auffällig ist aber auch, dass es anscheinend nicht um die reine Antwortzeit des Servers geht, sondern die Verarbeiteung innerhalb der openWB auch einen erheblichen Einfluss hat. Nur so ist es zu erklären, dass das identische JSON fehlerfrei funktioniert, wenn nur die aktuellen Werte abgefragt werden, aber mehr als 50% Fehler wirft, wenn auch die kumulierten Werte ausgelesen werden (ohne lokalen Cache).
Meine Frage wäre daher, ob ich das richtig interpretiere und wenn ja, warum die Timeouts so extrem niedrig gesetzt sind und ob es ggf. eine Lösung für das Problem gibt.