One fix: the second gap from #454 — a stalled TEDAPI gateway now shows up as gaps instead of frozen values.
- fix(tedapi): when a TEDAPI read times out waiting for its API lock, cached data is served only while it is younger than
max(10 × the cache expiry, 60 s)— one minute with default settings. Older data returnsNone, the documented failure value. A gateway that stalls while holding a TEDAPI lock no longer keeps every read (includingversion()) answering from an old cache that looks healthy forever, so the proxy's TEDAPI probe can see the stall and run recovery on its own. This is a behavior change — during a sustained stall, pollers see gaps instead of frozen values after about a minute — hence the MINOR version bump. (#468; closes the second gap in #454) - Library version bumped to
0.24.0(#469). - Not changed: basic Wi-Fi and bearer retries keep their 5 retries by design (#394), so weak links are ridden out — a long retry chain now surfaces as a slow read rather than a hidden wedge.
Validated on live hardware: 2× Powerwall 3 with a Backup Gateway 2 (no expansion packs). A silent firewall DROP rule against the gateway reached the lock-timeout path: the cache was served for about a minute, then endpoints returned null, and the proxy recovered on its own 61 seconds after the route was restored — no restart needed. Unit tests: 1369 passed.
Proxy image: jasonacox/pypowerwall:0.24.0t113 (amd64 and arm) — upgraded to pyPowerwall v0.24.0 (#470). pypowerwall-server 0.15.0 pins this release.
Install: pip install --upgrade pypowerwall==0.24.0 — PyPI
Contributors
Thanks to the community members who made this release possible:
- @llamakarma — the detailed lockup report in #454 (timeline, logs, diagnosis) that turned a 2-hour outage into a traceable failure chain.
- @wit3 (Salvatore Scalzi) — the mock-based trace of the API-lock path that split the report into three concrete gaps; this release closes the second one.
- @jasonacox — the fix and release engineering (#468, #469, #470).
- @jasonacox-sam (Sam) — hardware stall tests on the Powerwall 3s; the silent-DROP re-run proved the lock-timeout path works end to end.