I think there isn’t really a breaking point for me… A subscription means your tied into something which can increase and your still reliant on their cloud access. I try and avoid all subscription models because they essentially lock you into a service. I dib’t use any of the tado features, I basically use it as an app control on/off switch that i can then use home assistant to control everything based on all other data in my automation. I control the hot water, heating based on each room temp manually, uses 3rd party radiator controls, using HA to tell me when i’m home or not, and turning heating on an off when required based on various room temps. So paying for a subscription just to get access to my on off switch is pointless for me. If they restrict my apis then i think switching is the best route for me
In 2026 (and even before) that simply isn’t enough anymore. You can buy a product that (when sold) advertises full local control (forever without subscription) just to - some point later in time - take your device hostage and ask for ransom if you want to continue using “your” device locally. ![]()
With introduction of matter (online/cloud device attestation) the platform decay (or enshittification) is now lifted to another level and not owning devices anymore probably becomes the default. ![]()
The ownership we had and were used to might soon be a thing of the past. ![]()
In the future we will be mostly paying “rent” (even if it is a one-time payment) and probably only get a limited time of usage for a device. ![]()
Brave new world ![]()
The alternative (for now) still are devices that you can control and own a 100% running your code, like esphome devices. ![]()
No argument from me on that as a policy! The only Tado device that I have is an ancient infrared thermostat (no HomeKit support) that I only use as a remote control for my mini-split air conditioner when I’m not home. There’s actually a third-party circuit board and HA integration to hard-wire full control to my AC unit, but I only used the Tado twice in all of 2025 so I don’t want to waste the time building the interface and wouldn’t pay Tado’s extortion for something that I rarely use.
Last year, Tado started sending monthly emails about my energy usage. It was hilarious to see them trying to make themselves relevant by telling me that my AC unit achieved 100% energy efficiency while turned off all winter… ![]()
Hi,
I installed tado-api-proxy and modified the file like specified by @balk77 but I still have the same error. Even after restarted TADO bridge and Home-Assistant. The login page popups and I’m able to login to TADO but after the timeout error is raised. I wondering if the local URL is well used. Do we have a way to check that ?
Do I understand correctly that you subscribed, but the 20,000 requests are still insufficient because of the large number of devices you have?
YES, correct.
I see the same issue. Have a paid subscribtion towards Tado and 13 TRV’s. Most days I run out of API credits around 7 am and for the next 3 hours thing’s aren’t working. I am using the Advanced Heating Control blueprint, which I guess is calling the API a lot to update the offset temperature. There’s on open PR to rewamp the Tado API integration and reduce the amount of API calls, but it seems it won’t be merged any time soon - Tado refactor to tadoasync & API changes by erwindouna · Pull Request #151933 · home-assistant/core · GitHub
I have only 6 tado TRV’s and a subscription, but run into API limits every day. I’m looking to switch to another system as well. How do the Sonoff’s fare for you?
The Sonoff TRVZB works welll for me. be aware I was already having a stable and well functioning Zigbee setup (zigbee2mqtt). Not sure about the battery life, I’m only one month in…
Be aware im not using any of the advanced build in features, like scheduling etc.
I’m using set target temperature and mode, and control the target temp from HA
And using external temperatur sensors, setting the value using an automation in HA. Super simple, using some cheap Zigbee temp sensor.
I have it runninng; works by patching the PyTado http.py file upon start of HomeAssistant. Patching probably happens after loading of PyTado so you’ll have to restart Home Assistant one more time after first patch and after each (minor) version upgrade.
Add to configuration.yaml:
shell_command:
patch_tado_library: >
find /usr/local/lib -path "*/PyTado/http.py" -exec sed -i "s|https://my.tado.com/api/v2/|http://192.168.1.174:8080/api/v2/|g" {} +
Add automation:
alias: "System: Patch Tado Library"
description: "Patches PyTado to use local proxy URL on startup"
trigger:
- platform: homeassistant
event: start
action:
- service: shell_command.patch_tado_library
mode: single
Forget everything below
DOES NOT WORK (yet)
not sure what is happening. Did sniffing of outgoing traffic from the Home Assistant virtual machine to my.tado.com ; it appears to be using that still
====
I have it working without modifying the docker image. It uses the stock PyTado library but a copy of the Tado integration, which then overwrites the URL hidden in the stock library.
Step 1:
Get tado-api-proxy running: GitHub - s1adem4n/tado-api-proxy: Bypass tado's API limits
Step 2:
Get a copy of a Tado integration. Go to https://download-directory.github.io and paste in the path to the updated version of the integration found here: https://github.com/karlbeecken/ha-core/tree/dev/homeassistant/components/tado
You can also use the stock version. Copy it to ~/custom_components/tado
Step 3:
Modify ~/custom_components/tado/manifest.json:
{
"domain": "tado",
"name": "Tado",
...
}
to
{
"domain": "tado",
"version": 2025.8,
"name": "Tado",
...
}
Step 4:
Modify ~/custom_components/tado/__init__.py
Add: import PyTado.http
Change
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Set up Tado."""
setup_services(hass)
return True
to, with the IP address of your server
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Set up Tado."""
custom_url = "http://192.168.1.174:8080/api/v2/"
PyTado.http.Endpoint.MY_API._value_ = custom_url
_LOGGER.warning(f"HARDCODED Tado API URL to: {PyTado.http.Endpoint.MY_API.value}")
setup_services(hass)
return True
optionally insert just before this:
def create_tado_instance() -> tuple[Tado, str]:
"""Create a Tado instance, this time with a previously obtained refresh token."""
tado = Tado(saved_refresh_token=entry.data[CONF_REFRESH_TOKEN])
return tado, tado.device_activation_status()
the code to check if it works
current_url = PyTado.http.Endpoint.MY_API.value
_LOGGER.error(f"VERIFICATION: PyTado is currently pointing to: {current_url}")
def create_tado_instance() -> tuple[Tado, str]:
"""Create a Tado instance, this time with a previously obtained refresh token."""
tado = Tado(saved_refresh_token=entry.data[CONF_REFRESH_TOKEN])
return tado, tado.device_activation_status()
Step 5:
Restart Home Assistant
This should survive upgrades and reboots. It does not pick up any updates to the Tado component. It may also result in you being locked out of the Tado web-interface for generating too many api calls. You’ve been warned.
Has anyone got any options for keeping Tado working with local home kit integration?
The rate limit has just started hitting my account, now, so I assume it’s only going to get worse.
My boiler is Bosch Worcester so only Tado can handle modulation properly.
The home kit option looks like I will be able to override room temps e.g. When a room becomes occupied, but I can’t see any way to revert back to schedule when the room is empty.
I can’t see a way of turning the heat down when away, unless I set all zones to stay manual until resume, but that makes the previous issue worse.
Open window automation will have to be disabled too.
Home kit doesn’t have room demand data, which is another loss as this data has been invaluable in finding rooms where radiators are undersized.
100 API calls is just enough to request one status payload every 15 minutes, but not enough to automate anything, and that’s assuming a single call would give all info across the system.
The proxy looks great, but how long until Tado block that too?
I managed to install Tado ApI proxy in docker, based on info in this forum. After one day my mobile application was not able to connect to TADO servers. Error HTTP 429 … too many requests. So, I switch back to original TADO integration.
What are the possibilities to reduce the API calls in original Tado integration? I understand that reducing polling frequency helps but is not an option for me. i’m using ~ 5000 calls per day with 12 thermostats. If I 'll disable sensors (i.e battery, connectivity) from devices may help or at the end the numbers of API calls remains the same?Thanks.
For the people that aren’t keeping up with the GitHub thread, some of us have switched to the custom Tado Hijack integration.
It’s designed to be complementary with the local homekit integration which is lacking some functionality. Been using it for a while now and I’m pretty happy with it.
Since homekit exposes a climate entity per radiator/thermostat I combined this with the custom Climate Group Helper integration to group the ones that are in the same zone.
Go for Tado_hijack, I’m using it daily I have a thermostat and 7 TRVs. I’m around 100 polls a day. For larger installation should be the same because everything is polled together.
The 2 only downsides, to me, are humidity and auto state polling every 30min (every hour in the future to be sure to have remaining polls for user’s action).
Tado_hijack looks like a great option. I’ve just installed it, but I’m confused: Is it a REPLACEMENT for the original TADO Integration, or is it in ADDITION to it?
I think it replaces, as we wouldn’t want the original TADO integration to poll the API, but if someone could confirm, that would be great!
Good question. I have Hijack installed but still polling around 8000 api hits in 24 hours.
It’s a REPLACEMENT for the original Tado Integration, in ADDITION to the homekit integration which provides limited thermostat control. So make sure to delete the Tado integration itself, Tado hijack conveniently uses the same authentication method.
I followed the advice & deleted the Tado intergration & its now polling around 1000 hits in 24 hours.
How do I get it to display the current temperature from the thermostat in home assistant as it informs me that the entity is disabled.
I’m hitting this problem also with the API limitations, unfortunately my home assistant instance is not local to where the Tado installation is so I can’t use the tado_hijack with homekit.
What I have done though is cloned the erwindouna:tado-add-rate-limit-info repo and branch, i’ve now got a view of the API queries and remaining like this:
What I’ve also done is reduced the polling interval (My use case is to retrieve temperatures from each TRV to map temperatures in a large building with many rooms) like this:
SCAN_INTERVAL = timedelta(minutes=15)
in tado/init.py and tado/coordinator.py
What I’m now looking at is reducing the number of api queries that I don’t require. My thinking is in function _async_update_data to remove:
self._tado.get_me(),
self._tado.get_zones(),
Or perhaps move those into a longer polling interval as that data in my case won’t change and it’s a wasted API call (weather, geofence, etc not needed for me).
Just after opinions on others if this is a reasonable approach to take for now to reduce API calls until there are other options (The proxy may be an option but I want to explore that further first).
If it’s useful I can always put my changes into a repo if you want to use the same tweaks and just use it as a custom_integration override.
