AC swing axes, automation-friendly Smart Valve writes, temperature source control, HomeKit reliability
⚠️ Upgrade Notes
Upgrading from v4.0.x: HACS auto-update handles it. No config changes, no re-pairing, no entity ID changes. All per-zone settings, HomeKit pairings, and sensor history carry forward.
If you have automations or templates that read swing_mode and match 'both', 'vertical', or 'horizontal', those need updating — see the Migration section below.
Upgrading from a v4.1.0 beta: same — pick up the GA tag and you're done.
Features
- Split AC swing into vertical and horizontal axes (#270 - @Ralf84) — AC zones now expose a
Swing (vertical)and aSwing (horizontal)dropdown, each populated from the cloud-reported capability set for your specific unit. Pick a fixed louver position on either dropdown to stop oscillation on that axis. SimpleOn / Offunits keep a two-value dropdown. Fine-grained positions (UP,MID_DOWN,LEFT,MID_RIGHT) are exposed directly where the unit reports them. - Set a zone target from an automation without tripping Smart Valve Control (#256 - @apilone) — the new
tado_ce.set_schedule_temperatureservice marks the write as a scheduled change so Smart Valve Control keeps compensating towards it instead of backing off. Leaveforce_overrideoff (the default) to respect any manual override; turn it on when the automation must take priority regardless. - Choose which temperature reading each zone shows (#293 - @churchofnoise) — a new per-zone Temperature source setting (Configure → Zone Configuration → Temperature). Automatic prefers the fast HomeKit reading when it's fresh and falls back to the cloud; HomeKit always prefers local; Cloud always shows Tado's.
- Identify a specific TRV or thermostat from Home Assistant (#291 - @bobbinz) — each device now gets its own Identify button that flashes the LED. Multi-TRV zones get one button per device. It flashes over HomeKit when the bridge is connected (no API call) and falls back to the cloud otherwise.
Improvements
- Configurable refresh intervals for Home Presence, Weather Data, and Mobile Device Tracking (#303 - @davidjirovec) — the per-type refresh floors (5 min for presence and mobile, 30 min for weather) are now configurable in Advanced Settings → Polling & API. Defaults stay unchanged. On a 20,000-call plan, dialling presence and mobile down to 1 minute gives tighter geofencing latency for automations.
- Override duration relabelled to match the Tado app — "Until you resume schedule", "Until next automatic change", and "Timer" replace the old four-option set. New installs and zones default to "Until you resume schedule". The Timer cap rises from 3 to 12 hours.
- Card actions update immediately and roll back on failure — HVAC mode dropdowns, timer buttons, water-heater on/off, and boost buttons now match the existing slider behaviour: instant feedback, error toast on rejection.
- AC capabilities refresh themselves after a re-pair or hardware swap (Discussion #280 - @Trebor87) — no more pressing Refresh AC Capabilities by hand after swapping a controller.
- Re-pair, zone add/remove, and hardware swaps on the Tado side are detected automatically (Discussion #280 - @Trebor87) — cache invalidation now triggers on the next quick poll instead of waiting for the next HA restart.
- Device state sensors stay current (#286 - @Fred224) — Connection, firmware, and battery sensors now refresh hourly (paid tiers) or every 4 hours (free tier) instead of freezing at boot.
- Mold Risk % sensor renamed to Mold Risk Indicator (#90 - @ChrisMarriott38) —
entity_id,unique_id, and attributes unchanged; UI label only. - API Reference doc retired — the useful parts (rate-limit reset detection, per-tier polling guidance, API troubleshooting) now live in the Features Guide under Smart Polling and Troubleshooting; the rest was internal call-code taxonomy. If you'd bookmarked
API_REFERENCE.md, those topics are all in the Features Guide now.
Bug fixes
- Fan speed changes now reach older AC units (#305 - @stefanzweig1979) — on units whose firmware reports fan options under the older naming (seen on Toshiba, Mitsubishi, and Fujitsu setups), changing the fan mode updated the dashboard but never reached the AC: temperature still applied, fan did not. The integration was sending the fan setting under the wrong field name, which the cloud quietly ignored. It now sends the field the unit expects. Newer units were never affected.
- Overnight Offset Sync swing fixed (#262 - @simonotter) — the offset could drift to the ±10°C cap overnight and lurch back, leaving the room cold by morning. The controller now waits for Tado's reading to reflect its last write before correcting again.
- Offset drift refresh no longer bursts every zone at once (#277 - @wrowlands3) — one zone per cycle, rotating, instead of all zones at once.
- Presence mode no longer reverts to Home after a restart (#302 - @beltra) — presence changes are now saved immediately and survive a restart whether or not Home State Sync is on.
- Device Temperature Offsets no longer read every zone on startup when Smart Valve Control is off (#304 - @wrowlands3) — offset fetches now only run when at least one zone has SVC or Offset Sync active.
- Heating mode and room target no longer flip on HomeKit + cloud zones (#296 - @apilone) — HVAC mode now comes from the cloud only; room temperature still follows HomeKit.
- A factory-reset bridge now surfaces a repair notice instead of retrying forever — the integration stops retrying and raises a Home Assistant Repairs notification pointing you to Settings → Tado CE → Configure to re-pair.
- HomeKit local control recovers automatically when the bridge is unreachable at startup — the reconnect loop starts immediately on a failed startup connect, no reload needed.
tado_ce_readyevent now reaches boot-time automations (#287 - @Newreader) — the event now fires after HA has fully started, so automation triggers are already registered.- State Restore captures only persist on successful cloud writes (#278 - @Newreader) — a failed write no longer leaves a stale snapshot that could be replayed later.
- Several further fixes: resuming zones already on schedule, clearing overrides on Auto, pairing error messages, repair notice cleanup on integration removal.
⚠️ Migration
Service-call automations using swing_mode: both / vertical / horizontal keep working with a deprecation warning per call. The compat shim is removed in v4.2.0:
# Before (v4.0)
- service: climate.set_swing_mode
data:
entity_id: climate.tado_ce_living_room
swing_mode: both
# After (v4.1+)
- service: climate.set_swing_mode
data:
entity_id: climate.tado_ce_living_room
swing_mode: on
- service: climate.set_swing_horizontal_mode
data:
entity_id: climate.tado_ce_living_room
swing_horizontal_mode: onTemplates reading swing_mode and matching 'both', 'vertical', or 'horizontal' need updating — the attribute now holds raw values like 'on', 'off', 'up', 'auto'. Check both axes separately:
{# Before #}
{% if state_attr('climate.tado_ce_living_room', 'swing_mode') == 'both' %}
{# After #}
{% set v = state_attr('climate.tado_ce_living_room', 'swing_mode') %}
{% set h = state_attr('climate.tado_ce_living_room', 'swing_horizontal_mode') %}
{% if v not in ['off', None] and h not in ['off', None] %}How to Update
From v4.0.x stable or any v4.1.0 beta: HACS → Tado CE → ⋮ → Redownload → select v4.1.0 → Restart HA.
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.0.3...v4.1.0