Repository navigation
Tesla-Zähler: Fallback bei HTTP 404 von /api/meters/site wiederherstellen (Regression aus #3232) - #4105
Merged
LKuemmel merged 1 commit intoOct 14, 2026
Conversation
…llen Eine Powerwall 3 mit Backup Gateway 2 stellt /api/meters/site nicht mehr bereit und antwortet mit HTTP 404. Bis einschließlich 2.2.3 hat der Zähler bei dieser Abfrage HTTPError abgefangen und auf die Gesamtwerte aus /api/meters/aggregates zurückgegriffen. Beim Umbau in openWB#3232 ist HTTPError aus der except-Klausel entfallen. Der 404, den der raise_for_status()-Hook der Session auslöst, setzt dadurch die gesamte Zähler-Komponente auf Fehler, obwohl Leistung, Bezug und Einspeisung in aggregates verfügbar sind. Ein 404 auf /api/meters/site wird jetzt als "Endpunkt nicht vorhanden" behandelt: Es werden die Gesamtwerte aus aggregates verwendet, und der Endpunkt wird für die Lebensdauer der Komponente nicht erneut abgefragt. Andere HTTP-Fehler (z. B. 500 oder 401/403, die device.py für die erneute Anmeldung nutzt) werden weiterhin ausgelöst.
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
401/403 errors are swallowed before re-authentication, and the 500 test does not verify the component fault state.
0 open findings
What changed in this PR
Restores Tesla counter fallback behavior when /api/meters/site returns HTTP 404.
Changes:
- Uses aggregate values after a 404 and avoids repeated endpoint requests.
- Adds tests for 404 fallback and non-404 errors.
| File | Summary |
|---|---|
packages/modules/devices/tesla/tesla/counter.py |
Implements cached 404 fallback behavior. |
packages/modules/devices/tesla/tesla/tesla_test.py |
Tests fallback and HTTP error handling. |
🧠 Review effort: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
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.
Problem
Eine Powerwall 3 mit Backup Gateway 2 (Firmware 26.26.4-m 80f5af19) stellt /api/meters/site
nicht mehr bereit:
(die Anlage war ursprünglich eine Powerwall 2, die im Rahmen eines Rückrufs durch eine
Powerwall 3 ersetzt wurde. Das Backup Gateway 2 blieb erhalten.)
Bis einschließlich 2.2.3 hat der Zähler bei dieser Abfrage KeyError und HTTPError abgefangen
und auf die Gesamtwerte aus aggregates zurückgegriffen. Beim Umbau in #3232 wurde die
except-Klausel zu KeyError, IndexError, TypeError und ValueError, HTTPError ist dabei
entfallen.
Da die HTTP-Session bei jeder Antwort raise_for_status() aufruft, kommt der 404 als
HTTPError an, umgeht den Fallback und setzt die gesamte Zähler-Komponente auf Fehler
("HTTP 404: Client-Fehler. Überprüfe die Konfiguration."), obwohl Leistung, Bezug und
Einspeisung verfügbar sind. PV- und Speicher-Komponente desselben Geräts sind nicht
betroffen.
Auch aggregates liefert bei dieser Anlage keine Phasenwerte (Phasenströme 0,
Phasen-Zeitstempel 0001-01-01, Frequenz 0). Der Fallback auf die Gesamtwerte ist damit
das Maximum, das die lokale API hergibt.
Änderung
und Einspeisung aus aggregates).
abgefragt. Das wird einmalig auf Info-Level geloggt.
behandelt. Andere HTTP-Fehler (z. B. 500 oder 401/403, die device.py für die erneute
Anmeldung nutzt) werden weiterhin ausgelöst und nicht stillschweigend verschluckt.
Tests
wird über zwei Update-Zyklen nur einmal abgefragt.
Alle Tesla-Tests laufen, flake8 ist sauber.
Das API-Verhalten wurde an der realen Anlage per curl geprüft.