From a0e7560b1ea37f6e49bf969666fd26208a34d8cd Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Sun, 9 Feb 2025 14:51:29 +0100 Subject: [PATCH] Explicitly pass in the config_entry in switchbot_cloud coordinator (#137922) explicitly pass in the config_entry in coordinator --- .../components/switchbot_cloud/__init__.py | 31 ++++++++++--------- .../components/switchbot_cloud/coordinator.py | 9 +++++- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/switchbot_cloud/__init__.py b/homeassistant/components/switchbot_cloud/__init__.py index d7812158260..44e130cc7a4 100644 --- a/homeassistant/components/switchbot_cloud/__init__.py +++ b/homeassistant/components/switchbot_cloud/__init__.py @@ -47,13 +47,14 @@ class SwitchbotCloudData: async def coordinator_for_device( hass: HomeAssistant, + entry: ConfigEntry, api: SwitchBotAPI, device: Device | Remote, coordinators_by_id: dict[str, SwitchBotCoordinator], ) -> SwitchBotCoordinator: """Instantiate coordinator and adds to list for gathering.""" coordinator = coordinators_by_id.setdefault( - device.device_id, SwitchBotCoordinator(hass, api, device) + device.device_id, SwitchBotCoordinator(hass, entry, api, device) ) if coordinator.data is None: @@ -64,6 +65,7 @@ async def coordinator_for_device( async def make_switchbot_devices( hass: HomeAssistant, + entry: ConfigEntry, api: SwitchBotAPI, devices: list[Device | Remote], coordinators_by_id: dict[str, SwitchBotCoordinator], @@ -72,7 +74,7 @@ async def make_switchbot_devices( devices_data = SwitchbotDevices() await gather( *[ - make_device_data(hass, api, device, devices_data, coordinators_by_id) + make_device_data(hass, entry, api, device, devices_data, coordinators_by_id) for device in devices ] ) @@ -82,6 +84,7 @@ async def make_switchbot_devices( async def make_device_data( hass: HomeAssistant, + entry: ConfigEntry, api: SwitchBotAPI, device: Device | Remote, devices_data: SwitchbotDevices, @@ -90,7 +93,7 @@ async def make_device_data( """Make device data.""" if isinstance(device, Remote) and device.device_type.endswith("Air Conditioner"): coordinator = await coordinator_for_device( - hass, api, device, coordinators_by_id + hass, entry, api, device, coordinators_by_id ) devices_data.climates.append((device, coordinator)) if ( @@ -101,7 +104,7 @@ async def make_device_data( ) ) or isinstance(device, Remote): coordinator = await coordinator_for_device( - hass, api, device, coordinators_by_id + hass, entry, api, device, coordinators_by_id ) devices_data.switches.append((device, coordinator)) @@ -117,7 +120,7 @@ async def make_device_data( "Plug Mini (JP)", ]: coordinator = await coordinator_for_device( - hass, api, device, coordinators_by_id + hass, entry, api, device, coordinators_by_id ) devices_data.sensors.append((device, coordinator)) @@ -128,19 +131,19 @@ async def make_device_data( "Robot Vacuum Cleaner S1 Plus", ]: coordinator = await coordinator_for_device( - hass, api, device, coordinators_by_id + hass, entry, api, device, coordinators_by_id ) devices_data.vacuums.append((device, coordinator)) if isinstance(device, Device) and device.device_type.startswith("Smart Lock"): coordinator = await coordinator_for_device( - hass, api, device, coordinators_by_id + hass, entry, api, device, coordinators_by_id ) devices_data.locks.append((device, coordinator)) if isinstance(device, Device) and device.device_type in ["Bot"]: coordinator = await coordinator_for_device( - hass, api, device, coordinators_by_id + hass, entry, api, device, coordinators_by_id ) if coordinator.data is not None: if coordinator.data.get("deviceMode") == "pressMode": @@ -149,10 +152,10 @@ async def make_device_data( devices_data.switches.append((device, coordinator)) -async def async_setup_entry(hass: HomeAssistant, config: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up SwitchBot via API from a config entry.""" - token = config.data[CONF_API_TOKEN] - secret = config.data[CONF_API_KEY] + token = entry.data[CONF_API_TOKEN] + secret = entry.data[CONF_API_KEY] api = SwitchBotAPI(token=token, secret=secret) try: @@ -168,13 +171,13 @@ async def async_setup_entry(hass: HomeAssistant, config: ConfigEntry) -> bool: coordinators_by_id: dict[str, SwitchBotCoordinator] = {} switchbot_devices = await make_switchbot_devices( - hass, api, devices, coordinators_by_id + hass, entry, api, devices, coordinators_by_id ) hass.data.setdefault(DOMAIN, {}) - hass.data[DOMAIN][config.entry_id] = SwitchbotCloudData( + hass.data[DOMAIN][entry.entry_id] = SwitchbotCloudData( api=api, devices=switchbot_devices ) - await hass.config_entries.async_forward_entry_setups(config, PLATFORMS) + await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True diff --git a/homeassistant/components/switchbot_cloud/coordinator.py b/homeassistant/components/switchbot_cloud/coordinator.py index 0ebd04f7e5a..02ead5940e4 100644 --- a/homeassistant/components/switchbot_cloud/coordinator.py +++ b/homeassistant/components/switchbot_cloud/coordinator.py @@ -6,6 +6,7 @@ from typing import Any from switchbot_api import CannotConnect, Device, Remote, SwitchBotAPI +from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed @@ -19,16 +20,22 @@ type Status = dict[str, Any] | None class SwitchBotCoordinator(DataUpdateCoordinator[Status]): """SwitchBot Cloud coordinator.""" + config_entry: ConfigEntry _api: SwitchBotAPI _device_id: str def __init__( - self, hass: HomeAssistant, api: SwitchBotAPI, device: Device | Remote + self, + hass: HomeAssistant, + config_entry: ConfigEntry, + api: SwitchBotAPI, + device: Device | Remote, ) -> None: """Initialize SwitchBot Cloud.""" super().__init__( hass, _LOGGER, + config_entry=config_entry, name=DOMAIN, update_interval=DEFAULT_SCAN_INTERVAL, )