diff --git a/homeassistant/components/smarla/entity.py b/homeassistant/components/smarla/entity.py index a0ca052219c..ba213adc9ab 100644 --- a/homeassistant/components/smarla/entity.py +++ b/homeassistant/components/smarla/entity.py @@ -1,25 +1,37 @@ """Common base for entities.""" +from dataclasses import dataclass from typing import Any from pysmarlaapi import Federwiege -from pysmarlaapi.federwiege.classes import Property from homeassistant.helpers.device_registry import DeviceInfo -from homeassistant.helpers.entity import Entity +from homeassistant.helpers.entity import Entity, EntityDescription from .const import DEVICE_MODEL_NAME, DOMAIN, MANUFACTURER_NAME +@dataclass(frozen=True, kw_only=True) +class SmarlaEntityDescription(EntityDescription): + """Class describing Swing2Sleep Smarla entities.""" + + service: str + property: str + + class SmarlaBaseEntity(Entity): """Common Base Entity class for defining Smarla device.""" + entity_description: SmarlaEntityDescription + _attr_should_poll = False _attr_has_entity_name = True - def __init__(self, federwiege: Federwiege, prop: Property) -> None: + def __init__(self, federwiege: Federwiege, desc: SmarlaEntityDescription) -> None: """Initialise the entity.""" - self._property = prop + self.entity_description = desc + self._property = federwiege.get_property(desc.service, desc.property) + self._attr_unique_id = f"{federwiege.serial_number}-{desc.key}" self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, federwiege.serial_number)}, name=DEVICE_MODEL_NAME, diff --git a/homeassistant/components/smarla/switch.py b/homeassistant/components/smarla/switch.py index 49bcce23b24..d68f3428a77 100644 --- a/homeassistant/components/smarla/switch.py +++ b/homeassistant/components/smarla/switch.py @@ -3,7 +3,6 @@ from dataclasses import dataclass from typing import Any -from pysmarlaapi import Federwiege from pysmarlaapi.federwiege.classes import Property from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription @@ -11,16 +10,13 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from . import FederwiegeConfigEntry -from .entity import SmarlaBaseEntity +from .entity import SmarlaBaseEntity, SmarlaEntityDescription @dataclass(frozen=True, kw_only=True) -class SmarlaSwitchEntityDescription(SwitchEntityDescription): +class SmarlaSwitchEntityDescription(SmarlaEntityDescription, SwitchEntityDescription): """Class describing Swing2Sleep Smarla switch entity.""" - service: str - property: str - SWITCHES: list[SmarlaSwitchEntityDescription] = [ SmarlaSwitchEntityDescription( @@ -55,17 +51,6 @@ class SmarlaSwitch(SmarlaBaseEntity, SwitchEntity): _property: Property[bool] - def __init__( - self, - federwiege: Federwiege, - desc: SmarlaSwitchEntityDescription, - ) -> None: - """Initialize a Smarla switch.""" - prop = federwiege.get_property(desc.service, desc.property) - super().__init__(federwiege, prop) - self.entity_description = desc - self._attr_unique_id = f"{federwiege.serial_number}-{desc.key}" - @property def is_on(self) -> bool: """Return the entity value to represent the entity state."""