v0.19.0 - Home Assistant Protobuf Compatibility, Wi-Fi Remote Meters, and CLI Temps/Fans
- PyPI: https://pypi.org/project/pypowerwall/0.19.0/
- Proxy Docker image:
jasonacox/pypowerwall:0.19.0t105(also published aslatest)
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, orgoogleapis-common-protos. Previously whichever library imported second failed withTypeError: Couldn't build proto file into descriptor pool: duplicate file name tedapi.proto. Every generated module now registers under its own import path (filepypowerwall/tedapi/protobuf/V2024_06/tedapi.proto, packagepypowerwall.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).
- 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 (
- Wi-Fi Tesla Remote Meter (#400): remote-meter support now recognises
trm_wifimeter configs, so Wi-Fi-connected Tesla Remote Meters get the scaled, locatedTRM--<din>vitals block and the per-phase solar fallback exactly liketrm_mbsites. Remote-meter hierarchy entries gain aTimestampkey./api/meters/aggregatesalso holds the last solar reading through shortSolarMeterCommsdropouts (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 isNonewhile its voltage source still reports. - V2026_06 PVAC fan speeds:
extract_fan_speeds()/get_fan_speeds()also read PVAC fan RPMs fromesCan.bus.PVAC[].PVAC_Logging, where the Tesla-signed V2026_06 DeviceControllerQuery reports them (its TEMSA filter no longer namesPVAC_Fan_Speed_*). Themsapath is kept for V2024_06; both are merged, MIA/serial-less entries are skipped, andvitals()no longer raises on a PVAC reporting only one RPM. Output shape unchanged. - CLI:
python -m pypowerwall getnow includes per-device temperatures (pw.temps()) and fan speeds, in the same shapes as the proxy's/tempsand/fans(json/text/csv).getandsettake-tedapi_api_versionand-tedapi_auth_mode— the CLI equivalents ofPW_TEDAPI_API_VERSION/PW_TEDAPI_AUTH_MODE. (#406) get_reserve()fix (#406): returnsNoneinstead of raisingTypeErrorwhen/api/operationreportsbackup_reserve_percentasNone(solar-only gateway, no battery).- v1r LAN preference (#401): the native API prefers LAN again after v1r WiFi failover recovery — the sticky
customer_hostis now reset on recovery, under_customer_lock. - Robustness:
vitals()and/api/meters/aggregatesno longer raise when the gateway returns config withmeters: nullorvin: null(gateway restarted mid re-commissioning, #407); the CLI test tool no longer crashes on explicit JSONnulls 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 expandedtest_tedapi_remote_meter.py. - Hardware-validated on 2x Powerwall 3 (firmware 26.34.0, TEDAPI full mode) with a
trm_wifimeter as the site's only solar meter: over 701 samples, 28 had zero solar, every one withSolarMeterCommsactive, 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 shortSolarMeterCommsdropouts instead of dropping solar to 0, and no longer return an error when the gateway reports a voltage but no power for a location./vitalsand/aggregatesno longer fail on a gateway restarted mid re-commissioning (config.meters/config.vinnull)./fansand/fans/pwreport Powerwall 2/+ and solar-inverter PVAC fan speeds underPW_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/getwork (#405), the v0.19.0 release engineering (#412), and hardware validation across the release
— Sam ⚡