v2026.07.10
Three contributed fixes from @clarejor, plus documentation.
Fixed: imperial installs never irrigated on deficit (#62)
If your Home Assistant is set to imperial units, this is the important one.
The zone depth defaults — minimum deficit to irrigate, maximum bucket and drainage rate — are authored in millimetres, but these fields are stored in the units Home Assistant is configured for. On an imperial install the raw constants were stored verbatim and therefore meant inches:
| Setting | Was stored as | Meaning |
|---|---|---|
| Minimum deficit to irrigate | -10 |
−254 mm |
| Maximum bucket | 24 |
610 mm |
| Drainage rate | 20 |
508 mm/h |
Irrigation triggers when bucket < minimum deficit, and no realistic bucket ever reaches −254 mm — so every deficit-gated run was silently suppressed, with no error and no log line.
Defaults are now materialised per unit system, and a storage migration (v11 → v12) repairs values already on disk. The migration is scoped tightly: imperial installs only, and only where the stored value is exactly the unconverted millimetre constant, so any value you chose deliberately is left alone. It is idempotent and logs each change at INFO.
Metric installs are completely unaffected — no conversion is needed there, and the migration skips them entirely.
Imperial installs: expect different watering after updating. Beyond deficit-gated runs starting to fire at all, your maximum bucket becomes a 24 mm ceiling that actually binds (it was 610 mm), and drainage becomes roughly 25× slower (20 mm/h rather than 508 mm/h). Both are the intended design. Check your zone settings after updating if you had tuned around the old behaviour.
Improved: far less disk writing (#63)
Every save reserialized the whole store — configuration, zones, modules and every sensor group's full reading buffer — and replaced the file, with no coalescing window. Because the buffer grows between calculations while each write rewrote all of it, total bytes written scaled with the square of the readings per cycle. Noticeable on SD-card and eMMC installs, and dominant at short poll intervals.
Reading buffers now live apart from the routine save payload, so ingesting a reading costs nothing on disk, and writes are coalesced over a 30 second window. Same storage file, same format, no migration, and no change to watering behaviour.
Trade-off worth knowing: a hard power-cut can now lose up to 30 seconds of configuration changes and up to 10 minutes of buffered sensor readings. A clean restart or shutdown loses nothing.
Fixed: "reset all weather data" appeared to do nothing (#64)
Clearing the buffers — via the reset action or by changing a sensor group's source — left each zone's Weather data points count showing the pre-reset number until some later poll happened to overwrite it, so the action looked like it had failed. The count is now reset with the buffer, and the affected zone entities refresh immediately.
Documentation
The zone settings and how-it-works pages now state the depth defaults per unit system rather than as flat millimetre numbers, and make explicit that zone depth values are stored in your configured units.