1 """Ecovacs number module."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import Generic
9 from deebot_client.capabilities
import CapabilitySet
10 from deebot_client.events
import CleanCountEvent, CutDirectionEvent, VolumeEvent
14 NumberEntityDescription,
21 from .
import EcovacsConfigEntry
23 EcovacsCapabilityEntityDescription,
24 EcovacsDescriptionEntity,
28 from .util
import get_supported_entitites
31 @dataclass(kw_only=True, frozen=True)
33 NumberEntityDescription,
34 EcovacsCapabilityEntityDescription,
37 """Ecovacs number entity description."""
39 native_max_value_fn: Callable[[EventT], float | int |
None] =
lambda _:
None
40 value_fn: Callable[[EventT], float |
None]
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,
49 translation_key=
"volume",
50 entity_registry_enabled_default=
False,
51 entity_category=EntityCategory.CONFIG,
56 EcovacsNumberEntityDescription[CutDirectionEvent](
57 capability_fn=
lambda caps: caps.settings.cut_direction,
58 value_fn=
lambda e: e.angle,
60 translation_key=
"cut_direction",
61 entity_registry_enabled_default=
False,
62 entity_category=EntityCategory.CONFIG,
66 native_unit_of_measurement=DEGREE,
68 EcovacsNumberEntityDescription[CleanCountEvent](
69 capability_fn=
lambda caps: caps.clean.count,
70 value_fn=
lambda e: e.count,
72 translation_key=
"clean_count",
73 entity_registry_enabled_default=
False,
74 entity_category=EntityCategory.CONFIG,
85 config_entry: EcovacsConfigEntry,
86 async_add_entities: AddEntitiesCallback,
88 """Add entities for passed config_entry in HA."""
89 controller = config_entry.runtime_data
91 controller, EcovacsNumberEntity, ENTITY_DESCRIPTIONS
98 EcovacsDescriptionEntity[CapabilitySet[EventT, int]],
101 """Ecovacs number entity."""
103 entity_description: EcovacsNumberEntityDescription
106 """Set up the event listeners now that hass is ready."""
109 async
def on_event(event: EventT) ->
None:
None _subscribe(self, type[EventT] event_type, Callable[[EventT], Coroutine[Any, Any, None]] callback)
None async_added_to_hass(self)
None async_set_native_value(self, float value)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, EcovacsConfigEntry config_entry, AddEntitiesCallback async_add_entities)
list[EcovacsEntity] get_supported_entitites(EcovacsController controller, type[EcovacsDescriptionEntity] entity_class, tuple[EcovacsCapabilityEntityDescription,...] descriptions)