v0.3.0
New Features
- Heating curve for outdoor temperature compensation (#76) — Dynamically calculates supply target temperature based on outdoor conditions using two-point linear interpolation. When an outdoor temperature sensor is configured, the system adjusts the supply target between warm and cold design points instead of using a fixed value. Includes a new controller-level supply target sensor entity.
- Heat accounting with supply temperature normalization (#64) — Zones now accumulate quota weighted by actual heat delivery via a supply coefficient. When supply temperature is below target, zones consume quota slower and stay open longer. Includes a new supply coefficient sensor per zone and a flow binary sensor per zone. Configurable via a new "Heat Accounting" options flow step.
- Quickstart guide (#68) — New task-oriented guide (
docs/quickstart.md) walking users from installation to a working first zone.
Bug Fixes
- Fix crash on config entry unload after in-place config reload (#65) — Stale listener callbacks caused
ValueError: list.remove(x): x not in liston entry unload. Fixed by adding a dedicatedshutdown()method registered once during setup. - Fix flaky test due to EMA floating-point precision (#81, #86) — Use
pytest.approx()for float assertions where values pass through EMA smoothing.
Improvements
- PID error icons changed to plus/minus (#66) — Replaced chevron icons (too similar to check icon) with
mdi:thermometer-plus(cold) andmdi:thermometer-minus(warm). - Zone diagnostic entities hidden from dashboards — Zone sensors and binary sensors now have
entity_registry_visible_default = False. Mode select and flush switch remain visible. - Entity recreation on config change — Changing supply temp, outdoor temp, or DHW entity in config now triggers a
full reload to recreate affected entities.
Refactoring / Internal
- Storage format V2 (#78) — Coordinator state restructured with controller data nested under a
controllerkey. PID keys renamed for consistency. Includes automatic V1 → V2 migration. - Entity declarations refactored to description-based patterns (#77) — All entity metadata and behavior defined in entity descriptions with generic entity classes using callbacks.
- PIDState fields renamed (#82) —
p_term→proportional,i_term→integral,d_term→derivative. - TimingParams renamed to TimingConfig throughout codebase.
- Test reorganization (#63) — Moved pure controller/zone tests from
integration/tounit/.
Full Changelog: v0.2.1...v0.3.0