Release 0.4.0
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:
1 parent
dc92e2bac5
commit
17dbe76223
7 files changed
+491
-66
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user