v2.20.0
Three features from the roadmap's journey-review lane — each verified end-to-end in a live browser session on top of the 2583-test suite. No breaking changes.
✨ New
- Seasonal pause — pause a whole object (pool, lawn mower, AC) for the off-season: tasks read a new Paused status, schedules freeze, triggers tear down, nothing notifies, and the calendar / To-do list skip them — but the object and its history stay fully visible. Optionally set an auto-resume date (the object resumes itself on that day); resuming restarts every recurring task with a fresh cycle instead of months of fake overdue. Panel: Pause/Resume in the object header, a paused badge on object cards; WS:
object/pause/object/resume. - Replace an object — when a machine dies, Replace… retires it in place (archived; history, costs and documents stay browsable, marked with its successor) and creates the new unit pre-filled: same task configuration with fresh counters, the document library carried over (content-addressed blobs are refcounted, not copied), installation date set to today, serial number and warranty cleared. Both objects link to each other (
predecessor/replaced_by). Panel: Replace… in the object header; WS:object/replace. - Meter readings (#83, part 2) — the Reading task type (introduced in 2.18) now does what it promises: give the task a unit ("kWh", "m³", …) in the task dialog or config flow, and the completion dialog asks for the reading value. Every value lands on its history entry, and the timeline shows each reading with its delta vs the previous one (+123.5 kWh). Automations can record readings through the
completeservice and thetask/completeWS command (reading_value); the unit round-trips through JSON and CSV export/import.
🐛 Fixed
- Prompt dialogs rendered without their input field — the shared confirm-dialog used
<ha-textfield>, which Home Assistant only loads lazily for its own panels; inside the custom panel it could be unregistered and render at zero height. The pause prompt showed no auto-resume date, the replace prompt no successor-name field, and the skip-reason prompt had the same latent hole. All prompts now use a native input. Found by the live browser verification of this release's features.
Full Changelog: v2.19.1...v2.20.0