diff --git a/homeassistant/components/econet/__init__.py b/homeassistant/components/econet/__init__.py index 4fd920a5ecc..40bece93599 100644 --- a/homeassistant/components/econet/__init__.py +++ b/homeassistant/components/econet/__init__.py @@ -6,7 +6,7 @@ import logging from aiohttp.client_exceptions import ClientError from pyeconet import EcoNetApiInterface -from pyeconet.equipment import EquipmentType +from pyeconet.equipment import Equipment, EquipmentType from pyeconet.errors import ( GenericHTTPError, InvalidCredentialsError, @@ -21,7 +21,7 @@ from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers.dispatcher import dispatcher_send from homeassistant.helpers.event import async_track_time_interval -from .const import API_CLIENT, DOMAIN, EQUIPMENT, PUSH_UPDATE +from .const import PUSH_UPDATE _LOGGER = logging.getLogger(__name__) @@ -36,7 +36,12 @@ PLATFORMS = [ INTERVAL = timedelta(minutes=60) -async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: +type EconetConfigEntry = ConfigEntry[dict[EquipmentType, list[Equipment]]] + + +async def async_setup_entry( + hass: HomeAssistant, config_entry: EconetConfigEntry +) -> bool: """Set up EcoNet as config entry.""" email = config_entry.data[CONF_EMAIL] @@ -57,9 +62,8 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b ) except (ClientError, GenericHTTPError, InvalidResponseFormat) as err: raise ConfigEntryNotReady from err - hass.data.setdefault(DOMAIN, {API_CLIENT: {}, EQUIPMENT: {}}) - hass.data[DOMAIN][API_CLIENT][config_entry.entry_id] = api - hass.data[DOMAIN][EQUIPMENT][config_entry.entry_id] = equipment + + config_entry.runtime_data = equipment await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS) @@ -89,10 +93,6 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b return True -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry(hass: HomeAssistant, entry: EconetConfigEntry) -> bool: """Unload a EcoNet config entry.""" - unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) - if unload_ok: - hass.data[DOMAIN][API_CLIENT].pop(entry.entry_id) - hass.data[DOMAIN][EQUIPMENT].pop(entry.entry_id) - return unload_ok + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) diff --git a/homeassistant/components/econet/binary_sensor.py b/homeassistant/components/econet/binary_sensor.py index 0f5cb6f92af..d66a8536bd0 100644 --- a/homeassistant/components/econet/binary_sensor.py +++ b/homeassistant/components/econet/binary_sensor.py @@ -9,11 +9,10 @@ from homeassistant.components.binary_sensor import ( BinarySensorEntity, BinarySensorEntityDescription, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN, EQUIPMENT +from . import EconetConfigEntry from .entity import EcoNetEntity BINARY_SENSOR_TYPES: tuple[BinarySensorEntityDescription, ...] = ( @@ -41,10 +40,12 @@ BINARY_SENSOR_TYPES: tuple[BinarySensorEntityDescription, ...] = ( async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: EconetConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up EcoNet binary sensor based on a config entry.""" - equipment = hass.data[DOMAIN][EQUIPMENT][entry.entry_id] + equipment = entry.runtime_data all_equipment = equipment[EquipmentType.WATER_HEATER].copy() all_equipment.extend(equipment[EquipmentType.THERMOSTAT].copy()) diff --git a/homeassistant/components/econet/climate.py b/homeassistant/components/econet/climate.py index cdf82f6817f..1ebb7e483d4 100644 --- a/homeassistant/components/econet/climate.py +++ b/homeassistant/components/econet/climate.py @@ -16,13 +16,13 @@ from homeassistant.components.climate import ( ClimateEntityFeature, HVACMode, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue -from .const import DOMAIN, EQUIPMENT +from . import EconetConfigEntry +from .const import DOMAIN from .entity import EcoNetEntity ECONET_STATE_TO_HA = { @@ -51,10 +51,12 @@ SUPPORT_FLAGS_THERMOSTAT = ( async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: EconetConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up EcoNet thermostat based on a config entry.""" - equipment = hass.data[DOMAIN][EQUIPMENT][entry.entry_id] + equipment = entry.runtime_data async_add_entities( [ EcoNetThermostat(thermostat) diff --git a/homeassistant/components/econet/const.py b/homeassistant/components/econet/const.py index ee8d4fc8a46..78384f7683d 100644 --- a/homeassistant/components/econet/const.py +++ b/homeassistant/components/econet/const.py @@ -1,7 +1,5 @@ """Constants for Econet integration.""" DOMAIN = "econet" -API_CLIENT = "api_client" -EQUIPMENT = "equipment" PUSH_UPDATE = "econet.push_update" diff --git a/homeassistant/components/econet/sensor.py b/homeassistant/components/econet/sensor.py index 19bac8c9e1f..510906d699c 100644 --- a/homeassistant/components/econet/sensor.py +++ b/homeassistant/components/econet/sensor.py @@ -10,7 +10,6 @@ from homeassistant.components.sensor import ( SensorEntityDescription, SensorStateClass, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( PERCENTAGE, SIGNAL_STRENGTH_DECIBELS, @@ -21,7 +20,7 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN, EQUIPMENT +from . import EconetConfigEntry from .entity import EcoNetEntity SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( @@ -82,11 +81,13 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: EconetConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up EcoNet sensor based on a config entry.""" - data = hass.data[DOMAIN][EQUIPMENT][entry.entry_id] + data = entry.runtime_data equipment = data[EquipmentType.WATER_HEATER].copy() equipment.extend(data[EquipmentType.THERMOSTAT].copy()) diff --git a/homeassistant/components/econet/switch.py b/homeassistant/components/econet/switch.py index e36f6c834b1..283256f25e3 100644 --- a/homeassistant/components/econet/switch.py +++ b/homeassistant/components/econet/switch.py @@ -9,11 +9,10 @@ from pyeconet.equipment import EquipmentType from pyeconet.equipment.thermostat import ThermostatOperationMode 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 .const import DOMAIN, EQUIPMENT +from . import EconetConfigEntry from .entity import EcoNetEntity _LOGGER = logging.getLogger(__name__) @@ -21,11 +20,11 @@ _LOGGER = logging.getLogger(__name__) async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: EconetConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up the ecobee thermostat switch entity.""" - equipment = hass.data[DOMAIN][EQUIPMENT][entry.entry_id] + equipment = entry.runtime_data async_add_entities( EcoNetSwitchAuxHeatOnly(thermostat) for thermostat in equipment[EquipmentType.THERMOSTAT] diff --git a/homeassistant/components/econet/water_heater.py b/homeassistant/components/econet/water_heater.py index efe4196993c..fc3fe5e4bdf 100644 --- a/homeassistant/components/econet/water_heater.py +++ b/homeassistant/components/econet/water_heater.py @@ -17,12 +17,11 @@ from homeassistant.components.water_heater import ( WaterHeaterEntity, WaterHeaterEntityFeature, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, UnitOfTemperature from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN, EQUIPMENT +from . import EconetConfigEntry from .entity import EcoNetEntity SCAN_INTERVAL = timedelta(hours=1) @@ -47,10 +46,12 @@ SUPPORT_FLAGS_HEATER = ( async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: EconetConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up EcoNet water heater based on a config entry.""" - equipment = hass.data[DOMAIN][EQUIPMENT][entry.entry_id] + equipment = entry.runtime_data async_add_entities( [ EcoNetWaterHeater(water_heater) diff --git a/tests/components/econet/test_config_flow.py b/tests/components/econet/test_config_flow.py index 2ef10c1bd41..2fc4356d1d8 100644 --- a/tests/components/econet/test_config_flow.py +++ b/tests/components/econet/test_config_flow.py @@ -5,7 +5,7 @@ from unittest.mock import patch from pyeconet.api import EcoNetApiInterface from pyeconet.errors import InvalidCredentialsError, PyeconetError -from homeassistant.components.econet import DOMAIN +from homeassistant.components.econet.const import DOMAIN from homeassistant.config_entries import SOURCE_USER from homeassistant.const import CONF_EMAIL, CONF_PASSWORD from homeassistant.core import HomeAssistant