helgeerbe / OpenDTU-OnBattery

Software for ESP32 to talk to Hoymiles Inverters and Victrons MPPT battery chargers (Ve.Direct)
GNU General Public License v2.0
263 stars 56 forks source link

Powermeter, HTTP+JSON, Umstellung auf asynchrone Abfrage der Werte #760

Closed SW-Niko closed 5 days ago

SW-Niko commented 4 months ago

Is your feature request related to a problem? Please describe.

Die synchrone Abfrage der Powermeter Werte über HTTP+JSON (Z.B. Shelly 3EM) überschreitet mehrmals am Tag die konfigurierten zeitlichen Grenzwerte. (Default 1sec) Dadurch werden weitere DTU Komponenten negativ beeinflusst.

Describe the solution you'd like

Zeitliche Probleme (Timeout) beim Abfragen der Powermeterwerte (WLAN) sollten andere DTU Komponenten, die nicht direkt von den Powermeterwerten abhängen, nicht negativ beeinflussen.

Describe alternatives you've considered

Umstellen der Abfrage der Powermeterwerte von Synchron auf Asynchron.

Additional context

Auszug aus meinem Statistik logging:

12:52:35.344 > TST: Data valid, Duration: 0 days, 5 hour, 5 min, 30 sec 12:52:35.344 > -------------------------------------------------------------- 12:52:35.344 > TST: HttpPo...updateValues(): OK-Time: Max:952ms, Min=72ms, Avg=109ms, Ok=11T, Value=0.00 12:52:35.344 > TST: : NotOk-Time: Max=1357ms, Min=1017ms, Avg=1177ms, Fault=5/0.04%, Value=0.00 12:52:35.344 > TST: : Back-Time: Max=10021ms, Min=3ms, Avg=1887ms

Es wurde 5 Stunden, die Funktion HttpPowerMeterClass::updateValues(): geloggt. In dieser Zeit wurde die Funktion 11000mal aufgerufen. Rückgabe wert = true: Im Durchschnitt dauert es 109ms bis die Werte da sind. Die maximal Zeit war 952ms Es wurden 5 Fehler (Timeout) registriert. Rückgabe wert = false: Interessant ist auch noch die minimale Back-Time von 3ms. Das ist die Zeit vom Verlassen der Funktion bis zum erneuten Aufruf.

Ich interpretiere das so: Wenn es zu einem Timeout (ca. 1Sek) kommt dann versuche man es gleich nochmal. Dann sind wir bei 2 Sekunden und das deckt sich mit meinen Messungen am receive Puffer. #

cerise21 commented 3 months ago

Die

[VE.Direct] checksum 0x?? != 0, invalid frame"

-Meldungen sehe ich zuhauf in der Console. Gerade mal für eine halbe Stunde mitgezählt: Im Schnitt alle 9s ein Fehler (!) Die

[VE.Direct] Resetting state machine (was 4) after timeout"

-Meldung kam in diesem Zeitraum einmal.

Nachdem ich testweise das Powermeter (SDM630 via RS485) in den Settings deaktiviert hatte, kam kein einziger Checksum-Fehler mehr…

schlimmchen commented 3 months ago

Ja, das macht Sinn, und das habe ich schon kommentiert in deinem Issue mit dem SDM power meter, dass der SDM power meter Treiber furchtbar ist und synchron Daten anfordert und dann auf Antworten hört. Hier wird was anderes, aber ganz ähnliches bemängelt, nämlich dass die Anfrage und Verarbeitung von HTTP power metern ebenfalls synchron läuft und andere Aufgaben in der Firmware aufhält.

ottelo9 commented 3 months ago

Ich habe auch gerade gesehen, dass die Werte von meinem Stromzähler (Tasmota) nicht im eingestelltem Intervall abgefragt werden, sondern fast schon jede Sekunde. Wenn ich DPL ausschalte, dann kommt die Abfrage nur im eingestelltem PowerMeter Intervall (bei mir auf 27s zum Test eingestellt). Soll ich dafür neues Issue aufmachen?

Aktiviere ich DPL kommt die Abfrage zuerst alle 27s, dann plötzlich alle 1-3s. Tasmota wird mit Abfragen überschwemmt. image

Hier mal die Logs: opendtu https://pastebin.com/RWpvsBQw

tasmota (StatusSNS) https://pastebin.com/19yahXcq

2024.03.23

schlimmchen commented 3 months ago

Ja, das gehört in #579 und hat mit diesem Issue nichts zu tun.

schlimmchen commented 2 weeks ago

Umgesetzt in #1077.