tado integrated locally — then six weeks of wrong diagnoses
The local route to tado runs through HomeKit, and HomeKit allows only one controller. What followed: four plausible diagnoses, all of them wrong.
Contents
- The detour that was necessary
- What arrived
- The two blind spots — the price of the local route
- And then operation: four diagnoses, four errors
- The finest error was the last one
- My rule of thumb was wrong too
- The real lesson came at the end
- What I’d suggest
- Update of 07.11.2026: it has got worse
- What this leaves open
- So what?
Twelve thermostats in the Vienna flat, eight radiator heads and four room thermostats. The goal: control them locally, without an account and without a subscription.
That works. But it has two blind spots you should know about in advance — and afterwards it sent me in the wrong direction four times over six weeks.
The detour that was necessary
Home Assistant offers a tado dialog of its own accord. That one leads into the cloud. The local route has a different name and has to be started by hand.
On the first attempt the local route did not offer tado at all. Measured via the service announcement on the network:
tado Internet Bridge ..._hap._tcp.local
sf=0 -> already paired
For comparison, the Hue bridge stood next to it at sf=1, meaning free.
A HomeKit accessory only ever allows one controller. Here it was the Apple
Home hub in the living room. Only after the home there had been deleted did the
field jump to 1, and the pairing went through on the first try.
A HomeKit accessory is not a shared device. Pair it and you take it away from the other side.
Matter would have been the better route — it provides for several controllers at once. But the bridge did not advertise it in its announcements, and whether it could do it in principle remains unclear.
One small check that saves time: HomeKit codes have eight digits, Matter codes eleven. My pairing script checks the length and stops with a note when it does not match — instead of failing on a code meant for the other method.
What arrived
13 devices, 61 entities: temperature and humidity per device, plus the twelve actual thermostats, the display unit and an “Identify” button.
Control has run entirely inside the house ever since. No account in daily operation, no subscription, no dependence on being reachable from outside.
The two blind spots — the price of the local route
There is not a single battery sensor. Not one among 61 entities. On this route tado does not publish the battery level.
Which means: unavailable is the only warning signal. There is no “battery
low” warning in advance; a head simply fails without notice — in the middle of
the heating season, in a room you are not currently entering. Want it otherwise
and you need the cloud connection, and with it an account and a subscription.
And there are no room names. Over HomeKit the devices are named by model and serial number. Checked in the entity map: each accessory carries exactly one name, and that name is the model designation plus number. The bridge’s local interface answers on no path at all.
I solved that with a one-off read through the account, using the device flow: the script requests a code, a human confirms it in the browser, and a token comes back.
Claude never gets to see a password in the process. And it was a one-off read — control continues to run locally.
One trap was hiding in the matching: one room thermostat is named differently in the two systems, same number, different beginning. So the renaming does not only match on equality but also on the end of the name. The other twelve matched word for word — which is exactly why the special case nearly slipped through.
And then operation: four diagnoses, four errors
After integration, three of twelve devices reported in. The rest were silent. That part was simple: the batteries had to be replaced.
After that it got murky. Two devices stayed away, and over six weeks Claude wrote four interpretations for it:
| Interpretation | disproved by |
|---|---|
| weak battery | the account reported the battery state as normal |
| genuine device failure | a bridge restart brought both back in 19 minutes |
| a damaged network cable | new cable, new socket — state unchanged |
| a failed negotiation at 10 Mbit | my own remark: “that is an ancient bridge, check whether it can only do 10 Mbit” |
Each of these rested on one observation, and each was plausible.
The finest error was the last one
10 Mbit half duplex is normally the fallback of a failed negotiation. That
holds as a rule, and that is exactly how Claude read it.
Here it was the device’s ceiling. tado’s own help even describes the situation the other way round: some newer routers no longer support 10 Mbit half duplex at all, and then the bridge cannot be connected there; the advice is to put an older switch in between.
That also explains why neither the socket change nor the new cable changed anything: there was nothing to change. Both sides correctly negotiated what the device has to offer.
A rule that almost always holds becomes a trap when you forget the exception: a device that never could do more.
And a warning for anyone now thinking this can be forced: do not fix the port to the faster setting. The switch offers it, the bridge does not. The result would be no link or a duplex mismatch — and the heating control would be gone until somebody on site puts it back.
My rule of thumb was wrong too
Along the way I had built myself a rule: if the account and the local view contradict each other it is the bridge; if both say the same thing it is the device.
That is not right. It misses exactly the case at hand: the bridge had lost the two devices and never looked for them again — and the account merely relayed that loss. Both said the same thing, and the device was fine.
If both say the same thing it can be the device or the bridge. Before you give up on a device, restart the bridge.
The real lesson came at the end
Six weeks of individual observation, four interpretations, each from a look at the current state.
The answer had been in the database the whole time. Home Assistant records the history. A single query over thirty days would have shown on day one what six weeks of looking never settled: how often, how long and in what pattern those two devices had actually been gone.
Where the recorder is writing, count instead of concluding.
What I’d suggest
- Check before pairing whether the accessory is free. The status field in the service announcement says so. It saves you the false conclusion that “the integration cannot do this”.
- Expect pairing to take it away elsewhere. With HomeKit that is not a defect, it is the design.
- Ask about the battery sensor before buying — not whether the device has a battery, but whether the route you intend to use reports its level.
- Read once what is missing locally, and say so plainly. Fetching names through the account is fine, as long as control stays local and stays that way.
- Do not force a link setting a device cannot deliver. The damage outweighs the gain.
- Count before you interpret. If your system records history, one query over thirty days is worth more than thirty glances.
Update of 07.11.2026: it has got worse
This article used to end with a solved problem. That is still true of the question it asked — and no longer true of the installation.
Since publication, devices no longer drop out one at a time but in growing numbers:
| Date | lost from HomeKit | zones with no device at all |
|---|---|---|
| 13.09. | 1 | — |
| 01.10. | 4 | — |
| 07.11. | 6 | two |
That defeats my safeguard. The heating scenes address every device of a zone individually, so a room does not stall when one drops out. That holds as long as one device is left. Two rooms now have none and cannot be set from Home Assistant at all.
The counter-check says the same thing every time: through the account, tado has contact with all twelve devices. It is the HomeKit path, not the heating.
So far the only thing that has helped is restarting the bridge — pull the plug, wait ten seconds. Last time all twelve were back within three and a half minutes.
Pulling a plug every two weeks through the winter is not maintenance, it is a workaround. From here on, replacing the bridge becomes the more honest solution.
And the ten megabits remain no argument. That is the device’s ceiling and was never the fault — the escalation from one to six is the argument.
What this leaves open
- Swap two radiator heads for two others from the same flat. That decides between device and location and costs nothing.
- Watch the error counter on the switch port the bridge hangs off. If it stays put, the old cable caused the error packets back then.
- Build a battery warning through the account — the local path does not provide one, and that is the point in this article that bothers me most by now.
So what?
The verdict on the local route is clear: it works and it is worth it. The heating depends on no account, no subscription and no reachability from outside.
You pay with two things you have to plan for — no advance battery warning and no room names — and with a bridge running at the edge of its design, which it never concealed. I just did not believe it for six weeks.
That the matter was cleared up in the end is not down to the diagnosis. It is down to one sentence that doubted an assumption nobody had tested for six weeks because it counted as settled — and that sentence was mine, not Claude’s.
If you want to follow this: use RSS
No newsletter. You give me no address, I keep no list, and nobody has to agree to anything to learn that an article is finished. RSS is the older and, for both sides, the more honest solution.
How it works, and why no newsletter
- 1Get a feed reader. No account needed with an app on your phone or a browser extension; use a hosted service if you prefer.
- 2Add the address above to it.
- 3Done. New articles turn up in your reader by themselves — unread stays unread, and nothing lands between invoices and ads in your inbox.
Why that is better: your reader fetches the file. I get no address and cannot see who reads or whether anyone opened it. Unsubscribing means deleting the entry — no link, no confirmation mail, no me.
