Use runtime_data in econet (#136691)

This commit is contained in:
epenet 2025-01-28 11:25:27 +01:00 committed by GitHub
parent b1a4ba7b7c
commit ff73545a86
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 37 additions and 35 deletions

View File

@ -6,7 +6,7 @@ import logging
from aiohttp.client_exceptions import ClientError from aiohttp.client_exceptions import ClientError
from pyeconet import EcoNetApiInterface from pyeconet import EcoNetApiInterface
from pyeconet.equipment import EquipmentType from pyeconet.equipment import Equipment, EquipmentType
from pyeconet.errors import ( from pyeconet.errors import (
GenericHTTPError, GenericHTTPError,
InvalidCredentialsError, InvalidCredentialsError,
@ -21,7 +21,7 @@ from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers.dispatcher import dispatcher_send from homeassistant.helpers.dispatcher import dispatcher_send
from homeassistant.helpers.event import async_track_time_interval 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__) _LOGGER = logging.getLogger(__name__)
@ -36,7 +36,12 @@ PLATFORMS = [
INTERVAL = timedelta(minutes=60) 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.""" """Set up EcoNet as config entry."""
email = config_entry.data[CONF_EMAIL] 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: except (ClientError, GenericHTTPError, InvalidResponseFormat) as err:
raise ConfigEntryNotReady from err raise ConfigEntryNotReady from err
hass.data.setdefault(DOMAIN, {API_CLIENT: {}, EQUIPMENT: {}})
hass.data[DOMAIN][API_CLIENT][config_entry.entry_id] = api config_entry.runtime_data = equipment
hass.data[DOMAIN][EQUIPMENT][config_entry.entry_id] = equipment
await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS) 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 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 a EcoNet config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) return 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

View File

@ -9,11 +9,10 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntity, BinarySensorEntity,
BinarySensorEntityDescription, BinarySensorEntityDescription,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN, EQUIPMENT from . import EconetConfigEntry
from .entity import EcoNetEntity from .entity import EcoNetEntity
BINARY_SENSOR_TYPES: tuple[BinarySensorEntityDescription, ...] = ( BINARY_SENSOR_TYPES: tuple[BinarySensorEntityDescription, ...] = (
@ -41,10 +40,12 @@ BINARY_SENSOR_TYPES: tuple[BinarySensorEntityDescription, ...] = (
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant,
entry: EconetConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up EcoNet binary sensor based on a config entry.""" """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 = equipment[EquipmentType.WATER_HEATER].copy()
all_equipment.extend(equipment[EquipmentType.THERMOSTAT].copy()) all_equipment.extend(equipment[EquipmentType.THERMOSTAT].copy())

View File

@ -16,13 +16,13 @@ from homeassistant.components.climate import (
ClimateEntityFeature, ClimateEntityFeature,
HVACMode, HVACMode,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue 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 from .entity import EcoNetEntity
ECONET_STATE_TO_HA = { ECONET_STATE_TO_HA = {
@ -51,10 +51,12 @@ SUPPORT_FLAGS_THERMOSTAT = (
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant,
entry: EconetConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up EcoNet thermostat based on a config entry.""" """Set up EcoNet thermostat based on a config entry."""
equipment = hass.data[DOMAIN][EQUIPMENT][entry.entry_id] equipment = entry.runtime_data
async_add_entities( async_add_entities(
[ [
EcoNetThermostat(thermostat) EcoNetThermostat(thermostat)

View File

@ -1,7 +1,5 @@
"""Constants for Econet integration.""" """Constants for Econet integration."""
DOMAIN = "econet" DOMAIN = "econet"
API_CLIENT = "api_client"
EQUIPMENT = "equipment"
PUSH_UPDATE = "econet.push_update" PUSH_UPDATE = "econet.push_update"

View File

@ -10,7 +10,6 @@ from homeassistant.components.sensor import (
SensorEntityDescription, SensorEntityDescription,
SensorStateClass, SensorStateClass,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( from homeassistant.const import (
PERCENTAGE, PERCENTAGE,
SIGNAL_STRENGTH_DECIBELS, SIGNAL_STRENGTH_DECIBELS,
@ -21,7 +20,7 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN, EQUIPMENT from . import EconetConfigEntry
from .entity import EcoNetEntity from .entity import EcoNetEntity
SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
@ -82,11 +81,13 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant,
entry: EconetConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up EcoNet sensor based on a config entry.""" """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 = data[EquipmentType.WATER_HEATER].copy()
equipment.extend(data[EquipmentType.THERMOSTAT].copy()) equipment.extend(data[EquipmentType.THERMOSTAT].copy())

View File

@ -9,11 +9,10 @@ from pyeconet.equipment import EquipmentType
from pyeconet.equipment.thermostat import ThermostatOperationMode from pyeconet.equipment.thermostat import ThermostatOperationMode
from homeassistant.components.switch import SwitchEntity from homeassistant.components.switch import SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN, EQUIPMENT from . import EconetConfigEntry
from .entity import EcoNetEntity from .entity import EcoNetEntity
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -21,11 +20,11 @@ _LOGGER = logging.getLogger(__name__)
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: EconetConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the ecobee thermostat switch entity.""" """Set up the ecobee thermostat switch entity."""
equipment = hass.data[DOMAIN][EQUIPMENT][entry.entry_id] equipment = entry.runtime_data
async_add_entities( async_add_entities(
EcoNetSwitchAuxHeatOnly(thermostat) EcoNetSwitchAuxHeatOnly(thermostat)
for thermostat in equipment[EquipmentType.THERMOSTAT] for thermostat in equipment[EquipmentType.THERMOSTAT]

View File

@ -17,12 +17,11 @@ from homeassistant.components.water_heater import (
WaterHeaterEntity, WaterHeaterEntity,
WaterHeaterEntityFeature, WaterHeaterEntityFeature,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, UnitOfTemperature from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, UnitOfTemperature
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN, EQUIPMENT from . import EconetConfigEntry
from .entity import EcoNetEntity from .entity import EcoNetEntity
SCAN_INTERVAL = timedelta(hours=1) SCAN_INTERVAL = timedelta(hours=1)
@ -47,10 +46,12 @@ SUPPORT_FLAGS_HEATER = (
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant,
entry: EconetConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up EcoNet water heater based on a config entry.""" """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( async_add_entities(
[ [
EcoNetWaterHeater(water_heater) EcoNetWaterHeater(water_heater)

View File

@ -5,7 +5,7 @@ from unittest.mock import patch
from pyeconet.api import EcoNetApiInterface from pyeconet.api import EcoNetApiInterface
from pyeconet.errors import InvalidCredentialsError, PyeconetError 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.config_entries import SOURCE_USER
from homeassistant.const import CONF_EMAIL, CONF_PASSWORD from homeassistant.const import CONF_EMAIL, CONF_PASSWORD
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant