Repository navigation
PeakFilter: moderate Vorwärtssprünge glätten statt sprunghaft übernehmen - #4235
Open
seaspotter wants to merge 2 commits into
Open
seaspotter wants to merge 2 commits into
seaspotter wants to merge 2 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#4231: ~0.5 kWh/Tag "Phantom"-PV-Ertrag nachts (Kostal Plenticore G3M, Hybrid-WR). Anhand des Logs (07:10 Uhr) lässt sich der Mechanismus exakt nachvollziehen:
Der Register-Stand des WR springt real um 100Wh (das Gerät aktualisiert seinen Ertragszähler nicht kontinuierlich, sondern in groben Schritten), auch wenn aktuell nachts 0W erzeugt werden.
PeakFilter.check_total_energy()verwirft diesen Sprung genau einen Zyklus lang, merkt sich aber den rohen (abgelehnten) Wert als neue Vergleichsbasis - im nächsten Zyklus ist die Differenz zu dieser Basis dann 0, der volle Sprung wird also sofort und ungebremst übernommen. Das erzeugt einen sichtbaren Peak im Tages-/Langzeit-Ertrag genau in diesem einen 10s-Intervall, obwohl real keine Leistung geflossen ist.Das ist eng verwandt mit, aber unabhängig von #3767 (Hybrid-WR liefert PV- statt WR-Leistung) - die dortige Korrektur greift hier korrekt, das Problem liegt in der Plausibilitätsprüfung selbst.
Fix:
check_total_energy()s Vorwärtssprung-Zweig begrenzt den Wert jetzt aufvorheriger Wert + allowed_deviationstatt ihn einen Zyklus lang komplett zu verwerfen, und merkt sich diesen begrenzten Wert als neue Basis. Dadurch wird ein grober, aber realer Registersprung über mehrere Zyklen gleichmäßig nachgezogen statt in einem Schritt sichtbar zu werden - und zwar für alle PeakFilter-Nutzer (Zähler, Wechselrichter, Speicher, Verbraucher), nicht nur für Hybrid-Wechselrichter.Wo das zum Problem werden könnte - und wie das begrenzt ist:
PeakFilter kann aus den Werten allein nicht unterscheiden, ob ein Sprung ein grober Zähler-/Register-Takt ist (soll geglättet werden) oder eine längere Verbindungsunterbrechung mit echtem, großem Nachholbedarf (z. B. Gerät 10+ Minuten nicht erreichbar, danach Sprung um mehrere hundert Wh) - vorher wurde so ein Sprung nach einer Bestätigung im nächsten Zyklus sofort korrekt übernommen. Würde man jede Art von Sprung glätten, würde die Anzeige nach einer solchen Unterbrechung unnötig lange zu niedrig bleiben, proportional zur Länge der Unterbrechung.
Deshalb wird nur geglättet, wenn der Sprung höchstens das 10-fache der erlaubten Differenz beträgt (
MAX_SMOOTHABLE_JUMP_FACTOR). Das deckt einen groben Zähler-Takt mit Puffer ab; deutlich größere Sprünge (typisch für eine längere Unterbrechung) werden weiterhin wie bisher einmal verworfen und bei Bestätigung sofort in voller Höhe übernommen.