Repository navigation
Fix tariff: fehlender Backoff bei erfolglosem Abruf beheben - #4095
Merged
Merged
Conversation
…penWB#3703) next_query_time wurde bisher nur neu gesetzt, wenn ein Abruf tatsächlich neuere Preise lieferte. Hatte ein Anbieter die Preise für den Folgetag noch nicht veröffentlicht (der normale Fall für mehrere Stunden am Tag), blieb next_query_time auf dem alten, bereits abgelaufenen Wert stehen - jeder folgende Regelzyklus (alle ~10s) hat dadurch sofort erneut abgefragt statt zu warten. Betrifft alle Tarif-Anbieter gleichermaßen, da sie dieselbe ConfigurableFlexibleTariff/ConfigurableGridFee-Basis nutzen. Zweiter, unabhängiger Bug beim Testen gefunden: SingleComponentUpdateContext ohne reraise=True hat die Exception im Fehlerfall schon in __exit__ verschluckt, bevor der except-Block in update() next_query_time neu setzen konnte - der Exception-Pfad war faktisch toter Code. - next_query_time wird jetzt auch bei "keine neuen Preise" und bei einer Exception auf einen 20-Minuten-Backoff gesetzt statt unverändert zu bleiben - reraise=True ergänzt, damit der except-Block tatsächlich erreicht wird (fault_state wurde unabhängig davon schon vorher korrekt aus der Exception gesetzt) - echte Warnung, wenn 2h nach der ersten konfigurierten Update-Stunde immer noch keine Preise für den Folgetag vorliegen, statt weiterhin "Kein Fehler" anzuzeigen
- fault_state wurde nach einer gesetzten Warnung/Fehler im selben Durchlauf durch ein abschließendes no_error() sofort wieder überschrieben - jetzt einziger Ort (__finalize_update_status), der den Status setzt - Exception im component_initializer (Konstruktor) wurde bisher stillschweigend verschluckt, _component_updater blieb dauerhaft ungesetzt, ohne jede Fehlermeldung - Backoff nach Exception vereinheitlicht auf die ursprünglich vorgesehenen 5 Minuten (vorher totes "retry in 5 minutes", siehe Historie zu openWB#3703)
tpd-opitz
reviewed
Oct 13, 2026
Co-authored-by: Thomas Papendieck <14850347+tpd-opitz@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Failed reconfiguration can retain the old provider, and the warning threshold is incorrect across DST transitions.
2 open findings
What changed in this PR
Adds consistent retry backoff and preserves tariff-provider fault states.
Changes:
- Adds five-minute backoff for failed or unchanged responses.
- Preserves errors and warns when next-day prices remain unavailable.
- Adds regression tests for retry and fault-state behavior.
| File | Description |
|---|---|
packages/modules/common/configurable_tariff.py |
Implements backoff and status handling. |
packages/modules/common/configurable_tariff_test.py |
Tests the new behavior. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| self.fault_state.store_error() | ||
| with SingleComponentUpdateContext(self.fault_state): | ||
| # reraise=True, sonst bleibt _component_updater bei einer Exception dauerhaft ungesetzt | ||
| with SingleComponentUpdateContext(self.fault_state, reraise=True): |
| warning_hour = min(self.tariff_update_hours) + LATE_WARNING_OFFSET_HOURS | ||
| if now.hour < warning_hour: | ||
| return False | ||
| tomorrow_start = int(now.replace(hour=0, minute=0, second=0, microsecond=0).timestamp()) + 24*ONE_HOUR_SECONDS |
LKuemmel
approved these changes
Oct 14, 2026
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 #3703:
next_query_timewurde nur bei neuen Preisen weitergesetzt. Lieferte ein Anbieter (noch) keine neuen Preise - z.B. weil die Folgetagspreise noch nicht veröffentlicht sind, der normale Fall für mehrere Stunden am Tag - wurde jeden Regelzyklus (~10s) neu abgefragt. Betrifft alle Tarif-/Netzentgelt-Anbieter gleichermaßen.Beim genaueren Hinsehen zwei weitere Bugs in derselben Datei gefunden und mitgefixt:
fault_statewurde am Ende jedes Durchlaufs durch ein unbedingtesno_error()überschrieben, auch wenn kurz zuvor ein Fehler/eine Warnung gesetzt wurde.Backoff nach einem erfolglosen Abruf (egal ob keine neuen Preise oder Exception) ist jetzt einheitlich 5 Minuten. Und wenn 2 Stunden nach 14 Uhr keine Daten vorhanden sind, eine Warnung ausgegeben.