From b702d88ab7b356744969dd93b9b6c320ff227cd4 Mon Sep 17 00:00:00 2001 From: RJPoelstra <36924801+RJPoelstra@users.noreply.github.com> Date: Fri, 31 Jan 2025 13:17:22 +0100 Subject: [PATCH] Use runtime_data in motionmount integration (#136999) --- homeassistant/components/motionmount/__init__.py | 12 ++++++++---- .../components/motionmount/binary_sensor.py | 13 ++++++++----- homeassistant/components/motionmount/entity.py | 6 ++++-- homeassistant/components/motionmount/number.py | 16 +++++++++++----- homeassistant/components/motionmount/select.py | 10 ++++++---- homeassistant/components/motionmount/sensor.py | 13 ++++++++----- 6 files changed, 45 insertions(+), 25 deletions(-) diff --git a/homeassistant/components/motionmount/__init__.py b/homeassistant/components/motionmount/__init__.py index 9b27ce9bc6c..9c2ac6fa180 100644 --- a/homeassistant/components/motionmount/__init__.py +++ b/homeassistant/components/motionmount/__init__.py @@ -14,6 +14,8 @@ from homeassistant.helpers.device_registry import format_mac from .const import DOMAIN, EMPTY_MAC +type MotionMountConfigEntry = ConfigEntry[motionmount.MotionMount] + PLATFORMS: list[Platform] = [ Platform.BINARY_SENSOR, Platform.NUMBER, @@ -22,7 +24,7 @@ PLATFORMS: list[Platform] = [ ] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: MotionMountConfigEntry) -> bool: """Set up Vogel's MotionMount from a config entry.""" host = entry.data[CONF_HOST] @@ -65,17 +67,19 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ) # Store an API object for your platforms to access - hass.data.setdefault(DOMAIN, {})[entry.entry_id] = mm + entry.runtime_data = mm await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry( + hass: HomeAssistant, entry: MotionMountConfigEntry +) -> bool: """Unload a config entry.""" if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): - mm: motionmount.MotionMount = hass.data[DOMAIN].pop(entry.entry_id) + mm = entry.runtime_data await mm.disconnect() return unload_ok diff --git a/homeassistant/components/motionmount/binary_sensor.py b/homeassistant/components/motionmount/binary_sensor.py index 45b6e821440..f19af67e198 100644 --- a/homeassistant/components/motionmount/binary_sensor.py +++ b/homeassistant/components/motionmount/binary_sensor.py @@ -6,19 +6,20 @@ from homeassistant.components.binary_sensor import ( BinarySensorDeviceClass, BinarySensorEntity, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN +from . import MotionMountConfigEntry from .entity import MotionMountEntity async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: MotionMountConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up Vogel's MotionMount from a config entry.""" - mm = hass.data[DOMAIN][entry.entry_id] + mm = entry.runtime_data async_add_entities([MotionMountMovingSensor(mm, entry)]) @@ -29,7 +30,9 @@ class MotionMountMovingSensor(MotionMountEntity, BinarySensorEntity): _attr_device_class = BinarySensorDeviceClass.MOVING _attr_translation_key = "motionmount_is_moving" - def __init__(self, mm: motionmount.MotionMount, config_entry: ConfigEntry) -> None: + def __init__( + self, mm: motionmount.MotionMount, config_entry: MotionMountConfigEntry + ) -> None: """Initialize moving binary sensor entity.""" super().__init__(mm, config_entry) self._attr_unique_id = f"{self._base_unique_id}-moving" diff --git a/homeassistant/components/motionmount/entity.py b/homeassistant/components/motionmount/entity.py index 57a5f638d54..81d4d0119b5 100644 --- a/homeassistant/components/motionmount/entity.py +++ b/homeassistant/components/motionmount/entity.py @@ -5,12 +5,12 @@ from typing import TYPE_CHECKING import motionmount -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_CONNECTIONS, ATTR_IDENTIFIERS, CONF_PIN from homeassistant.helpers import device_registry as dr from homeassistant.helpers.device_registry import DeviceInfo, format_mac from homeassistant.helpers.entity import Entity +from . import MotionMountConfigEntry from .const import DOMAIN, EMPTY_MAC _LOGGER = logging.getLogger(__name__) @@ -22,7 +22,9 @@ class MotionMountEntity(Entity): _attr_should_poll = False _attr_has_entity_name = True - def __init__(self, mm: motionmount.MotionMount, config_entry: ConfigEntry) -> None: + def __init__( + self, mm: motionmount.MotionMount, config_entry: MotionMountConfigEntry + ) -> None: """Initialize general MotionMount entity.""" self.mm = mm self.config_entry = config_entry diff --git a/homeassistant/components/motionmount/number.py b/homeassistant/components/motionmount/number.py index b42c04a6588..6305820174f 100644 --- a/homeassistant/components/motionmount/number.py +++ b/homeassistant/components/motionmount/number.py @@ -5,21 +5,23 @@ import socket import motionmount from homeassistant.components.number import NumberEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.const import PERCENTAGE from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity_platform import AddEntitiesCallback +from . import MotionMountConfigEntry from .const import DOMAIN from .entity import MotionMountEntity async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: MotionMountConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up Vogel's MotionMount from a config entry.""" - mm: motionmount.MotionMount = hass.data[DOMAIN][entry.entry_id] + mm = entry.runtime_data async_add_entities( ( @@ -37,7 +39,9 @@ class MotionMountExtension(MotionMountEntity, NumberEntity): _attr_native_unit_of_measurement = PERCENTAGE _attr_translation_key = "motionmount_extension" - def __init__(self, mm: motionmount.MotionMount, config_entry: ConfigEntry) -> None: + def __init__( + self, mm: motionmount.MotionMount, config_entry: MotionMountConfigEntry + ) -> None: """Initialize Extension number.""" super().__init__(mm, config_entry) self._attr_unique_id = f"{self._base_unique_id}-extension" @@ -66,7 +70,9 @@ class MotionMountTurn(MotionMountEntity, NumberEntity): _attr_native_unit_of_measurement = PERCENTAGE _attr_translation_key = "motionmount_turn" - def __init__(self, mm: motionmount.MotionMount, config_entry: ConfigEntry) -> None: + def __init__( + self, mm: motionmount.MotionMount, config_entry: MotionMountConfigEntry + ) -> None: """Initialize Turn number.""" super().__init__(mm, config_entry) self._attr_unique_id = f"{self._base_unique_id}-turn" diff --git a/homeassistant/components/motionmount/select.py b/homeassistant/components/motionmount/select.py index 23fcf576af0..31c5056b91f 100644 --- a/homeassistant/components/motionmount/select.py +++ b/homeassistant/components/motionmount/select.py @@ -7,11 +7,11 @@ import socket import motionmount from homeassistant.components.select import SelectEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity_platform import AddEntitiesCallback +from . import MotionMountConfigEntry from .const import DOMAIN, WALL_PRESET_NAME from .entity import MotionMountEntity @@ -20,10 +20,12 @@ SCAN_INTERVAL = timedelta(seconds=60) async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: MotionMountConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up Vogel's MotionMount from a config entry.""" - mm = hass.data[DOMAIN][entry.entry_id] + mm = entry.runtime_data async_add_entities([MotionMountPresets(mm, entry)], True) @@ -37,7 +39,7 @@ class MotionMountPresets(MotionMountEntity, SelectEntity): def __init__( self, mm: motionmount.MotionMount, - config_entry: ConfigEntry, + config_entry: MotionMountConfigEntry, ) -> None: """Initialize Preset selector.""" super().__init__(mm, config_entry) diff --git a/homeassistant/components/motionmount/sensor.py b/homeassistant/components/motionmount/sensor.py index 933b637b0c2..8e55fad4a8b 100644 --- a/homeassistant/components/motionmount/sensor.py +++ b/homeassistant/components/motionmount/sensor.py @@ -3,19 +3,20 @@ import motionmount from homeassistant.components.sensor import SensorDeviceClass, SensorEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN +from . import MotionMountConfigEntry from .entity import MotionMountEntity async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: MotionMountConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up Vogel's MotionMount from a config entry.""" - mm = hass.data[DOMAIN][entry.entry_id] + mm = entry.runtime_data async_add_entities((MotionMountErrorStatusSensor(mm, entry),)) @@ -27,7 +28,9 @@ class MotionMountErrorStatusSensor(MotionMountEntity, SensorEntity): _attr_options = ["none", "motor", "internal"] _attr_translation_key = "motionmount_error_status" - def __init__(self, mm: motionmount.MotionMount, config_entry: ConfigEntry) -> None: + def __init__( + self, mm: motionmount.MotionMount, config_entry: MotionMountConfigEntry + ) -> None: """Initialize sensor entiry.""" super().__init__(mm, config_entry) self._attr_unique_id = f"{self._base_unique_id}-error-status"