Use entry.runtime_data in fibaro (#133235)

This commit is contained in:
rappenze 2024-12-15 11:49:23 +01:00 committed by GitHub
parent 314076b85f
commit 14a61d94e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 35 additions and 52 deletions

View File

@ -28,8 +28,9 @@ from homeassistant.util import slugify
from .const import CONF_IMPORT_PLUGINS, DOMAIN from .const import CONF_IMPORT_PLUGINS, DOMAIN
_LOGGER = logging.getLogger(__name__) type FibaroConfigEntry = ConfigEntry[FibaroController]
_LOGGER = logging.getLogger(__name__)
PLATFORMS = [ PLATFORMS = [
Platform.BINARY_SENSOR, Platform.BINARY_SENSOR,
@ -381,7 +382,7 @@ def init_controller(data: Mapping[str, Any]) -> FibaroController:
return controller return controller
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: FibaroConfigEntry) -> bool:
"""Set up the Fibaro Component. """Set up the Fibaro Component.
The unique id of the config entry is the serial number of the home center. The unique id of the config entry is the serial number of the home center.
@ -395,7 +396,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
except FibaroAuthFailed as auth_ex: except FibaroAuthFailed as auth_ex:
raise ConfigEntryAuthFailed from auth_ex raise ConfigEntryAuthFailed from auth_ex
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = controller entry.runtime_data = controller
# register the hub device info separately as the hub has sometimes no entities # register the hub device info separately as the hub has sometimes no entities
device_registry = dr.async_get(hass) device_registry = dr.async_get(hass)
@ -417,25 +418,24 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: FibaroConfigEntry) -> bool:
"""Unload a config entry.""" """Unload a config entry."""
_LOGGER.debug("Shutting down Fibaro connection") _LOGGER.debug("Shutting down Fibaro connection")
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
hass.data[DOMAIN][entry.entry_id].disable_state_handler() entry.runtime_data.disable_state_handler()
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok return unload_ok
async def async_remove_config_entry_device( async def async_remove_config_entry_device(
hass: HomeAssistant, config_entry: ConfigEntry, device_entry: DeviceEntry hass: HomeAssistant, config_entry: FibaroConfigEntry, device_entry: DeviceEntry
) -> bool: ) -> bool:
"""Remove a device entry from fibaro integration. """Remove a device entry from fibaro integration.
Only removing devices which are not present anymore are eligible to be removed. Only removing devices which are not present anymore are eligible to be removed.
""" """
controller: FibaroController = hass.data[DOMAIN][config_entry.entry_id] controller = config_entry.runtime_data
for identifiers in controller.get_all_device_identifiers(): for identifiers in controller.get_all_device_identifiers():
if device_entry.identifiers == identifiers: if device_entry.identifiers == identifiers:
# Fibaro device is still served by the controller, # Fibaro device is still served by the controller,

View File

@ -12,13 +12,11 @@ from homeassistant.components.binary_sensor import (
BinarySensorDeviceClass, BinarySensorDeviceClass,
BinarySensorEntity, BinarySensorEntity,
) )
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.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FibaroController from . import FibaroConfigEntry
from .const import DOMAIN
from .entity import FibaroEntity from .entity import FibaroEntity
SENSOR_TYPES = { SENSOR_TYPES = {
@ -43,11 +41,11 @@ SENSOR_TYPES = {
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: FibaroConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Perform the setup for Fibaro controller devices.""" """Perform the setup for Fibaro controller devices."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id] controller = entry.runtime_data
async_add_entities( async_add_entities(
[ [
FibaroBinarySensor(device) FibaroBinarySensor(device)

View File

@ -17,13 +17,11 @@ from homeassistant.components.climate import (
HVACAction, HVACAction,
HVACMode, HVACMode,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, Platform, UnitOfTemperature from homeassistant.const import ATTR_TEMPERATURE, Platform, 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 . import FibaroController from . import FibaroConfigEntry
from .const import DOMAIN
from .entity import FibaroEntity from .entity import FibaroEntity
PRESET_RESUME = "resume" PRESET_RESUME = "resume"
@ -111,11 +109,11 @@ OP_MODE_ACTIONS = ("setMode", "setOperatingMode", "setThermostatMode")
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: FibaroConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Perform the setup for Fibaro controller devices.""" """Perform the setup for Fibaro controller devices."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id] controller = entry.runtime_data
async_add_entities( async_add_entities(
[ [
FibaroThermostat(device) FibaroThermostat(device)

View File

@ -13,23 +13,21 @@ from homeassistant.components.cover import (
CoverEntity, CoverEntity,
CoverEntityFeature, CoverEntityFeature,
) )
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.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FibaroController from . import FibaroConfigEntry
from .const import DOMAIN
from .entity import FibaroEntity from .entity import FibaroEntity
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: FibaroConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the Fibaro covers.""" """Set up the Fibaro covers."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id] controller = entry.runtime_data
async_add_entities( async_add_entities(
[FibaroCover(device) for device in controller.fibaro_devices[Platform.COVER]], [FibaroCover(device) for device in controller.fibaro_devices[Platform.COVER]],
True, True,

View File

@ -10,23 +10,21 @@ from homeassistant.components.event import (
EventDeviceClass, EventDeviceClass,
EventEntity, EventEntity,
) )
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.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FibaroController from . import FibaroConfigEntry
from .const import DOMAIN
from .entity import FibaroEntity from .entity import FibaroEntity
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: FibaroConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the Fibaro event entities.""" """Set up the Fibaro event entities."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id] controller = entry.runtime_data
# Each scene event represents a button on a device # Each scene event represents a button on a device
async_add_entities( async_add_entities(

View File

@ -17,13 +17,11 @@ from homeassistant.components.light import (
brightness_supported, brightness_supported,
color_supported, color_supported,
) )
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.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FibaroController from . import FibaroConfigEntry
from .const import DOMAIN
from .entity import FibaroEntity from .entity import FibaroEntity
PARALLEL_UPDATES = 2 PARALLEL_UPDATES = 2
@ -52,11 +50,11 @@ def scaleto99(value: int | None) -> int:
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: FibaroConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Perform the setup for Fibaro controller devices.""" """Perform the setup for Fibaro controller devices."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id] controller = entry.runtime_data
async_add_entities( async_add_entities(
[FibaroLight(device) for device in controller.fibaro_devices[Platform.LIGHT]], [FibaroLight(device) for device in controller.fibaro_devices[Platform.LIGHT]],
True, True,

View File

@ -7,23 +7,21 @@ from typing import Any
from pyfibaro.fibaro_device import DeviceModel from pyfibaro.fibaro_device import DeviceModel
from homeassistant.components.lock import ENTITY_ID_FORMAT, LockEntity from homeassistant.components.lock import ENTITY_ID_FORMAT, LockEntity
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.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FibaroController from . import FibaroConfigEntry
from .const import DOMAIN
from .entity import FibaroEntity from .entity import FibaroEntity
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: FibaroConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the Fibaro locks.""" """Set up the Fibaro locks."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id] controller = entry.runtime_data
async_add_entities( async_add_entities(
[FibaroLock(device) for device in controller.fibaro_devices[Platform.LOCK]], [FibaroLock(device) for device in controller.fibaro_devices[Platform.LOCK]],
True, True,

View File

@ -7,23 +7,22 @@ from typing import Any
from pyfibaro.fibaro_scene import SceneModel from pyfibaro.fibaro_scene import SceneModel
from homeassistant.components.scene import Scene from homeassistant.components.scene import Scene
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util import slugify from homeassistant.util import slugify
from . import FibaroController from . import FibaroConfigEntry, FibaroController
from .const import DOMAIN from .const import DOMAIN
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: FibaroConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Perform the setup for Fibaro scenes.""" """Perform the setup for Fibaro scenes."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id] controller = entry.runtime_data
async_add_entities( async_add_entities(
[FibaroScene(scene, controller) for scene in controller.read_scenes()], [FibaroScene(scene, controller) for scene in controller.read_scenes()],
True, True,

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 (
CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_PARTS_PER_MILLION,
LIGHT_LUX, LIGHT_LUX,
@ -27,8 +26,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util import convert from homeassistant.util import convert
from . import FibaroController from . import FibaroConfigEntry
from .const import DOMAIN
from .entity import FibaroEntity from .entity import FibaroEntity
# List of known sensors which represents a fibaro device # List of known sensors which represents a fibaro device
@ -103,12 +101,12 @@ FIBARO_TO_HASS_UNIT: dict[str, str] = {
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: FibaroConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the Fibaro controller devices.""" """Set up the Fibaro controller devices."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id] controller = entry.runtime_data
entities: list[SensorEntity] = [ entities: list[SensorEntity] = [
FibaroSensor(device, MAIN_SENSOR_TYPES.get(device.type)) FibaroSensor(device, MAIN_SENSOR_TYPES.get(device.type))
for device in controller.fibaro_devices[Platform.SENSOR] for device in controller.fibaro_devices[Platform.SENSOR]

View File

@ -7,23 +7,21 @@ from typing import Any
from pyfibaro.fibaro_device import DeviceModel from pyfibaro.fibaro_device import DeviceModel
from homeassistant.components.switch import ENTITY_ID_FORMAT, SwitchEntity from homeassistant.components.switch import ENTITY_ID_FORMAT, SwitchEntity
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.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FibaroController from . import FibaroConfigEntry
from .const import DOMAIN
from .entity import FibaroEntity from .entity import FibaroEntity
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: FibaroConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the Fibaro switches.""" """Set up the Fibaro switches."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id] controller = entry.runtime_data
async_add_entities( async_add_entities(
[FibaroSwitch(device) for device in controller.fibaro_devices[Platform.SWITCH]], [FibaroSwitch(device) for device in controller.fibaro_devices[Platform.SWITCH]],
True, True,