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 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)

View File

@ -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())

View File

@ -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)

View File

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

View File

@ -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())

View File

@ -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]

View File

@ -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)

View File

@ -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