Use ConfigEntry runtime_data in TechnoVE (#121410)

This commit is contained in:
Christophe Gagnier 2024-07-07 14:21:28 -04:00 committed by GitHub
parent cd72bdd851
commit 8110b60fc9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 32 additions and 42 deletions

View File

@ -6,18 +6,19 @@ from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform from homeassistant.const import Platform
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from .const import DOMAIN
from .coordinator import TechnoVEDataUpdateCoordinator from .coordinator import TechnoVEDataUpdateCoordinator
PLATFORMS = [Platform.BINARY_SENSOR, Platform.NUMBER, Platform.SENSOR, Platform.SWITCH] PLATFORMS = [Platform.BINARY_SENSOR, Platform.NUMBER, Platform.SENSOR, Platform.SWITCH]
TechnoVEConfigEntry = ConfigEntry[TechnoVEDataUpdateCoordinator]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: TechnoVEConfigEntry) -> bool:
"""Set up TechnoVE from a config entry.""" """Set up TechnoVE from a config entry."""
coordinator = TechnoVEDataUpdateCoordinator(hass) coordinator = TechnoVEDataUpdateCoordinator(hass, entry)
await coordinator.async_config_entry_first_refresh() await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
@ -26,7 +27,4 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> 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

@ -12,12 +12,11 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntity, BinarySensorEntity,
BinarySensorEntityDescription, BinarySensorEntityDescription,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory from homeassistant.const import EntityCategory
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 TechnoVEConfigEntry
from .coordinator import TechnoVEDataUpdateCoordinator from .coordinator import TechnoVEDataUpdateCoordinator
from .entity import TechnoVEEntity from .entity import TechnoVEEntity
@ -72,13 +71,12 @@ BINARY_SENSORS = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: TechnoVEConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the binary sensor platform.""" """Set up the binary sensor platform."""
coordinator: TechnoVEDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
TechnoVEBinarySensorEntity(coordinator, description) TechnoVEBinarySensorEntity(entry.runtime_data, description)
for description in BINARY_SENSORS for description in BINARY_SENSORS
) )

View File

@ -2,9 +2,10 @@
from __future__ import annotations from __future__ import annotations
from typing import TYPE_CHECKING
from technove import Station as TechnoVEStation, TechnoVE, TechnoVEError from technove import Station as TechnoVEStation, TechnoVE, TechnoVEError
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST from homeassistant.const import CONF_HOST
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
@ -12,24 +13,25 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda
from .const import DOMAIN, LOGGER, SCAN_INTERVAL from .const import DOMAIN, LOGGER, SCAN_INTERVAL
if TYPE_CHECKING:
from . import TechnoVEConfigEntry
class TechnoVEDataUpdateCoordinator(DataUpdateCoordinator[TechnoVEStation]): class TechnoVEDataUpdateCoordinator(DataUpdateCoordinator[TechnoVEStation]):
"""Class to manage fetching TechnoVE data from single endpoint.""" """Class to manage fetching TechnoVE data from single endpoint."""
config_entry: ConfigEntry def __init__(self, hass: HomeAssistant, entry: TechnoVEConfigEntry) -> None:
def __init__(self, hass: HomeAssistant) -> None:
"""Initialize global TechnoVE data updater.""" """Initialize global TechnoVE data updater."""
self.technove = TechnoVE(
entry.data[CONF_HOST],
session=async_get_clientsession(hass),
)
super().__init__( super().__init__(
hass, hass,
LOGGER, LOGGER,
name=DOMAIN, name=DOMAIN,
update_interval=SCAN_INTERVAL, update_interval=SCAN_INTERVAL,
) )
self.technove = TechnoVE(
self.config_entry.data[CONF_HOST],
session=async_get_clientsession(hass),
)
async def _async_update_data(self) -> TechnoVEStation: async def _async_update_data(self) -> TechnoVEStation:
"""Fetch data from TechnoVE.""" """Fetch data from TechnoVE."""

View File

@ -6,18 +6,15 @@ from dataclasses import asdict
from typing import Any from typing import Any
from homeassistant.components.diagnostics import async_redact_data from homeassistant.components.diagnostics import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from .const import DOMAIN from . import TechnoVEConfigEntry
from .coordinator import TechnoVEDataUpdateCoordinator
TO_REDACT = {"unique_id", "mac_address"} TO_REDACT = {"unique_id", "mac_address"}
async def async_get_config_entry_diagnostics( async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: ConfigEntry hass: HomeAssistant, entry: TechnoVEConfigEntry
) -> dict[str, Any]: ) -> dict[str, Any]:
"""Return diagnostics for a config entry.""" """Return diagnostics for a config entry."""
coordinator: TechnoVEDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] return async_redact_data(asdict(entry.runtime_data.data.info), TO_REDACT)
return async_redact_data(asdict(coordinator.data.info), TO_REDACT)

View File

@ -14,12 +14,12 @@ from homeassistant.components.number import (
NumberEntityDescription, NumberEntityDescription,
NumberMode, NumberMode,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ServiceValidationError from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import TechnoVEConfigEntry
from .const import DOMAIN from .const import DOMAIN
from .coordinator import TechnoVEDataUpdateCoordinator from .coordinator import TechnoVEDataUpdateCoordinator
from .entity import TechnoVEEntity from .entity import TechnoVEEntity
@ -65,14 +65,12 @@ NUMBERS = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: TechnoVEConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up TechnoVE number entity based on a config entry.""" """Set up TechnoVE number entity based on a config entry."""
coordinator: TechnoVEDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
TechnoVENumberEntity(coordinator, description) for description in NUMBERS TechnoVENumberEntity(entry.runtime_data, description) for description in NUMBERS
) )

View File

@ -13,7 +13,6 @@ from homeassistant.components.sensor import (
SensorEntityDescription, SensorEntityDescription,
SensorStateClass, SensorStateClass,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( from homeassistant.const import (
SIGNAL_STRENGTH_DECIBELS_MILLIWATT, SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
EntityCategory, EntityCategory,
@ -25,7 +24,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType from homeassistant.helpers.typing import StateType
from .const import DOMAIN from . import TechnoVEConfigEntry
from .coordinator import TechnoVEDataUpdateCoordinator from .coordinator import TechnoVEDataUpdateCoordinator
from .entity import TechnoVEEntity from .entity import TechnoVEEntity
@ -122,13 +121,12 @@ SENSORS: tuple[TechnoVESensorEntityDescription, ...] = (
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: TechnoVEConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the sensor platform.""" """Set up the sensor platform."""
coordinator: TechnoVEDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
TechnoVESensorEntity(coordinator, description) for description in SENSORS TechnoVESensorEntity(entry.runtime_data, description) for description in SENSORS
) )

View File

@ -9,12 +9,11 @@ from typing import Any
from technove import Station as TechnoVEStation, TechnoVE from technove import Station as TechnoVEStation, TechnoVE
from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory from homeassistant.const import EntityCategory
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 TechnoVEConfigEntry
from .coordinator import TechnoVEDataUpdateCoordinator from .coordinator import TechnoVEDataUpdateCoordinator
from .entity import TechnoVEEntity from .entity import TechnoVEEntity
from .helpers import technove_exception_handler from .helpers import technove_exception_handler
@ -43,14 +42,14 @@ SWITCHES = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: TechnoVEConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up TechnoVE switch based on a config entry.""" """Set up TechnoVE switch based on a config entry."""
coordinator: TechnoVEDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
TechnoVESwitchEntity(coordinator, description) for description in SWITCHES TechnoVESwitchEntity(entry.runtime_data, description)
for description in SWITCHES
) )