Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Ecovacs button module."""
2 
3 from dataclasses import dataclass
4 
5 from deebot_client.capabilities import CapabilityExecute, CapabilityLifeSpan
6 from deebot_client.events import LifeSpan
7 
8 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
9 from homeassistant.const import EntityCategory
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 
13 from . import EcovacsConfigEntry
14 from .const import SUPPORTED_LIFESPANS
15 from .entity import (
16  EcovacsCapabilityEntityDescription,
17  EcovacsDescriptionEntity,
18  EcovacsEntity,
19 )
20 from .util import get_supported_entitites
21 
22 
23 @dataclass(kw_only=True, frozen=True)
25  ButtonEntityDescription,
26  EcovacsCapabilityEntityDescription,
27 ):
28  """Ecovacs button entity description."""
29 
30 
31 @dataclass(kw_only=True, frozen=True)
33  """Ecovacs lifespan button entity description."""
34 
35  component: LifeSpan
36 
37 
38 ENTITY_DESCRIPTIONS: tuple[EcovacsButtonEntityDescription, ...] = (
40  capability_fn=lambda caps: caps.map.relocation if caps.map else None,
41  key="relocate",
42  translation_key="relocate",
43  entity_category=EntityCategory.CONFIG,
44  ),
45 )
46 
47 LIFESPAN_ENTITY_DESCRIPTIONS = tuple(
49  component=component,
50  key=f"reset_lifespan_{component.name.lower()}",
51  translation_key=f"reset_lifespan_{component.name.lower()}",
52  entity_category=EntityCategory.CONFIG,
53  entity_registry_enabled_default=False,
54  )
55  for component in SUPPORTED_LIFESPANS
56 )
57 
58 
60  hass: HomeAssistant,
61  config_entry: EcovacsConfigEntry,
62  async_add_entities: AddEntitiesCallback,
63 ) -> None:
64  """Add entities for passed config_entry in HA."""
65  controller = config_entry.runtime_data
66  entities: list[EcovacsEntity] = get_supported_entitites(
67  controller, EcovacsButtonEntity, ENTITY_DESCRIPTIONS
68  )
69  entities.extend(
71  device, device.capabilities.life_span, description
72  )
73  for device in controller.devices
74  for description in LIFESPAN_ENTITY_DESCRIPTIONS
75  if description.component in device.capabilities.life_span.types
76  )
77  async_add_entities(entities)
78 
79 
81  EcovacsDescriptionEntity[CapabilityExecute],
82  ButtonEntity,
83 ):
84  """Ecovacs button entity."""
85 
86  entity_description: EcovacsLifespanButtonEntityDescription
87 
88  async def async_press(self) -> None:
89  """Press the button."""
90  await self._device_device.execute_command(self._capability_capability.execute())
91 
92 
94  EcovacsDescriptionEntity[CapabilityLifeSpan],
95  ButtonEntity,
96 ):
97  """Ecovacs reset lifespan button entity."""
98 
99  entity_description: EcovacsLifespanButtonEntityDescription
100 
101  async def async_press(self) -> None:
102  """Press the button."""
103  await self._device_device.execute_command(
104  self._capability_capability.reset(self.entity_descriptionentity_description.component)
105  )
None async_setup_entry(HomeAssistant hass, EcovacsConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: button.py:63
list[EcovacsEntity] get_supported_entitites(EcovacsController controller, type[EcovacsDescriptionEntity] entity_class, tuple[EcovacsCapabilityEntityDescription,...] descriptions)
Definition: util.py:37
def execute(hass, filename, source, data=None, return_response=False)
Definition: __init__.py:194