v0.4.0
New Features
- Zone counting sensors and controller-level heat request (#90) — Three new controller-level sensors (
zones_flowing,zones_heating,zones_window) provide granular visibility into zone states. The heat request signal has been moved from a per-zone dictionary to a single controller-level binary sensor. - Zone
heatstate (#90) — NewZoneState.heatboolean derived from flow AND supply coefficient > 10%, with a correspondingremaining_durationproperty for tracking remaining zone run time. - Deferred controller initialization (#91) — The controller now stays in
INITIALIZINGuntil all watched entities (valves, DHW, heat request, supply/outdoor temp sensors) report valid state, preventing commands from being issued to entities that haven't reported in yet. After a 120-second timeout, it logs a warning and proceeds regardless. - Zone remaining duration sensor (#96) — New per-zone sensor displaying the remaining time (in seconds) for the current zone operation. Uses Home Assistant's duration device class for proper formatting.
Bug Fixes
- Preserve supply target temp during initialization (#97) — When the outdoor sensor hasn't reported yet during
INITIALIZING, the controller no longer overwrites the supply target temperature restored from saved state with the static config default. The outdoor temp update is now skipped when the value isNoneduring initialization.
Breaking Changes
Entity IDs change for existing installations (#90):
binary_sensor.*_blocked→binary_sensor.*_windowbinary_sensor.*_heat_request(zone-level) →binary_sensor.*_heatsensor.*_requesting_zones→sensor.*_zones_flowing(+ newzones_heating,zones_window)- New:
binary_sensor.*_heat_request(now at controller level)
Automations or dashboards referencing old entity IDs will need updating.
Refactoring / Internal
- Weather compensation documented in README (#89) — Added heating curve / outdoor temperature compensation to the comparison table, key differentiators, and requirements sections.
- Controller status and init tracking moved to controller (#92) —
ControllerStatusandinit_started_atmoved from coordinator toControllerState. Newupdate_status()method onHeatingControllerhandles zone status aggregation and init timeout. Coordinator reduced to a thin delegation layer. - Remaining coordinator business logic moved to controller (#94) — Fail-safe zone detection, DHW transition handling, and observation period transitions all moved from coordinator to
HeatingController. Includes storage migration V2 → V3 forlast_force_updatetracking. - Remove unused
valve_on_sincefield — Cleaned up unusedvalve_on_sincefield fromZoneState.
Full Changelog: v0.3.1...v0.4.0