v0.9.36b23
Pre-release
Pre-release
Bug fixes
- Truncated holding-register responses now rejected on both dongle and Modbus TCP transports (#203). Previously a short-but-valid response silently produced a partial parameter dict, skipping the sticky-parameter merge and blanking entities for the full cache TTL. Short reads now raise inside the retry loop (transient truncation recovers; persistent truncation surfaces as a failed range). pymodbus does not validate response length against the requested count — guard added.
- Positional fallback battery key evicted once the serial becomes readable (#204). A cold-start read with valid electrical data but all-zero serial registers mints a
pos:{N}accumulator key; it is now evicted symmetrically with the{serial}@pos{N}reconciliation when a valid serial reads at that position — previously it persisted forever as a duplicate battery with frozen data. - Cloud-mode schedule getters return real values (#205).
HybridInverter.get_*_schedule()readreg_Nkeys that the cloud API never returns (it returns named HOLD_* params), so cloud-only callers always got 00:00-00:00. The getter now delegates to the named-parameter cloud path; local behavior unchanged. - Link-down probe no longer runs the full combined input read (#205). Degraded polls now issue a single cheap runtime probe instead of all six input-register groups, cutting dead-link poll pressure ~6x. Recovery detection unchanged; energy/battery repopulate on the next healthy cycle.
Maintenance
- Dead-code cleanup (#202): removed two orphaned wall-clock elapsed helpers superseded by the monotonic tracking path, an unwired coordinate obfuscator, and stale comment blocks (−26 lines, zero functional change).
Follow-up tracked in #206.