Migrate livisi to use runtime_data (#147352)

This commit is contained in:
epenet
2025-06-23 19:09:38 +02:00
committed by GitHub
parent ce115cbfe1
commit dfa3fddd35
6 changed files with 27 additions and 37 deletions

View File

@ -8,19 +8,18 @@ from aiohttp import ClientConnectorError
from livisi.aiolivisi import AioLivisi from livisi.aiolivisi import AioLivisi
from homeassistant import core from homeassistant import core
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 homeassistant.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers import aiohttp_client, device_registry as dr from homeassistant.helpers import aiohttp_client, device_registry as dr
from .const import DOMAIN from .const import DOMAIN
from .coordinator import LivisiDataUpdateCoordinator from .coordinator import LivisiConfigEntry, LivisiDataUpdateCoordinator
PLATFORMS: Final = [Platform.BINARY_SENSOR, Platform.CLIMATE, Platform.SWITCH] PLATFORMS: Final = [Platform.BINARY_SENSOR, Platform.CLIMATE, Platform.SWITCH]
async def async_setup_entry(hass: core.HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: core.HomeAssistant, entry: LivisiConfigEntry) -> bool:
"""Set up Livisi Smart Home from a config entry.""" """Set up Livisi Smart Home from a config entry."""
web_session = aiohttp_client.async_get_clientsession(hass) web_session = aiohttp_client.async_get_clientsession(hass)
aiolivisi = AioLivisi(web_session) aiolivisi = AioLivisi(web_session)
@ -31,7 +30,7 @@ async def async_setup_entry(hass: core.HomeAssistant, entry: ConfigEntry) -> boo
except ClientConnectorError as exception: except ClientConnectorError as exception:
raise ConfigEntryNotReady from exception raise ConfigEntryNotReady from exception
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator entry.runtime_data = coordinator
device_registry = dr.async_get(hass) device_registry = dr.async_get(hass)
device_registry.async_get_or_create( device_registry.async_get_or_create(
config_entry_id=entry.entry_id, config_entry_id=entry.entry_id,
@ -45,16 +44,10 @@ async def async_setup_entry(hass: core.HomeAssistant, entry: ConfigEntry) -> boo
entry.async_create_background_task( entry.async_create_background_task(
hass, coordinator.ws_connect(), "livisi-ws_connect" hass, coordinator.ws_connect(), "livisi-ws_connect"
) )
entry.async_on_unload(coordinator.websocket.disconnect)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: LivisiConfigEntry) -> bool:
"""Unload a config entry.""" """Unload a config entry."""
coordinator = hass.data[DOMAIN][entry.entry_id] return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
unload_success = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await coordinator.websocket.disconnect()
if unload_success:
hass.data[DOMAIN].pop(entry.entry_id)
return unload_success

View File

@ -8,23 +8,22 @@ from homeassistant.components.binary_sensor import (
BinarySensorDeviceClass, BinarySensorDeviceClass,
BinarySensorEntity, BinarySensorEntity,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import DOMAIN, LIVISI_STATE_CHANGE, LOGGER, WDS_DEVICE_TYPE from .const import LIVISI_STATE_CHANGE, LOGGER, WDS_DEVICE_TYPE
from .coordinator import LivisiDataUpdateCoordinator from .coordinator import LivisiConfigEntry, LivisiDataUpdateCoordinator
from .entity import LivisiEntity from .entity import LivisiEntity
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
config_entry: ConfigEntry, config_entry: LivisiConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback, async_add_entities: AddConfigEntryEntitiesCallback,
) -> None: ) -> None:
"""Set up binary_sensor device.""" """Set up binary_sensor device."""
coordinator: LivisiDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] coordinator = config_entry.runtime_data
known_devices = set() known_devices = set()
@callback @callback
@ -53,7 +52,7 @@ class LivisiBinarySensor(LivisiEntity, BinarySensorEntity):
def __init__( def __init__(
self, self,
config_entry: ConfigEntry, config_entry: LivisiConfigEntry,
coordinator: LivisiDataUpdateCoordinator, coordinator: LivisiDataUpdateCoordinator,
device: dict[str, Any], device: dict[str, Any],
capability_name: str, capability_name: str,
@ -86,7 +85,7 @@ class LivisiWindowDoorSensor(LivisiBinarySensor):
def __init__( def __init__(
self, self,
config_entry: ConfigEntry, config_entry: LivisiConfigEntry,
coordinator: LivisiDataUpdateCoordinator, coordinator: LivisiDataUpdateCoordinator,
device: dict[str, Any], device: dict[str, Any],
) -> None: ) -> None:

View File

@ -11,7 +11,6 @@ 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, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
@ -19,24 +18,23 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import ( from .const import (
DOMAIN,
LIVISI_STATE_CHANGE, LIVISI_STATE_CHANGE,
LOGGER, LOGGER,
MAX_TEMPERATURE, MAX_TEMPERATURE,
MIN_TEMPERATURE, MIN_TEMPERATURE,
VRCC_DEVICE_TYPE, VRCC_DEVICE_TYPE,
) )
from .coordinator import LivisiDataUpdateCoordinator from .coordinator import LivisiConfigEntry, LivisiDataUpdateCoordinator
from .entity import LivisiEntity from .entity import LivisiEntity
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
config_entry: ConfigEntry, config_entry: LivisiConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback, async_add_entities: AddConfigEntryEntitiesCallback,
) -> None: ) -> None:
"""Set up climate device.""" """Set up climate device."""
coordinator: LivisiDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] coordinator = config_entry.runtime_data
@callback @callback
def handle_coordinator_update() -> None: def handle_coordinator_update() -> None:
@ -71,7 +69,7 @@ class LivisiClimate(LivisiEntity, ClimateEntity):
def __init__( def __init__(
self, self,
config_entry: ConfigEntry, config_entry: LivisiConfigEntry,
coordinator: LivisiDataUpdateCoordinator, coordinator: LivisiDataUpdateCoordinator,
device: dict[str, Any], device: dict[str, Any],
) -> None: ) -> None:

View File

@ -26,14 +26,16 @@ from .const import (
LOGGER, LOGGER,
) )
type LivisiConfigEntry = ConfigEntry[LivisiDataUpdateCoordinator]
class LivisiDataUpdateCoordinator(DataUpdateCoordinator[list[dict[str, Any]]]): class LivisiDataUpdateCoordinator(DataUpdateCoordinator[list[dict[str, Any]]]):
"""Class to manage fetching LIVISI data API.""" """Class to manage fetching LIVISI data API."""
config_entry: ConfigEntry config_entry: LivisiConfigEntry
def __init__( def __init__(
self, hass: HomeAssistant, config_entry: ConfigEntry, aiolivisi: AioLivisi self, hass: HomeAssistant, config_entry: LivisiConfigEntry, aiolivisi: AioLivisi
) -> None: ) -> None:
"""Initialize my coordinator.""" """Initialize my coordinator."""
super().__init__( super().__init__(

View File

@ -7,14 +7,13 @@ from typing import Any
from livisi.const import CAPABILITY_MAP from livisi.const import CAPABILITY_MAP
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN, LIVISI_REACHABILITY_CHANGE from .const import DOMAIN, LIVISI_REACHABILITY_CHANGE
from .coordinator import LivisiDataUpdateCoordinator from .coordinator import LivisiConfigEntry, LivisiDataUpdateCoordinator
class LivisiEntity(CoordinatorEntity[LivisiDataUpdateCoordinator]): class LivisiEntity(CoordinatorEntity[LivisiDataUpdateCoordinator]):
@ -24,7 +23,7 @@ class LivisiEntity(CoordinatorEntity[LivisiDataUpdateCoordinator]):
def __init__( def __init__(
self, self,
config_entry: ConfigEntry, config_entry: LivisiConfigEntry,
coordinator: LivisiDataUpdateCoordinator, coordinator: LivisiDataUpdateCoordinator,
device: dict[str, Any], device: dict[str, Any],
*, *,

View File

@ -5,24 +5,23 @@ from __future__ import annotations
from typing import Any from typing import Any
from homeassistant.components.switch import SwitchEntity from homeassistant.components.switch import SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import DOMAIN, LIVISI_STATE_CHANGE, LOGGER, SWITCH_DEVICE_TYPES from .const import LIVISI_STATE_CHANGE, LOGGER, SWITCH_DEVICE_TYPES
from .coordinator import LivisiDataUpdateCoordinator from .coordinator import LivisiConfigEntry, LivisiDataUpdateCoordinator
from .entity import LivisiEntity from .entity import LivisiEntity
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
config_entry: ConfigEntry, config_entry: LivisiConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback, async_add_entities: AddConfigEntryEntitiesCallback,
) -> None: ) -> None:
"""Set up switch device.""" """Set up switch device."""
coordinator: LivisiDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] coordinator = config_entry.runtime_data
@callback @callback
def handle_coordinator_update() -> None: def handle_coordinator_update() -> None:
@ -52,7 +51,7 @@ class LivisiSwitch(LivisiEntity, SwitchEntity):
def __init__( def __init__(
self, self,
config_entry: ConfigEntry, config_entry: LivisiConfigEntry,
coordinator: LivisiDataUpdateCoordinator, coordinator: LivisiDataUpdateCoordinator,
device: dict[str, Any], device: dict[str, Any],
) -> None: ) -> None: