v0.9.36b15
Pre-releaseFixed
A dropped bms_data read no longer publishes a degraded battery bank (eg4_web_monitor#261)
The combined (read_all_input_data) and chunked (read_battery) reads fetch register groups as separate Modbus requests. When only the bms_data group (regs 80–112, including reg 96 battery_parallel_count) dropped or returned a short/misrouted frame — common on a flaky WiFi‑dongle link — reg 96 defaulted to 0 while the valid power‑group voltage kept the parser from short‑circuiting to None, so it built a half‑empty bank that overwrote the last‑good _transport_battery cache and flickered battery‑bank sensors to unavailable. Both reads now track bms_ok (false on a failed or short bms_data read) and return battery=None in that case, so callers preserve the last‑good cache. A genuine reg 96 = 0 on a successful full read still builds a bank.
>4 batteries now accumulate reliably regardless of battery_parallel_count (eg4_web_monitor#170, eg4_web_monitor#258)
Inverters expose individual battery data through 4 fixed Modbus input‑register slots (5002–5121) and rotate >4 physical batteries through them over successive reads. The old accumulator keyed on slot position and trusted Modbus register 96, which is unreliable on parallel systems (it read 12 for a 6‑battery bank in #170) — wiping the accumulator on any reg‑96 change and rejecting rotated‑in batteries. Accumulation now keys on the battery serial (the only identity stable across rotation), ignores reg 96 entirely for gating/clearing/counting, and never evicts, so a battery latches permanently once it rotates into view. A present‑but‑truncated serial read is skipped for that poll so partial reads cannot mint phantom batteries.
Hybrid keeps cloud‑only batteries fresh instead of frozen (eg4_web_monitor#258)
Some firmware pins ≤4 batteries to the 4 Modbus slots and never rotates the rest into view (header register 5001 stays 0), so with a healthy local transport the local read path never surfaces the extra battery and its cloud snapshot went stale. A dedicated supplemental cloud‑battery refresh (its own TTL gate, hybrid‑only) now keeps those cloud‑only batteries current.
The earlier "read all reported slots in one go for dedicated‑slot banks" approach was reverted: issue #170 (a 12‑battery local‑only system surfacing all 12 through the 4‑slot rotating read, with empty 5th/6th‑slot probes) confirms there is no readable 5th slot — sizing the read by reg 96 only issues >125‑register reads the dongle can't honor. Rotating banks are handled by serial‑keyed accumulation; non‑rotating firmware by the hybrid cloud refresh above.
Full Changelog: https://github.com/joyfulhouse/pylxpweb/blob/feat/battery-control-mode/CHANGELOG.md