From 7acc41290260d89547210bc32b11fb98934347c8 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Mon, 20 Apr 2026 10:28:36 +0200 Subject: [PATCH] Use runtime_data in thethingsnetwork integration (#168589) Co-authored-by: Claude Opus 4.6 (1M context) --- .../components/thethingsnetwork/__init__.py | 17 ++++++----------- .../components/thethingsnetwork/coordinator.py | 6 ++++-- .../components/thethingsnetwork/sensor.py | 8 ++++---- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/thethingsnetwork/__init__.py b/homeassistant/components/thethingsnetwork/__init__.py index d3c6c8356cb7..4f9bf2154084 100644 --- a/homeassistant/components/thethingsnetwork/__init__.py +++ b/homeassistant/components/thethingsnetwork/__init__.py @@ -2,17 +2,16 @@ import logging -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_API_KEY, CONF_HOST from homeassistant.core import HomeAssistant -from .const import DOMAIN, PLATFORMS, TTN_API_HOST -from .coordinator import TTNCoordinator +from .const import PLATFORMS, TTN_API_HOST +from .coordinator import TTNConfigEntry, TTNCoordinator _LOGGER = logging.getLogger(__name__) -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: TTNConfigEntry) -> bool: """Establish connection with The Things Network.""" _LOGGER.debug( @@ -25,14 +24,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await coordinator.async_config_entry_first_refresh() - hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator + entry.runtime_data = coordinator await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry(hass: HomeAssistant, entry: TTNConfigEntry) -> bool: """Unload a config entry.""" _LOGGER.debug( @@ -41,8 +40,4 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: entry.data.get(CONF_HOST, TTN_API_HOST), ) - # Unload entities created for each supported platform - unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) - if unload_ok: - del hass.data[DOMAIN][entry.entry_id] - return True + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) diff --git a/homeassistant/components/thethingsnetwork/coordinator.py b/homeassistant/components/thethingsnetwork/coordinator.py index 78ffceecf84d..9a8d0c824ef6 100644 --- a/homeassistant/components/thethingsnetwork/coordinator.py +++ b/homeassistant/components/thethingsnetwork/coordinator.py @@ -15,13 +15,15 @@ from .const import CONF_APP_ID, POLLING_PERIOD_S _LOGGER = logging.getLogger(__name__) +type TTNConfigEntry = ConfigEntry[TTNCoordinator] + class TTNCoordinator(DataUpdateCoordinator[TTNClient.DATA_TYPE]): """TTN coordinator.""" - config_entry: ConfigEntry + config_entry: TTNConfigEntry - def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None: + def __init__(self, hass: HomeAssistant, entry: TTNConfigEntry) -> None: """Initialize my coordinator.""" super().__init__( hass, diff --git a/homeassistant/components/thethingsnetwork/sensor.py b/homeassistant/components/thethingsnetwork/sensor.py index 5aa851d99ae8..334a6878e345 100644 --- a/homeassistant/components/thethingsnetwork/sensor.py +++ b/homeassistant/components/thethingsnetwork/sensor.py @@ -5,12 +5,12 @@ import logging from ttn_client import TTNSensorValue from homeassistant.components.sensor import SensorEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.typing import StateType -from .const import CONF_APP_ID, DOMAIN +from .const import CONF_APP_ID +from .coordinator import TTNConfigEntry from .entity import TTNEntity _LOGGER = logging.getLogger(__name__) @@ -18,12 +18,12 @@ _LOGGER = logging.getLogger(__name__) async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: TTNConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Add entities for TTN.""" - coordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data sensors: set[tuple[str, str]] = set()