Skip to content

Offset Sync controller redesign + AC capabilities lifecycle

Pre-release
Pre-release

Choose a tag to compare

@hiall-fyi hiall-fyi released this 14 Jun 10:40

Two fixes to the same Offset Sync controller, designed together because they share the write loop. The headline one stops the overnight offset swing that could leave a room cold in the morning; the other smooths out the drift refresh so it stops bursting a cloud call for every zone at once. Plus AC capabilities now refresh themselves after you swap or re-pair a controller, instead of needing a button press.

Theme per beta makes regressions easier to attribute. beta.1 was the AC swing axis split, beta.2 the persistence reshape, beta.3 the overlay and temperature-source authority; this is the Offset Sync write loop.

⚠️ Upgrade Notes

Upgrading from v4.0.3 (stable) or an earlier beta? Pick up via HACS, restart, no config changes needed.

If you turned Offset Sync off while the overnight swing was being chased, you can turn it back on now. If you'd switched a zone's offset by hand in the Tado app as a workaround, the controller takes back over on the next cycle.

Bug fixes

  • Stop the overnight offset swing (#262 - @simonotter) — on a zone with an external temperature sensor, the offset could drift all the way to the ±10°C cap overnight and then lurch back, leaving the room cold by morning. The cache fixes from v4.0.0 were working; the cause was timing. The controller wrote a new offset every cycle, but Tado's room reading only refreshes on a cloud poll, so between polls it kept correcting against a reading that hadn't caught up to its own last write, and walked itself into the cap. It now waits for the reading to reflect the last write before correcting again, so the loop can't chase a stale number. While in there, the physics and the write decision were made to read the same offset value, removing a second way the two could disagree.
  • Drift refresh no longer bursts every zone at once (#277 - @wrowlands3) — the periodic offset drift refresh used to re-read every climate zone in a single cycle, so an eight-zone home paid eight cloud calls at once. It now visits one zone per cycle, rotating through them, for a steady one call per cycle whatever your zone count. Each zone is re-read every N cycles instead of every cycle; with the same calibration drifting over hours, that still catches it well within the window, and every write stays readback-checked the moment it happens. The drift-refresh log line now names the zone it refreshed.

Improvements

  • AC capabilities refresh themselves after a re-pair or hardware swap (Discussion #280 - @Trebor87) — when you replaced or re-paired a Smart AC controller, the integration kept showing the old controller's supported modes, sometimes only [OFF], until you pressed Refresh AC Capabilities by hand. It now refreshes on its own: it picks up an added or removed AC zone, and it watches each zone's device serial and firmware version so a swap or re-pair re-fetches the modes automatically. The climate entity rebuilds its mode list at the same time, so a newly available heat or fan mode actually shows up. The button stays as a manual override for the rare re-pair that keeps the same serial and firmware.

How to Update

From v4.0.3 stable, or any earlier beta: HACS → Tado CE → ⋮ → Redownload → tick "Need a different version?" → select v4.1.0-beta.4 → Restart HA. No config changes needed.

Fresh install: See Quick Start in the README.


Thanks to everyone who supported the project through Buy Me a Coffee — it genuinely helps.

Full changelog: v4.1.0-beta.3...v4.1.0-beta.4