diff --git a/homeassistant/components/elkm1/__init__.py b/homeassistant/components/elkm1/__init__.py index 3b0c5f02f97..33d017e09d7 100644 --- a/homeassistant/components/elkm1/__init__.py +++ b/homeassistant/components/elkm1/__init__.py @@ -69,6 +69,8 @@ from .discovery import ( ) from .models import ELKM1Data +ElkM1ConfigEntry = ConfigEntry[ELKM1Data] + SYNC_TIMEOUT = 120 _LOGGER = logging.getLogger(__name__) @@ -181,7 +183,6 @@ CONFIG_SCHEMA = vol.Schema( async def async_setup(hass: HomeAssistant, hass_config: ConfigType) -> bool: """Set up the Elk M1 platform.""" - hass.data.setdefault(DOMAIN, {}) _create_elk_services(hass) async def _async_discovery(*_: Any) -> None: @@ -235,7 +236,7 @@ def _async_find_matching_config_entry( return None -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: ElkM1ConfigEntry) -> bool: """Set up Elk-M1 Control from a config entry.""" conf: MappingProxyType[str, Any] = entry.data @@ -308,7 +309,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: config["temperature_unit"] = temperature_unit prefix: str = conf[CONF_PREFIX] auto_configure: bool = conf[CONF_AUTO_CONFIGURE] - hass.data[DOMAIN][entry.entry_id] = ELKM1Data( + entry.runtime_data = ELKM1Data( elk=elk, prefix=prefix, mac=entry.unique_id, @@ -331,24 +332,20 @@ def _included(ranges: list[tuple[int, int]], set_to: bool, values: list[bool]) - def _find_elk_by_prefix(hass: HomeAssistant, prefix: str) -> Elk | None: """Search all config entries for a given prefix.""" - all_elk: dict[str, ELKM1Data] = hass.data[DOMAIN] - for elk_data in all_elk.values(): + for entry in hass.config_entries.async_entries(DOMAIN): + if not entry.runtime_data: + continue + elk_data: ELKM1Data = entry.runtime_data if elk_data.prefix == prefix: return elk_data.elk return None -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry(hass: HomeAssistant, entry: ElkM1ConfigEntry) -> bool: """Unload a config entry.""" unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) - all_elk: dict[str, ELKM1Data] = hass.data[DOMAIN] - # disconnect cleanly - all_elk[entry.entry_id].elk.disconnect() - - if unload_ok: - all_elk.pop(entry.entry_id) - + entry.runtime_data.elk.disconnect() return unload_ok diff --git a/homeassistant/components/elkm1/alarm_control_panel.py b/homeassistant/components/elkm1/alarm_control_panel.py index 5752bf82436..eb8d7360ce2 100644 --- a/homeassistant/components/elkm1/alarm_control_panel.py +++ b/homeassistant/components/elkm1/alarm_control_panel.py @@ -17,7 +17,6 @@ from homeassistant.components.alarm_control_panel import ( AlarmControlPanelEntityFeature, CodeFormat, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, @@ -33,12 +32,11 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.restore_state import RestoreEntity -from . import ElkAttachedEntity, ElkEntity, create_elk_entities +from . import ElkAttachedEntity, ElkEntity, ElkM1ConfigEntry, create_elk_entities from .const import ( ATTR_CHANGED_BY_ID, ATTR_CHANGED_BY_KEYPAD, ATTR_CHANGED_BY_TIME, - DOMAIN, ELK_USER_CODE_SERVICE_SCHEMA, ) from .models import ELKM1Data @@ -63,12 +61,11 @@ SERVICE_ALARM_CLEAR_BYPASS = "alarm_clear_bypass" async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: ElkM1ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up the ElkM1 alarm platform.""" - - elk_data: ELKM1Data = hass.data[DOMAIN][config_entry.entry_id] + elk_data = config_entry.runtime_data elk = elk_data.elk entities: list[ElkEntity] = [] create_elk_entities(elk_data, elk.areas, "area", ElkArea, entities) diff --git a/homeassistant/components/elkm1/binary_sensor.py b/homeassistant/components/elkm1/binary_sensor.py index c04a9d17830..171e9968ce6 100644 --- a/homeassistant/components/elkm1/binary_sensor.py +++ b/homeassistant/components/elkm1/binary_sensor.py @@ -9,22 +9,19 @@ from elkm1_lib.elements import Element from elkm1_lib.zones import Zone from homeassistant.components.binary_sensor import BinarySensorEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from . import ElkAttachedEntity, ElkEntity -from .const import DOMAIN -from .models import ELKM1Data +from . import ElkAttachedEntity, ElkEntity, ElkM1ConfigEntry async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: ElkM1ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Create the Elk-M1 sensor platform.""" - elk_data: ELKM1Data = hass.data[DOMAIN][config_entry.entry_id] + elk_data = config_entry.runtime_data elk = elk_data.elk auto_configure = elk_data.auto_configure diff --git a/homeassistant/components/elkm1/climate.py b/homeassistant/components/elkm1/climate.py index 76ede0bbdf1..6281cca8592 100644 --- a/homeassistant/components/elkm1/climate.py +++ b/homeassistant/components/elkm1/climate.py @@ -17,14 +17,11 @@ from homeassistant.components.climate import ( ClimateEntityFeature, HVACMode, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import PRECISION_WHOLE from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from . import ElkEntity, create_elk_entities -from .const import DOMAIN -from .models import ELKM1Data +from . import ElkEntity, ElkM1ConfigEntry, create_elk_entities SUPPORT_HVAC = [ HVACMode.OFF, @@ -59,11 +56,11 @@ ELK_TO_HASS_FAN_MODES = { async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: ElkM1ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Create the Elk-M1 thermostat platform.""" - elk_data: ELKM1Data = hass.data[DOMAIN][config_entry.entry_id] + elk_data = config_entry.runtime_data elk = elk_data.elk entities: list[ElkEntity] = [] create_elk_entities( diff --git a/homeassistant/components/elkm1/light.py b/homeassistant/components/elkm1/light.py index 432d6683de4..17d525f6ddc 100644 --- a/homeassistant/components/elkm1/light.py +++ b/homeassistant/components/elkm1/light.py @@ -9,22 +9,20 @@ from elkm1_lib.elk import Elk from elkm1_lib.lights import Light from homeassistant.components.light import ATTR_BRIGHTNESS, ColorMode, LightEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from . import ElkEntity, create_elk_entities -from .const import DOMAIN +from . import ElkEntity, ElkM1ConfigEntry, create_elk_entities from .models import ELKM1Data async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: ElkM1ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up the Elk light platform.""" - elk_data: ELKM1Data = hass.data[DOMAIN][config_entry.entry_id] + elk_data = config_entry.runtime_data elk = elk_data.elk entities: list[ElkEntity] = [] create_elk_entities(elk_data, elk.lights, "plc", ElkLight, entities) diff --git a/homeassistant/components/elkm1/scene.py b/homeassistant/components/elkm1/scene.py index 9658052f3e5..e4b738c9dbd 100644 --- a/homeassistant/components/elkm1/scene.py +++ b/homeassistant/components/elkm1/scene.py @@ -7,22 +7,19 @@ from typing import Any from elkm1_lib.tasks import Task from homeassistant.components.scene import Scene -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from . import ElkAttachedEntity, ElkEntity, create_elk_entities -from .const import DOMAIN -from .models import ELKM1Data +from . import ElkAttachedEntity, ElkEntity, ElkM1ConfigEntry, create_elk_entities async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: ElkM1ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Create the Elk-M1 scene platform.""" - elk_data: ELKM1Data = hass.data[DOMAIN][config_entry.entry_id] + elk_data = config_entry.runtime_data elk = elk_data.elk entities: list[ElkEntity] = [] create_elk_entities(elk_data, elk.tasks, "task", ElkTask, entities) diff --git a/homeassistant/components/elkm1/sensor.py b/homeassistant/components/elkm1/sensor.py index 27a6c1596eb..801a09b76eb 100644 --- a/homeassistant/components/elkm1/sensor.py +++ b/homeassistant/components/elkm1/sensor.py @@ -15,16 +15,14 @@ from elkm1_lib.zones import Zone import voluptuous as vol from homeassistant.components.sensor import SensorEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.const import EntityCategory, UnitOfElectricPotential from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import entity_platform from homeassistant.helpers.entity_platform import AddEntitiesCallback -from . import ElkAttachedEntity, ElkEntity, create_elk_entities -from .const import ATTR_VALUE, DOMAIN, ELK_USER_CODE_SERVICE_SCHEMA -from .models import ELKM1Data +from . import ElkAttachedEntity, ElkEntity, ElkM1ConfigEntry, create_elk_entities +from .const import ATTR_VALUE, ELK_USER_CODE_SERVICE_SCHEMA SERVICE_SENSOR_COUNTER_REFRESH = "sensor_counter_refresh" SERVICE_SENSOR_COUNTER_SET = "sensor_counter_set" @@ -39,11 +37,11 @@ ELK_SET_COUNTER_SERVICE_SCHEMA = { async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: ElkM1ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Create the Elk-M1 sensor platform.""" - elk_data: ELKM1Data = hass.data[DOMAIN][config_entry.entry_id] + elk_data = config_entry.runtime_data elk = elk_data.elk entities: list[ElkEntity] = [] create_elk_entities(elk_data, elk.counters, "counter", ElkCounter, entities) diff --git a/homeassistant/components/elkm1/switch.py b/homeassistant/components/elkm1/switch.py index 3224f9affcf..f4820f57b3d 100644 --- a/homeassistant/components/elkm1/switch.py +++ b/homeassistant/components/elkm1/switch.py @@ -7,22 +7,19 @@ from typing import Any from elkm1_lib.outputs import Output from homeassistant.components.switch import SwitchEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from . import ElkAttachedEntity, ElkEntity, create_elk_entities -from .const import DOMAIN -from .models import ELKM1Data +from . import ElkAttachedEntity, ElkEntity, ElkM1ConfigEntry, create_elk_entities async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: ElkM1ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Create the Elk-M1 switch platform.""" - elk_data: ELKM1Data = hass.data[DOMAIN][config_entry.entry_id] + elk_data = config_entry.runtime_data elk = elk_data.elk entities: list[ElkEntity] = [] create_elk_entities(elk_data, elk.outputs, "output", ElkOutput, entities)