Release 0.4.0
Tests / tests (requirements-test-latest.txt) (push) Successful in 1m45s
Tests / tests (requirements-test.txt) (push) Successful in 1m42s

Zones, electrical heat sources, windows with ventilation, wind exposure
and recovery, and exchange between adjacent zones, all observational.
docs/MODEL.md documents the equations, units, coefficient meanings,
priors and bounds, learning conditions, forecast assumptions, validation
method and results, and limitations. README gains a configuration guide
for zones, heat sources and windows, the new diagnostics and the
accuracy comparison against the base model. CHANGELOG has upgrade notes
(config entry version 3, rollback needs the backup, renamed Status
attributes). ROADMAP marks the Milestone 2 items now covered; AUDIT
records the design decisions and evidence. AGENTS.md lists the new
modules and the convention that new model terms start at zero and must
beat the base model out of sample before being relied on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
buzeraandClaude Opus 5.5 committed 2026-10-27 03:02:21 +02:00
1 parent dc92e2bac5
commit 17dbe76223
7 files changed
+491 -66

No files matched your search

+73
View File
@@ -2,6 +2,79 @@
Engineering findings and test evidence behind each change are in [AUDIT.md](AUDIT.md).
## 0.4.0 — 2026-10-27
Thermal zones, electrical heat sources, windows with ventilation and wind, and
heat exchange between zones (Milestone 2, first part). Still **observation-only**:
no new service calls, the boiler and thermostat are untouched. Tested in the Home
Assistant Core harness with HA 2025.12.0 and 2026.2.3; not yet on HAOS.
### Upgrade notes
- **Back up Home Assistant first.** The config entry moves to version 3: each room
sensor becomes a one-sensor **zone** with its comfort weight, and the sensor's
entity ID stays the zone's key, so learned models, forecast entities and
accuracy statistics carry over unchanged. No model reset is needed.
- **Downgrading needs the backup.** Older versions refuse a version 3 entry.
- Configure no longer asks for room sensors or weights; manage zones with **Add
zone** and each zone's edit button on the integration page.
- Status attributes renamed: `input_quality.rooms` → `input_quality.zones` (each
zone lists its sensors), `excluded_rooms` → `excluded_zones`,
`retired_room_models` → `retired_zone_models`. The Forecast Error attribute
`rooms` is now `zones`, keyed by zone name. The `invalid_weights` status is gone
(invalid stored weights fall back to 1.0). Update templates that used these.
- New layers start with no assumed effect and need data: the electrical term needs
gaming sessions (or other load changes), the ventilation terms need window
openings. Watch `improvement_vs_base` on the Forecast Error sensors before
relying on them; switch off optional terms that do not help.
### Added
- **Zones** (config subentries): name, several sensors with sensor weights, comfort
weight, target offset and adjacent zones. Sensor and comfort weights never change
learned thermal coefficients.
- **Heat sources**: active power (W/kW; VA and % rejected), zone, heat fraction,
automatic 24-hour baseline or manual value, "included in" another source (no
double counting), thermal response time, enable/disable.
- **Windows**: contact sensor (optional inverted polarity; unknown stays unknown),
zone, facing direction (default 345°), opening factor, enable/disable; a bounded
log of ventilation events.
- **Wind direction** and **wind gust** weather sources with priorities and fallback;
knots and ft/s accepted.
- Model options: electrical-heat forecast half-life, assumed open-window time,
recovery time constant, and wind / gust / cross-ventilation terms.
- Per-zone diagnostics on each zone's forecast entity: current temperature,
+15/+30/+60/+120-minute forecast, contributions in °C/h, coefficients with
confidence; Status lists heat sources, windows, ventilation and recent events.
- Forecast Error sensors: `base_model_mae` and `improvement_vs_base`.
- Poll outcomes `sensors_changed` and `ventilation`, with English and Romanian names.
### Changed
- Each zone's model is layered: the unchanged base model (fallback and
comparison), an extended layer with electrical heat and neighbours, and a
separate ventilation layer. Zones with an open, unknown or recovering window are
kept out of base and extended learning.
- Forecasts simulate all zones together, with electrical heat fading to baseline
and open windows closing after the configured time; the plan search uses an exact
compiled step and stays fast at 180 minutes.
- Accuracy scoring replays all zones with the actual relay, electrical heat and
window history, and scores the base model on the same spans.
### Persisted data
- Model payload `schema_version` stays 2 with optional new keys: `zone_models`,
`ventilation_models`, `heat_sources` (baseline samples) and `ventilation`
(events). Forecast statistics gain a base-model column; 0.3 statistics load.
### Development
- New pure modules: `learning.py` (named-feature RLS), `zones.py`, `heat_sources.py`,
`windows.py`, `zone_model.py`; [docs/MODEL.md](docs/MODEL.md) documents the model.
- Synthetic-apartment tests for gaming heat, ventilation with wind and recovery,
and coupled rooms, each checking recovered coefficients and out-of-sample
improvement over the base model.
## 0.3.0 — 2026-10-26
First part of Milestone 1: the integration now measures how accurate its thermal