Learn the overrun in °C and pre-start before a schedule step #16
Loading…
Reference in a new issue
No description provided.
Delete branch "overrun-pre-start"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Measured on blub, 2026-10-29 to 11-02 on the buros sensor, the overrun after switch-off is 0.63–0.82 °C whatever the rise rate, so the anticipator now learns the overrun as a temperature with EWMA 0.3 instead of a time, and before a schedule step up the thermostat pre-starts the warm-up so the room is halfway to the new target at the step: lead = learned dead time + half step / learned warm-up rate, latched until the step, controller untouched. Design: docs/superpowers/specs/2026-11-02-overrun-and-pre-start-design.md — plan: docs/superpowers/plans/2026-11-02-overrun-and-pre-start.md. Config: heating.anticipation.overrun / max_overrun replace overrun_time / max_overrun_time with no alias, and the new block heating.pre_start has enabled, warm_up_rate, dead_time, max_lead. Migrations: 007 converts coast_records and anticipation_samples to °C and drops the four *_time_seconds columns, values converted not lost — 008 adds warm_up_records and anticipation_samples.pre_start. API /api/history/anticipation gains warm_up_records and pre_start, the dashboard shows "pre-start for 09:00", heating history reads "Pre-start for 09:00" and freeze protection keeps its own reason. Deploy notes for blub: back up thermostat.db first, then update /etc/thermostat/config.yaml with overrun: 0.7, max_overrun: 2.0 and the pre_start block from configs/config.yaml.blub — old keys load silently as zero, and make deploy ships the example config with pre-start disabled. Verified: make fmt-check, make test, go vet, go test -race on application, domain and sqlite all green. 🤖 Generated with Claude Code, https://claude.com/claude-code