Repository navigation
Peak Shaving: Zähler-Ausreißer und Lücken verderben das Fenster nicht mehr (Review B2, B11, B17) - #81
Merged
Conversation
Ein Energiezaehler, der kurz 0 oder weniger meldet (HA-Neustart, Template mit float(0)), und danach wieder den echten Stand, wurde als Bezug gezaehlt: das Fenster, die Monatsspitze und Follow the Peak bekamen absurde Werte. - core/peak/meter.go: ein Stand unter dem letzten wird erst Basis, wenn der naechste Wert ihn bestaetigt (echter Reset bleibt richtig). Kommt der alte Stand zurueck, war es ein Ausreisser; was die Netzleistung dazwischen gezaehlt hat, zaehlt der Zaehlerschritt nicht doppelt. Ein Schritt ueber 100 kW gilt als keine Messung (Netzleistung zaehlt, neue Basis). - core/site_peakshaving.go: eine 0 des Energiesensors ist wie beim Netzzaehler kein Messwert (nonZeroEnergy); Lesefehler einmal je Ursache als Warnung, danach Debug, die Rueckkehr einmal als Info; Ausreisser des Zaehlers einmal als Warnung. - Tests: TestMeterCounterGlitch, TestPeakWindowSources erweitert, TestPeakEnergyReadLoggedOnce. Kein Hook. README Abschnitt Peak Shaving. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Eine Lücke von mehr als 2 Minuten mitten im Fenster wurde bei Quelle Netzleistung oder bei einem Quellwechsel mit der Leistung danach hochgerechnet: nach 8 Minuten bei 9 kW und danach 500 W ging das Fenster mit einem viel zu kleinen Mittel in Statistik, Tarif und Follow the Peak. - core/peak/meter.go: die Lücke zählt am Limit, wie die README es für den Fensteranfang beschreibt; ein solches Fenster wird nicht als Completed geführt. Mit demselben Zähler vor und nach der Lücke bleibt die Zählerdifferenz maßgeblich. - Tests: TestMeterUnmetered erweitert (Netzleistung, Quellwechsel, Zähler). Kein Hook. README Abschnitt Peak Shaving. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Entlud der Akku, während das Netz einspeiste (z. B. Netzentladung), zählte die volle Entladeleistung als Bedarf ohne Akku, obwohl der Haushalt davon nichts bezogen hätte. Betroffen war nur die Statistik (Monats-Demand, Kosten ohne Akku, Ersparnis im Leistungstarif), nicht die Regelung. - core/peak/meter.go: demand = max(0, drawn + (Akkuleistung + min(0, Netzleistung)) * dt). Mit Zählerquelle eine Näherung, der Importzähler kennt die Einspeisung nicht. - Test: TestMeterCompleted um Fenster mit Einspeisung und Entladung erweitert. Kein Hook. README Abschnitt Peak Shaving. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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.
Behebt B2 (kritisch mit Follow the Peak), B11 und B17 aus dem Architektur-Review (Paket P3, Entscheidung D4).
B2: Ein Rücksprung oder eine 0 des Energiezählers (z. B. HA-Template mit
float(0)beim HA-Neustart – live so konfiguriert) wurde beim nächsten echten Wert voll als Bezug gezählt: Reserve weg, Monatsspitze verdorben, Follow the Peak hob das Limit bis Monatsende. Jetzt bleibt beid < 0die alte Basis, ein kleinerer Stand gilt erst nach Bestätigung (echter Reset bleibt richtig), und eine 0 der Energie-Entität gilt wie evccsnonZeroEnergyals Lesefehler (einmal je Ursache geloggt). Abweichung vom Konzept: die vorgeschlagene Plausibilitätsgrenze2 × (powerWs + unmovedWs) + staleWsist nicht eingebaut – sie verwarf echte Zählerschritte (z. B. Wallbox schaltet im Intervall ab) und widersprach bestehenden Tests.B11: Eine Lücke im selben Fenster ohne Energiezähler (oder bei Quellwechsel) wird am Limit gezählt, das Fenster gilt nicht als vollständig gemessen.
B17: Der Bedarf ohne Akku zählt Einspeisung nicht mehr als Bedarf (nur Statistik).
Tests:
TestMeterCounterGlitch(0 und Rücksprung, je mit Rückkehr),TestPeakWindowSources,TestMeterUnmetered,TestMeterCompletederweitert.wsltest.sh ./core/peak/ ./core/grün.Code-Review (Opus, mittel): keine Funde mittel oder höher. Offen (niedrig): die Prüfung misst nur den letzten Zyklus statt der Zeit seit der letzten Zählerbewegung; die Warnung bei Ausreißern ist nicht gedrosselt.
Für das Add-on (CHANGELOG): Peak Shaving: ein kurzer 0-Wert oder Rücksprung des Energiezählers (z. B. beim HA-Neustart) verdirbt das 15-min-Fenster, die Monatsspitze und Follow the Peak nicht mehr.
Überschneidung mit P4 und P5 in
core/site_peakshaving.go(andere Funktionen). Merge-Reihenfolge: P1 → P2 → P3 → …🤖 Generated with Claude Code