🔬 Measured statusCodes bit map, hvac_action, robustness fixes
Built on a fully instrumented test session plus the issue #6 community research (thanks @DrNiKa, @MrVa55).
Xenio statusCodes is a bit field
| Bit | Meaning | Evidence |
|---|---|---|
| 1 | safety circuit / door open | 2 devices |
| 5 | target reached / maintaining | 2 devices |
| 8 | heating demand (stays set through thermostat pauses) | 3 devices |
| 11 | cabin light | reversible toggle |
| 17 / 18 | session active / stopped | measured transitions |
The Status codes sensor now exposes these as attributes (door_open, heat_demand, light, …, unknown_bits, raw_hex) plus the decoded device-held timed_start schedule (read-only; writing comes in v2.9).
Fixes & improvements
- Door (Xenio): bit-1 mask replaces the inherited "2nd digit == 9" rule, which misses door events on some baselines.
hvac_actionon the climate entity:heating/idle/offfrom measured bit semantics (Fenix:heatOnfallback).- Session duration steps by 60 min and preset durations floor to whole hours — the heater normalises
onTimeto full hours anyway (measured), and odd values break the MyHarvia app editor. - Last-session energy no longer stays
unknownwhen a session starts shortly after a reload. - Energy prefers the heater's reported
heaterPowerwhen available. - 30 s HTTP timeout on all cloud requests (was aiohttp's 300 s default).
No new entities, no translation changes.