v4.0.2 — Smarter polling, cloud failure modes, user-action consistency #292
Closed
hiall-fyi
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
In short: Tado CE now uses fewer of your daily Tado API calls when polling fast, and it handles a Tado cloud outage gracefully instead of quietly leaving your entities stuck on old values. When something you do in Home Assistant doesn't go through, the dashboard now tells you instead of pretending it worked. Nothing to set up, no new features to learn. Just update and carry on. The rest of these notes are the detail if you want it.
A stable patch on the v4.0 line, rolling up the v4.1.0-beta.2 work plus two passes scoped for v4.1.0-beta.3 and pulled forward so v4.0.x users don't have to wait for the v4.1.0 beta cycle to finish.
The headline is an adaptive-polling reframe. A 1,000-call-tier home with HomeKit connected was collapsing to 1-minute polling and burning through its daily quota. Polling now matches how fast each kind of data actually changes: weather and presence refresh on their own slower schedule instead of riding the zone-state cadence, the adaptive floor is a flat 5 minutes regardless of how big your quota is (zone temperature doesn't change any faster on a bigger plan), and HomeKit-connected setups follow your Cloud Data Refresh dial. If you want faster than 5 minutes, a custom polling interval still gets you there.
The other half is how the integration behaves when something goes wrong with Tado's cloud. Previously several classes of failure (refresh token revoked, persistent 403, rate-limit window) silently froze your entities on stale data with no UI cue. The integration now responds to each in the way Home Assistant expects: a re-authentication prompt for a dead token, a Repairs notice (and the wait time honoured) for a rate-limit, a clear error toast on any action you take that hits either. Programmer bugs that the old code wrapped and silent-retried forever now surface as actual errors so they can be fixed.
If your installation has been running fine, this release should be largely invisible to you. If it hasn't been, you'll find out faster.
No new features and nothing to reconfigure. It's bug fixes, lighter API use, and the integration coping better when Tado's cloud has a bad day.
Upgrading from v4.0.1 (stable) or v4.1.0-beta.2 (beta channel)? Pick up via HACS, restart, no config changes needed. The persistence reshape, user-action consistency layer, and new error-routing all turn on automatically.
Polling cadence changes if you're on HomeKit or a fast custom interval: with HomeKit local control connected, cloud polling now follows your Cloud Data Refresh dial rather than an automatic faster rate. If you relied on the old behaviour being faster than your dial, set a custom polling interval (Configure → Advanced Settings → Polling & API) to pin it back. Presence and mobile-device locations now refresh at most every 5 minutes in cloud-only mode (they used to update every poll), so if you need tighter presence latency, lean on Home Assistant's own device_tracker or person integration. A custom polling interval now governs zone updates only; weather and presence keep their own slower schedule regardless.
Behavioural change worth knowing: in cloud-only setups (no HomeKit local pairing), entities will now go
unavailablefor the duration of a Tado-cloud rate-limit window instead of staying on stale cached values. They recover automatically on the first successful sync after theRetry-Afterwindow passes. Automations that compare temperature attributes (>,<) during this window may behave differently than before. HomeKit-paired setups are unaffected — the local stream keeps entities live through cloud trouble.One thing that might fire reauth more often: a transient 403 burst from Tado's CDN that lasts past three retries (about 14 seconds with backoff) now triggers a reauth prompt. Previously the integration silently swallowed this. The trade-off is intentional: silent stale data is the worse failure mode. Recovery is one button-press in the Settings → Devices & Services page if the prompt appears unexpectedly.
Mold Risk sensor name change: the numeric humidity sensor's friendly name changes from
Mold Risk %toMold Risk Indicatoracross all seven locales. Existing installs are unaffected on the data side —entity_id,unique_id,device_class=HUMIDITY, and all attribute names stay the same. Only the UI label changes. If you've titled a dashboard card by typing the name out, you'll want to retype it. Fresh installs from this release onward also get a clean auto-generated slug without the_2suffix.Service-call automations from v4.0.x continue to work. The
tado_ce.turn_off_all_zones,resume_schedule,set_open_window_mode, andrestore_previous_stateservices keep the same call shape; only their internal write path changed.When the cloud goes wrong, you see it
Retry-Afterheader, the integration now waits for exactly that long before the next poll instead of polling on its configured interval and re-burning the 429. The 429 also surfaces as a Repairs issue ("Tado CE: Cloud rate-limited") with the recovery time, plus arate_limited_untilattribute on the API Usage sensor so dashboards can show it. The repair clears itself on the first successful sync after recovery.tado_ce.resume_schedulewhile your token is dead now triggers reauth (with a toast saying "Tado authentication required") instead of a generic "set failed". Hitting the same service during a rate-limit window shows "Tado API rate-limited. Try again in N min." with the actual cooldown. Six service handlers (set_temperature_offset,add_meter_reading,identify_device,set_away_configuration,activate_open_window,deactivate_open_window) that previously bypassed this routing now flow through the same path.unavailable. The Repairs entry still appears so you know cloud is down, but the dashboard isn't disrupted. Cloud-only setups (no HomeKit pairing) keep the existing behaviour: entities gounavailableand recover on the next successful sync.Persistence
Bug fixes
tado_ce_readyevent now reaches boot-time automations (#287 - @Newreader) — the event was firing as soon as the integration finished its setup, which on a cold HA start happens before automation triggers register their listeners. Anyone with an automation triggered bytado_ce_readysaw it never run after a restart, only after a manual reload. Fixed by deferring the fire until HA has fully started; reload behaviour is unchanged.location_statusattribute readingno_location_reportedinstead of leaving you guessing why the entity reads Unknown. On Android the most common cause is battery optimisation killing the Tado app's background location service — the attribute names that scenario explicitly so you know where to look in the OS settings rather than chasing it as a Tado CE bug.State Restore
User-action consistency
tado_ce.turn_off_all_zones,tado_ce.resume_schedule,tado_ce.set_open_window_mode, andtado_ce.restore_previous_stateservices now match. The dashboard updates the moment you click. If the cloud rejects or times out, the dashboard rolls back and an error toast surfaces in the UI.Quota handling
weather_last_fetched_min_ago,presence_last_fetched_min_ago, andmobile_devices_last_fetched_min_agoattributes so you can see which data type is using calls.What it saves you, concretely: if you're on the default 30-minute interval, your call count barely moves, because the slow-changing data was already only fetched every 30 minutes at that cadence. The saving shows up when your zones poll fast. At a 1-minute zone cadence with weather, presence, and Frequent Mobile Sync all on, the auxiliary cloud calls (the bits that aren't zone temperature) drop from roughly 2,900 a day to about 430, because weather now refreshes every 30 minutes and presence / locations every 5, instead of all three riding the 1-minute zone cadence. Zone temperatures themselves have arrived locally over HomeKit since v4.0.0 if you've paired the bridge, which takes the single biggest call off the cycle. Full per-version breakdown in FEATURES_GUIDE → Smart Polling.
i18n
Mold Risk %, which read like "percentage of mold risk" but is actually surface relative humidity. The trailing%also caused a slug collision on fresh installs because HA's slugify drops it, so the entity was landing assensor.<zone>_mold_risk_2. The friendly name is nowMold Risk Indicatoracross all seven locales (DE, ES, FR, IT, NL, PT translated via DeepL).Home Assistant compatibility
Internal hardening (no user-visible change)
except Exceptioncatches across the API client, Smart Valve Control, services helpers, and rate-limit gate were swallowing programmer bugs (KeyError on a malformed response, AttributeError after a refactor, etc.) and silent-retrying them on every poll. Each catch is now scoped to the specific exception types it actually needs to handle, so bugs surface as real errors with full tracebacks. If something regresses in a future Tado API change, you should see it as a failed-to-load integration rather than a silently degraded one.zone_diagnostics,device_controls,boost_buttons, andenvironment_sensorsconfig keys had no UI anywhere and sat permanently on. The features they gated still run exactly as before; only the dead config keys are gone.How to Update
From v4.0.1 stable, v4.1.0-beta.1, or v4.1.0-beta.2: HACS → Tado CE → ⋮ → Redownload → tick "Need a different version?" → select v4.0.2 → 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.0.1...v4.0.2
This discussion was created from the release Smarter polling, cloud failure modes, user-action consistency.
Beta Was this translation helpful? Give feedback.
All reactions