Use runtime_data in duotecno (#136444)

This commit is contained in:
epenet 2025-01-24 15:13:53 +01:00 committed by GitHub
parent 2e78ab620f
commit f3e13f4662
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 28 additions and 39 deletions

View File

@ -10,8 +10,6 @@ from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, Platform
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
from .const import DOMAIN
PLATFORMS: list[Platform] = [ PLATFORMS: list[Platform] = [
Platform.BINARY_SENSOR, Platform.BINARY_SENSOR,
Platform.CLIMATE, Platform.CLIMATE,
@ -21,7 +19,10 @@ PLATFORMS: list[Platform] = [
] ]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: type DuotecnoConfigEntry = ConfigEntry[PyDuotecno]
async def async_setup_entry(hass: HomeAssistant, entry: DuotecnoConfigEntry) -> bool:
"""Set up duotecno from a config entry.""" """Set up duotecno from a config entry."""
controller = PyDuotecno() controller = PyDuotecno()
@ -31,14 +32,12 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
) )
except (OSError, InvalidPassword, LoadFailure) as err: except (OSError, InvalidPassword, LoadFailure) as err:
raise ConfigEntryNotReady from err raise ConfigEntryNotReady from err
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = controller
entry.runtime_data = controller
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: DuotecnoConfigEntry) -> bool:
"""Unload a config entry.""" """Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok

View File

@ -2,28 +2,25 @@
from __future__ import annotations from __future__ import annotations
from duotecno.controller import PyDuotecno
from duotecno.unit import ControlUnit, VirtualUnit from duotecno.unit import ControlUnit, VirtualUnit
from homeassistant.components.binary_sensor import BinarySensorEntity from homeassistant.components.binary_sensor import BinarySensorEntity
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 from . import DuotecnoConfigEntry
from .entity import DuotecnoEntity from .entity import DuotecnoEntity
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: DuotecnoConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up Duotecno binary sensor on config_entry.""" """Set up Duotecno binary sensor on config_entry."""
cntrl: PyDuotecno = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
DuotecnoBinarySensor(channel) DuotecnoBinarySensor(channel)
for channel in cntrl.get_units(["ControlUnit", "VirtualUnit"]) for channel in entry.runtime_data.get_units(["ControlUnit", "VirtualUnit"])
) )

View File

@ -4,7 +4,6 @@ from __future__ import annotations
from typing import Any, Final from typing import Any, Final
from duotecno.controller import PyDuotecno
from duotecno.unit import SensUnit from duotecno.unit import SensUnit
from homeassistant.components.climate import ( from homeassistant.components.climate import (
@ -12,12 +11,11 @@ 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 .const import DOMAIN from . import DuotecnoConfigEntry
from .entity import DuotecnoEntity, api_call from .entity import DuotecnoEntity, api_call
HVACMODE: Final = { HVACMODE: Final = {
@ -33,13 +31,13 @@ PRESETMODES_REVERSE: Final = {value: key for key, value in PRESETMODES.items()}
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: DuotecnoConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up Duotecno climate based on config_entry.""" """Set up Duotecno climate based on config_entry."""
cntrl: PyDuotecno = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
DuotecnoClimate(channel) for channel in cntrl.get_units(["SensUnit"]) DuotecnoClimate(channel)
for channel in entry.runtime_data.get_units(["SensUnit"])
) )

View File

@ -4,27 +4,25 @@ from __future__ import annotations
from typing import Any from typing import Any
from duotecno.controller import PyDuotecno
from duotecno.unit import DuoswitchUnit from duotecno.unit import DuoswitchUnit
from homeassistant.components.cover import CoverEntity, CoverEntityFeature from homeassistant.components.cover import CoverEntity, CoverEntityFeature
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 from . import DuotecnoConfigEntry
from .entity import DuotecnoEntity, api_call from .entity import DuotecnoEntity, api_call
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: DuotecnoConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the duoswitch endities.""" """Set up the duoswitch endities."""
cntrl: PyDuotecno = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
DuotecnoCover(channel) for channel in cntrl.get_units("DuoswitchUnit") DuotecnoCover(channel)
for channel in entry.runtime_data.get_units("DuoswitchUnit")
) )

View File

@ -2,26 +2,25 @@
from typing import Any from typing import Any
from duotecno.controller import PyDuotecno
from duotecno.unit import DimUnit from duotecno.unit import DimUnit
from homeassistant.components.light import ATTR_BRIGHTNESS, ColorMode, LightEntity from homeassistant.components.light import ATTR_BRIGHTNESS, ColorMode, LightEntity
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 from . import DuotecnoConfigEntry
from .entity import DuotecnoEntity, api_call from .entity import DuotecnoEntity, api_call
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: DuotecnoConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up Duotecno light based on config_entry.""" """Set up Duotecno light based on config_entry."""
cntrl: PyDuotecno = hass.data[DOMAIN][entry.entry_id] async_add_entities(
async_add_entities(DuotecnoLight(channel) for channel in cntrl.get_units("DimUnit")) DuotecnoLight(channel) for channel in entry.runtime_data.get_units("DimUnit")
)
class DuotecnoLight(DuotecnoEntity, LightEntity): class DuotecnoLight(DuotecnoEntity, LightEntity):

View File

@ -2,27 +2,25 @@
from typing import Any from typing import Any
from duotecno.controller import PyDuotecno
from duotecno.unit import SwitchUnit from duotecno.unit import SwitchUnit
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 from . import DuotecnoConfigEntry
from .entity import DuotecnoEntity, api_call from .entity import DuotecnoEntity, api_call
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: DuotecnoConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up Velbus switch based on config_entry.""" """Set up Velbus switch based on config_entry."""
cntrl: PyDuotecno = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
DuotecnoSwitch(channel) for channel in cntrl.get_units("SwitchUnit") DuotecnoSwitch(channel)
for channel in entry.runtime_data.get_units("SwitchUnit")
) )