Use runtime_data in melnor (#148013)

This commit is contained in:
epenet 2025-07-03 08:52:40 +02:00 committed by GitHub
parent a6962e9e1e
commit 6f4757ef42
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 22 additions and 39 deletions

View File

@ -6,13 +6,11 @@ from melnor_bluetooth.device import Device
from homeassistant.components import bluetooth from homeassistant.components import bluetooth
from homeassistant.components.bluetooth.match import BluetoothCallbackMatcher from homeassistant.components.bluetooth.match import BluetoothCallbackMatcher
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_ADDRESS, Platform from homeassistant.const import CONF_ADDRESS, Platform
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
from .const import DOMAIN from .coordinator import MelnorConfigEntry, MelnorDataUpdateCoordinator
from .coordinator import MelnorDataUpdateCoordinator
PLATFORMS: list[Platform] = [ PLATFORMS: list[Platform] = [
Platform.NUMBER, Platform.NUMBER,
@ -22,11 +20,8 @@ PLATFORMS: list[Platform] = [
] ]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: MelnorConfigEntry) -> bool:
"""Set up melnor from a config entry.""" """Set up melnor from a config entry."""
hass.data.setdefault(DOMAIN, {}).setdefault(entry.entry_id, {})
ble_device = bluetooth.async_ble_device_from_address(hass, entry.data[CONF_ADDRESS]) ble_device = bluetooth.async_ble_device_from_address(hass, entry.data[CONF_ADDRESS])
if not ble_device: if not ble_device:
@ -60,20 +55,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
coordinator = MelnorDataUpdateCoordinator(hass, entry, device) coordinator = MelnorDataUpdateCoordinator(hass, entry, device)
await coordinator.async_config_entry_first_refresh() await coordinator.async_config_entry_first_refresh()
hass.data[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)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: MelnorConfigEntry) -> bool:
"""Unload a config entry.""" """Unload a config entry."""
await entry.runtime_data.data.disconnect()
device: Device = hass.data[DOMAIN][entry.entry_id].data return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await device.disconnect()
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok

View File

@ -11,15 +11,17 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
type MelnorConfigEntry = ConfigEntry[MelnorDataUpdateCoordinator]
class MelnorDataUpdateCoordinator(DataUpdateCoordinator[Device]): class MelnorDataUpdateCoordinator(DataUpdateCoordinator[Device]):
"""Melnor data update coordinator.""" """Melnor data update coordinator."""
config_entry: ConfigEntry config_entry: MelnorConfigEntry
_device: Device _device: Device
def __init__( def __init__(
self, hass: HomeAssistant, config_entry: ConfigEntry, device: Device self, hass: HomeAssistant, config_entry: MelnorConfigEntry, device: Device
) -> None: ) -> None:
"""Initialize my coordinator.""" """Initialize my coordinator."""
super().__init__( super().__init__(

View File

@ -13,13 +13,11 @@ from homeassistant.components.number import (
NumberEntityDescription, NumberEntityDescription,
NumberMode, NumberMode,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory, UnitOfTime from homeassistant.const import EntityCategory, UnitOfTime
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import DOMAIN from .coordinator import MelnorConfigEntry, MelnorDataUpdateCoordinator
from .coordinator import MelnorDataUpdateCoordinator
from .entity import MelnorZoneEntity, get_entities_for_valves from .entity import MelnorZoneEntity, get_entities_for_valves
@ -67,12 +65,12 @@ ZONE_ENTITY_DESCRIPTIONS: list[MelnorZoneNumberEntityDescription] = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
config_entry: ConfigEntry, config_entry: MelnorConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback, async_add_entities: AddConfigEntryEntitiesCallback,
) -> None: ) -> None:
"""Set up the number platform.""" """Set up the number platform."""
coordinator: MelnorDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] coordinator = config_entry.runtime_data
async_add_entities( async_add_entities(
get_entities_for_valves( get_entities_for_valves(

View File

@ -15,7 +15,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_MILLIWATT, SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
@ -26,8 +25,7 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.typing import StateType from homeassistant.helpers.typing import StateType
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
from .const import DOMAIN from .coordinator import MelnorConfigEntry, MelnorDataUpdateCoordinator
from .coordinator import MelnorDataUpdateCoordinator
from .entity import MelnorBluetoothEntity, MelnorZoneEntity, get_entities_for_valves from .entity import MelnorBluetoothEntity, MelnorZoneEntity, get_entities_for_valves
@ -104,12 +102,12 @@ ZONE_ENTITY_DESCRIPTIONS: list[MelnorZoneSensorEntityDescription] = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
config_entry: ConfigEntry, config_entry: MelnorConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback, async_add_entities: AddConfigEntryEntitiesCallback,
) -> None: ) -> None:
"""Set up the sensor platform.""" """Set up the sensor platform."""
coordinator: MelnorDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] coordinator = config_entry.runtime_data
# Device-level sensors # Device-level sensors
async_add_entities( async_add_entities(

View File

@ -13,12 +13,10 @@ from homeassistant.components.switch import (
SwitchEntity, SwitchEntity,
SwitchEntityDescription, SwitchEntityDescription,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import DOMAIN from .coordinator import MelnorConfigEntry, MelnorDataUpdateCoordinator
from .coordinator import MelnorDataUpdateCoordinator
from .entity import MelnorZoneEntity, get_entities_for_valves from .entity import MelnorZoneEntity, get_entities_for_valves
@ -51,12 +49,12 @@ ZONE_ENTITY_DESCRIPTIONS = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
config_entry: ConfigEntry, config_entry: MelnorConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback, async_add_entities: AddConfigEntryEntitiesCallback,
) -> None: ) -> None:
"""Set up the switch platform.""" """Set up the switch platform."""
coordinator: MelnorDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] coordinator = config_entry.runtime_data
async_add_entities( async_add_entities(
get_entities_for_valves( get_entities_for_valves(

View File

@ -10,13 +10,11 @@ from typing import Any
from melnor_bluetooth.device import Valve from melnor_bluetooth.device import Valve
from homeassistant.components.time import TimeEntity, TimeEntityDescription from homeassistant.components.time import TimeEntity, TimeEntityDescription
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 AddConfigEntryEntitiesCallback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import DOMAIN from .coordinator import MelnorConfigEntry, MelnorDataUpdateCoordinator
from .coordinator import MelnorDataUpdateCoordinator
from .entity import MelnorZoneEntity, get_entities_for_valves from .entity import MelnorZoneEntity, get_entities_for_valves
@ -41,12 +39,12 @@ ZONE_ENTITY_DESCRIPTIONS: list[MelnorZoneTimeEntityDescription] = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
config_entry: ConfigEntry, config_entry: MelnorConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback, async_add_entities: AddConfigEntryEntitiesCallback,
) -> None: ) -> None:
"""Set up the number platform.""" """Set up the number platform."""
coordinator: MelnorDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] coordinator = config_entry.runtime_data
async_add_entities( async_add_entities(
get_entities_for_valves( get_entities_for_valves(