Home Assistant Unofficial Reference 2024.12.1
number.py
Go to the documentation of this file.
1 """Ecovacs number module."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from typing import Generic
8 
9 from deebot_client.capabilities import CapabilitySet
10 from deebot_client.events import CleanCountEvent, CutDirectionEvent, VolumeEvent
11 
13  NumberEntity,
14  NumberEntityDescription,
15  NumberMode,
16 )
17 from homeassistant.const import DEGREE, EntityCategory
18 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 
21 from . import EcovacsConfigEntry
22 from .entity import (
23  EcovacsCapabilityEntityDescription,
24  EcovacsDescriptionEntity,
25  EcovacsEntity,
26  EventT,
27 )
28 from .util import get_supported_entitites
29 
30 
31 @dataclass(kw_only=True, frozen=True)
33  NumberEntityDescription,
34  EcovacsCapabilityEntityDescription,
35  Generic[EventT],
36 ):
37  """Ecovacs number entity description."""
38 
39  native_max_value_fn: Callable[[EventT], float | int | None] = lambda _: None
40  value_fn: Callable[[EventT], float | None]
41 
42 
43 ENTITY_DESCRIPTIONS: tuple[EcovacsNumberEntityDescription, ...] = (
44  EcovacsNumberEntityDescription[VolumeEvent](
45  capability_fn=lambda caps: caps.settings.volume,
46  value_fn=lambda e: e.volume,
47  native_max_value_fn=lambda e: e.maximum,
48  key="volume",
49  translation_key="volume",
50  entity_registry_enabled_default=False,
51  entity_category=EntityCategory.CONFIG,
52  native_min_value=0,
53  native_max_value=10,
54  native_step=1.0,
55  ),
56  EcovacsNumberEntityDescription[CutDirectionEvent](
57  capability_fn=lambda caps: caps.settings.cut_direction,
58  value_fn=lambda e: e.angle,
59  key="cut_direction",
60  translation_key="cut_direction",
61  entity_registry_enabled_default=False,
62  entity_category=EntityCategory.CONFIG,
63  native_min_value=0,
64  native_max_value=180,
65  native_step=1.0,
66  native_unit_of_measurement=DEGREE,
67  ),
68  EcovacsNumberEntityDescription[CleanCountEvent](
69  capability_fn=lambda caps: caps.clean.count,
70  value_fn=lambda e: e.count,
71  key="clean_count",
72  translation_key="clean_count",
73  entity_registry_enabled_default=False,
74  entity_category=EntityCategory.CONFIG,
75  native_min_value=1,
76  native_max_value=4,
77  native_step=1.0,
78  mode=NumberMode.BOX,
79  ),
80 )
81 
82 
84  hass: HomeAssistant,
85  config_entry: EcovacsConfigEntry,
86  async_add_entities: AddEntitiesCallback,
87 ) -> None:
88  """Add entities for passed config_entry in HA."""
89  controller = config_entry.runtime_data
90  entities: list[EcovacsEntity] = get_supported_entitites(
91  controller, EcovacsNumberEntity, ENTITY_DESCRIPTIONS
92  )
93  if entities:
94  async_add_entities(entities)
95 
96 
98  EcovacsDescriptionEntity[CapabilitySet[EventT, int]],
99  NumberEntity,
100 ):
101  """Ecovacs number entity."""
102 
103  entity_description: EcovacsNumberEntityDescription
104 
105  async def async_added_to_hass(self) -> None:
106  """Set up the event listeners now that hass is ready."""
107  await super().async_added_to_hass()
108 
109  async def on_event(event: EventT) -> None:
110  self._attr_native_value_attr_native_value = self.entity_descriptionentity_description.value_fn(event)
111  if maximum := self.entity_descriptionentity_description.native_max_value_fn(event):
112  self._attr_native_max_value_attr_native_max_value = maximum
113  self.async_write_ha_stateasync_write_ha_state()
114 
115  self._subscribe_subscribe(self._capability_capability.event, on_event)
116 
117  async def async_set_native_value(self, value: float) -> None:
118  """Set new value."""
119  await self._device_device.execute_command(self._capability_capability.set(int(value)))
None _subscribe(self, type[EventT] event_type, Callable[[EventT], Coroutine[Any, Any, None]] callback)
Definition: entity.py:87
None async_set_native_value(self, float value)
Definition: __init__.py:418
None async_setup_entry(HomeAssistant hass, EcovacsConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: number.py:87
list[EcovacsEntity] get_supported_entitites(EcovacsController controller, type[EcovacsDescriptionEntity] entity_class, tuple[EcovacsCapabilityEntityDescription,...] descriptions)
Definition: util.py:37