From a206604df5cc6ecb8002580cfa8f663cb4ac1101 Mon Sep 17 00:00:00 2001 From: Tim Messerschmidt Date: Sat, 22 Nov 2025 21:54:54 +0100 Subject: [PATCH] Fix tado via_device warnings (#156884) --- homeassistant/components/tado/__init__.py | 18 +++++++++++++++++- homeassistant/components/tado/const.py | 1 + homeassistant/components/tado/entity.py | 12 ++++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/tado/__init__.py b/homeassistant/components/tado/__init__.py index 0513d63b893..e9843efdea6 100644 --- a/homeassistant/components/tado/__init__.py +++ b/homeassistant/components/tado/__init__.py @@ -21,7 +21,7 @@ from homeassistant.exceptions import ( ConfigEntryError, ConfigEntryNotReady, ) -from homeassistant.helpers import config_validation as cv +from homeassistant.helpers import config_validation as cv, device_registry as dr from homeassistant.helpers.typing import ConfigType from .const import ( @@ -32,6 +32,7 @@ from .const import ( CONST_OVERLAY_TADO_MODE, CONST_OVERLAY_TADO_OPTIONS, DOMAIN, + TADO_BRIDGE_MODELS, ) from .coordinator import TadoDataUpdateCoordinator, TadoMobileDeviceUpdateCoordinator from .models import TadoData @@ -105,6 +106,21 @@ async def async_setup_entry(hass: HomeAssistant, entry: TadoConfigEntry) -> bool mobile_coordinator = TadoMobileDeviceUpdateCoordinator(hass, entry, tado) await mobile_coordinator.async_config_entry_first_refresh() + # Pre-register the bridge device to ensure it exists before other devices reference it + device_registry = dr.async_get(hass) + for device in coordinator.data["device"].values(): + if device["deviceType"] in TADO_BRIDGE_MODELS: + _LOGGER.debug("Pre-registering Tado bridge: %s", device["shortSerialNo"]) + device_registry.async_get_or_create( + config_entry_id=entry.entry_id, + identifiers={(DOMAIN, device["shortSerialNo"])}, + manufacturer="Tado", + model=device["deviceType"], + name=device["serialNo"], + sw_version=device["currentFwVersion"], + configuration_url=f"https://app.tado.com/en/main/settings/rooms-and-devices/device/{device['serialNo']}", + ) + entry.runtime_data = TadoData(coordinator, mobile_coordinator) await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) diff --git a/homeassistant/components/tado/const.py b/homeassistant/components/tado/const.py index 7720ff09110..abc1695adbd 100644 --- a/homeassistant/components/tado/const.py +++ b/homeassistant/components/tado/const.py @@ -205,6 +205,7 @@ DEFAULT_NAME = "Tado" TADO_HOME = "Home" TADO_ZONE = "Zone" +TADO_BRIDGE_MODELS = ["IB01", "IB02"] # Constants for Temperature Offset INSIDE_TEMPERATURE_MEASUREMENT = "INSIDE_TEMPERATURE_MEASUREMENT" diff --git a/homeassistant/components/tado/entity.py b/homeassistant/components/tado/entity.py index 971b2863aba..bb92880d99b 100644 --- a/homeassistant/components/tado/entity.py +++ b/homeassistant/components/tado/entity.py @@ -5,7 +5,7 @@ import logging from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.update_coordinator import CoordinatorEntity -from .const import DEFAULT_NAME, DOMAIN, TADO_HOME, TADO_ZONE +from .const import DEFAULT_NAME, DOMAIN, TADO_BRIDGE_MODELS, TADO_HOME, TADO_ZONE from .coordinator import TadoDataUpdateCoordinator _LOGGER = logging.getLogger(__name__) @@ -28,6 +28,13 @@ class TadoDeviceEntity(TadoCoordinatorEntity): self._device_info = device_info self.device_name = device_info["serialNo"] self.device_id = device_info["shortSerialNo"] + via_device: tuple[str, str] | None = None + if device_info["deviceType"] not in TADO_BRIDGE_MODELS: + for device in coordinator.data["device"].values(): + if device["deviceType"] in TADO_BRIDGE_MODELS: + via_device = (DOMAIN, device["shortSerialNo"]) + break + self._attr_device_info = DeviceInfo( configuration_url=f"https://app.tado.com/en/main/settings/rooms-and-devices/device/{self.device_name}", identifiers={(DOMAIN, self.device_id)}, @@ -35,8 +42,9 @@ class TadoDeviceEntity(TadoCoordinatorEntity): manufacturer=DEFAULT_NAME, sw_version=device_info["currentFwVersion"], model=device_info["deviceType"], - via_device=(DOMAIN, device_info["serialNo"]), ) + if via_device: + self._attr_device_info["via_device"] = via_device class TadoHomeEntity(TadoCoordinatorEntity):