Skip to content

Tesla-Zähler: Fallback bei HTTP 404 von /api/meters/site wiederherstellen (Regression aus #3232) - #4105

Merged
LKuemmel merged 1 commit into
openWB:masterfrom
matmoers:fix/tesla-counter-pw3-meters-site-404
Oct 14, 2026
Merged

LKuemmel merged 1 commit into
openWB:masterfrom
matmoers:fix/tesla-counter-pw3-meters-site-404

Conversation

@matmoers

Copy link
Copy Markdown
Contributor

Problem

Eine Powerwall 3 mit Backup Gateway 2 (Firmware 26.26.4-m 80f5af19) stellt /api/meters/site
nicht mehr bereit:

GET /api/meters/aggregates  -> 200, "site" enthält instant_power, energy_imported, energy_exported
GET /api/meters/site        -> 404

(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

  • Ein 404 auf /api/meters/site löst wieder den bestehenden Fallback aus (Leistung, Bezug
    und Einspeisung aus aggregates).
  • Nach dem ersten 404 wird der Endpunkt für die Lebensdauer der Komponente nicht erneut
    abgefragt. Das wird einmalig auf Info-Level geloggt.
  • Anders als der Code vor Fix Tesla/Powerwall data handling and improve robustness of control loop #3232 wird nur ein 404 als "Endpunkt nicht vorhanden"
    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

  • Neuer Test: 404 auf /api/meters/site führt zu Zählerwerten aus aggregates, der Endpunkt
    wird über zwei Update-Zyklen nur einmal abgefragt.
  • Neuer Test: 500 auf /api/meters/site lässt die Komponente weiterhin fehlschlagen.
  • Der 404-Test schlägt auf dem aktuellen master fehl und läuft mit dieser Änderung durch.
    Alle Tesla-Tests laufen, flake8 ist sauber.

Das API-Verhalten wurde an der realen Anlage per curl geprüft.

…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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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
LKuemmel merged commit 11438b0 into openWB:master Oct 14, 2026
1 check passed
@matmoers
matmoers deleted the fix/tesla-counter-pw3-meters-site-404 branch October 14, 2026 12:36
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.

3 participants