github jasonacox/pypowerwall v0.19.0
v0.19.0 - Home Assistant Protobuf Compatibility, Wi-Fi Remote Meters, and CLI Temps/Fans

3 hours ago

v0.19.0 - Home Assistant Protobuf Compatibility, Wi-Fi Remote Meters, and CLI Temps/Fans

Highlights

  • Home Assistant protobuf compatibility (#408): pypowerwall can now be loaded in the same Python process as other libraries that compile Tesla's protobufs — e.g. Home Assistant 2026.10's Teslemetry integration (aiopowerwall), tesla-protocol, or googleapis-common-protos. Previously whichever library imported second failed with TypeError: Couldn't build proto file into descriptor pool: duplicate file name tedapi.proto. Every generated module now registers under its own import path (file pypowerwall/tedapi/protobuf/V2024_06/tedapi.proto, package pypowerwall.tedapi.protobuf.V2024_06.tedapi). Also: tedapi_api_version="V2026_06" no longer reports every import failure as "requires protobuf>=6.33.6" — only when the installed protobuf actually is older.
    • Compatibility: no change to the Python API, the wire format, or proxy output. Module paths, message classes, fields, enums and serialized bytes are identical; the 312 messages and 58 enums were compared structurally, and responses were A/B-checked live on two Powerwall 3s. What changes is only the protobuf descriptor metadata (Message.DESCRIPTOR.full_name, DESCRIPTOR.file.name/package, and default-pool lookups by name).
  • Wi-Fi Tesla Remote Meter (#400): remote-meter support now recognises trm_wifi meter configs, so Wi-Fi-connected Tesla Remote Meters get the scaled, located TRM--<din> vitals block and the per-phase solar fallback exactly like trm_mb sites. Remote-meter hierarchy entries gain a Timestamp key. /api/meters/aggregates also holds the last solar reading through short SolarMeterComms dropouts (a Wi-Fi meter misses a packet for 8-28 s every ~5 minutes) instead of dropping solar to 0 and driving LOAD negative, and no longer raises when a power value is None while its voltage source still reports.
  • V2026_06 PVAC fan speeds: extract_fan_speeds() / get_fan_speeds() also read PVAC fan RPMs from esCan.bus.PVAC[].PVAC_Logging, where the Tesla-signed V2026_06 DeviceControllerQuery reports them (its TEMSA filter no longer names PVAC_Fan_Speed_*). The msa path is kept for V2024_06; both are merged, MIA/serial-less entries are skipped, and vitals() no longer raises on a PVAC reporting only one RPM. Output shape unchanged.
  • CLI: python -m pypowerwall get now includes per-device temperatures (pw.temps()) and fan speeds, in the same shapes as the proxy's /temps and /fans (json/text/csv). get and set take -tedapi_api_version and -tedapi_auth_mode — the CLI equivalents of PW_TEDAPI_API_VERSION / PW_TEDAPI_AUTH_MODE. (#406)
  • get_reserve() fix (#406): returns None instead of raising TypeError when /api/operation reports backup_reserve_percent as None (solar-only gateway, no battery).
  • v1r LAN preference (#401): the native API prefers LAN again after v1r WiFi failover recovery — the sticky customer_host is now reset on recovery, under _customer_lock.
  • Robustness: vitals() and /api/meters/aggregates no longer raise when the gateway returns config with meters: null or vin: null (gateway restarted mid re-commissioning, #407); the CLI test tool no longer crashes on explicit JSON nulls and explains a non-running site manager (#404).
  • Docs: AGENTS.md now defines how release version numbers are chosen (SemVer, no breaking changes); CONTRIBUTING.md no longer asks contributors to bump the version in their PR.
  • Tests: new test_tedapi_fan_speeds.py, test_cli_get.py, test_protobuf_namespace.py, and expanded test_tedapi_remote_meter.py.
  • Hardware-validated on 2x Powerwall 3 (firmware 26.34.0, TEDAPI full mode) with a trm_wifi meter as the site's only solar meter: over 701 samples, 28 had zero solar, every one with SolarMeterComms active, and the alert never appeared with non-zero solar.

Why a minor release?

New get output and new get/set options (#406), plus changed protobuf descriptor names (#410) — see the Compatibility note above: no Python API, wire-format, or proxy-output change.

Proxy t105 (10 Oct 2026)

  • Upgraded to pyPowerwall v0.19.0. Proxy-visible changes:
    • /aggregates (/api/meters/aggregates): Wi-Fi Tesla Remote Meter (trm_wifi) sites hold the last solar reading through short SolarMeterComms dropouts instead of dropping solar to 0, and no longer return an error when the gateway reports a voltage but no power for a location.
    • /vitals and /aggregates no longer fail on a gateway restarted mid re-commissioning (config.meters / config.vin null).
    • /fans and /fans/pw report Powerwall 2/+ and solar-inverter PVAC fan speeds under PW_TEDAPI_API_VERSION=V2026_06. get_reserve() no longer crashes on solar-only gateways.
    • v1r with a WiFi fallback host goes back to the wired LAN for the gateway's native API after failover recovery.
    • The library's protobufs are namespaced, so the proxy image's Python environment can also load other Tesla protobuf libraries. Responses are unchanged.

Contributors

Thanks to the community members who made this release possible:

  • @sphen13 — Wi-Fi Tesla Remote Meter support and the SolarMeterComms solar hold, with the 701-sample capture and the production run (#400)
  • @erikgieseler — v1r LAN-preference fix and the cable-pull testing (#401)
  • @Nexarian — V2026_06 PVAC fan speeds, solar-only bearer testing, and the get_reserve() fix (#406)
  • @AndrewTapp — reported the Home Assistant protobuf clash and confirmed the fix on HA 2026.10 (#408)
  • @Bre77 — coordinating from the Teslemetry side (#408)
  • @lbjordan — the clear #407 report
  • @ext2024 and @JohnJ9ml — the #403/#404 reports
  • @jasonacox-sam — cloud set/get work (#405), the v0.19.0 release engineering (#412), and hardware validation across the release

— Sam ⚡

Don't miss a new pypowerwall release

NewReleases is sending notifications on new releases.