1 """Ecovacs select entity module."""
3 from collections.abc
import Callable
4 from dataclasses
import dataclass
5 from typing
import Any, Generic
7 from deebot_client.capabilities
import CapabilitySetTypes
8 from deebot_client.device
import Device
9 from deebot_client.events
import WaterInfoEvent, WorkModeEvent
16 from .
import EcovacsConfigEntry
17 from .entity
import EcovacsCapabilityEntityDescription, EcovacsDescriptionEntity, EventT
18 from .util
import get_name_key, get_supported_entitites
21 @dataclass(kw_only=True, frozen=True)
23 SelectEntityDescription,
24 EcovacsCapabilityEntityDescription,
27 """Ecovacs select entity description."""
29 current_option_fn: Callable[[EventT], str |
None]
30 options_fn: Callable[[CapabilitySetTypes], list[str]]
33 ENTITY_DESCRIPTIONS: tuple[EcovacsSelectEntityDescription, ...] = (
34 EcovacsSelectEntityDescription[WaterInfoEvent](
35 capability_fn=
lambda caps: caps.water,
37 options_fn=
lambda water: [
get_name_key(amount)
for amount
in water.types],
39 translation_key=
"water_amount",
40 entity_category=EntityCategory.CONFIG,
42 EcovacsSelectEntityDescription[WorkModeEvent](
43 capability_fn=
lambda caps: caps.clean.work_mode,
45 options_fn=
lambda cap: [
get_name_key(mode)
for mode
in cap.types],
47 translation_key=
"work_mode",
48 entity_registry_enabled_default=
False,
49 entity_category=EntityCategory.CONFIG,
56 config_entry: EcovacsConfigEntry,
57 async_add_entities: AddEntitiesCallback,
59 """Add entities for passed config_entry in HA."""
60 controller = config_entry.runtime_data
62 controller, EcovacsSelectEntity, ENTITY_DESCRIPTIONS
69 EcovacsDescriptionEntity[CapabilitySetTypes[EventT, str]],
72 """Ecovacs select entity."""
74 _attr_current_option: str |
None =
None
75 entity_description: EcovacsSelectEntityDescription
80 capability: CapabilitySetTypes[EventT, str],
81 entity_description: EcovacsSelectEntityDescription,
84 """Initialize entity."""
85 super().
__init__(device, capability, entity_description, **kwargs)
86 self.
_attr_options_attr_options = entity_description.options_fn(capability)
89 """Set up the event listeners now that hass is ready."""
92 async
def on_event(event: EventT) ->
None:
99 """Change the selected option."""
None _subscribe(self, type[EventT] event_type, Callable[[EventT], Coroutine[Any, Any, None]] callback)
None __init__(self, Device device, CapabilitySetTypes[EventT, str] capability, EcovacsSelectEntityDescription entity_description, **Any kwargs)
None async_added_to_hass(self)
None async_select_option(self, str option)
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)
str get_name_key(Enum enum)