Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ungewollt häufiges Abfragen des PowerMeter #763

Closed
schlimmchen opened this issue Mar 17, 2024 · 5 comments
Closed

Ungewollt häufiges Abfragen des PowerMeter #763

schlimmchen opened this issue Mar 17, 2024 · 5 comments
Labels
bug Something isn't working

Comments

@schlimmchen
Copy link
Member

What happened?

Im Verlauf von #732 haben wir festgestellt, dass der PowerMeter ungewollt häufig abgefragt wird, und zwar mit dem Zwang, ein Update zu holen.

To Reproduce Bug

Gut beschrieben in #732 (comment). Mit websocat lässt sich bestätigen, dass aus scheinbar unklaren Gründen der PowerMeter Wert im Live View häufiger wechselt/aktualisiert, als die Konsole zeigt. Das hat damit zu tun, dass mehrere Komponenten den PowerMeter befragen und dabei ein Update erzwingen. Beispielsweise der DPL, der nur für eine Debug-Ausgabe riskiert, eine langwierige serielle Transaktion oder drei HTTP Requests zu machen.

Siehe auch #732 (comment)

Expected Behavior

Der PowerMeter sollte sich vor allem selbst verwalten und entscheiden, wie oft er neue Daten holt. Benutzer sollten lediglich den zuletzt abgeholten Wert erhalten (können).

Install Method

Pre-Compiled binary from GitHub

What git-hash/version of OpenDTU?

foo

Relevant log/trace output

No response

Anything else?

No response

@schlimmchen
Copy link
Member Author

Im Grunde ein Duplikat zu #579.

@SW-Niko
Copy link

SW-Niko commented Mar 18, 2024

Das erklärt auch meine Zeitmessungen (Minimale Back-Time von 3ms). Siehe #760
Sehr gut ....

@spcqike
Copy link

spcqike commented Mar 18, 2024

Das bedeutet ja aber dass der DPL loop() bereits 3ms später wieder an der Stelle stand.

Im forced Update ist ja ein fester wert von 1000ms hinterlegt. Das powermeter wird nur wirklich aktualisiert, wenn die letzte Aktualisierung >1000ms her ist. Sonst wird der bereits bekannte Wert zurückgegeben.

@SW-Niko
Copy link

SW-Niko commented Mar 18, 2024

Ja genau. Ich bin da zufällig darüber gestolpert als ich mich auf die suche nach dem Störenfried für den Puffer Überlauf gemacht habe. Ich kann dir aber nicht sagen wo im Code das passiert. Aber anscheinend nachdem eine Powermeterabfrage wegen Zeitüberschreitung angebrochen wurde.

Hier z. B. in der Funktion void PowerMeterClass::loop()
{
readPowerMeter();
MessageOutput.printf("PowerMeterClass: TotalPower: %5.2f\r\n", getPowerTotal());

....
}

float PowerMeterClass::getPowerTotal(bool forceUpdate)
{
if (forceUpdate) {
CONFIG_T& config = Configuration.get();
if (config.PowerMeter.Enabled
&& (millis() - _lastPowerMeterUpdate) > (1000)) {
readPowerMeter();
}
}
return _powerMeter1Power + _powerMeter2Power + _powerMeter3Power;
}

und forceUpdate ist default auf true

Ergebnis:
Wenn readPowerMeter() kein Ergebnis liefert dann versucht es getPowerTotal() wenige ms danach nochmal.
Und das passt zu meiner Zeitmessung.

Copy link

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new discussion or issue for related concerns.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 18, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants