Skip to content

Peak Shaving: Zähler-Ausreißer und Lücken verderben das Fenster nicht mehr (Review B2, B11, B17) - #81

Merged
SolarPower2024 merged 3 commits into
load-peak-featuresfrom
review/peak-zaehler
Oct 12, 2026
Merged

SolarPower2024 merged 3 commits into
load-peak-featuresfrom
review/peak-zaehler

Conversation

@SolarPower2024

Copy link
Copy Markdown
Owner

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 bei d < 0 die alte Basis, ein kleinerer Stand gilt erst nach Bestätigung (echter Reset bleibt richtig), und eine 0 der Energie-Entität gilt wie evccs nonZeroEnergy als Lesefehler (einmal je Ursache geloggt). Abweichung vom Konzept: die vorgeschlagene Plausibilitätsgrenze 2 × (powerWs + unmovedWs) + staleWs ist 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, TestMeterCompleted erweitert. 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

SolarPower2024 and others added 3 commits October 11, 2026 21:50
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>
@SolarPower2024
SolarPower2024 merged commit 4a9d1c4 into load-peak-features Oct 12, 2026
6 checks passed
@SolarPower2024
SolarPower2024 deleted the review/peak-zaehler branch October 12, 2026 16:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant