1 """Support for Lektrico select entities."""
3 from collections.abc
import Callable, Coroutine
4 from dataclasses
import dataclass
7 from lektricowifi
import Device
14 from .
import LektricoConfigEntry, LektricoDeviceDataUpdateCoordinator
15 from .entity
import LektricoEntity
18 @dataclass(frozen=True, kw_only=True)
20 """Describes Lektrico select entity."""
22 value_fn: Callable[[dict[str, Any]], str]
23 set_value_fn: Callable[[Device, int], Coroutine[Any, Any, dict[Any, Any]]]
34 SELECTS: tuple[LektricoSelectEntityDescription, ...] = (
36 key=
"load_balancing_mode",
37 translation_key=
"load_balancing_mode",
38 options=LB_MODE_OPTIONS,
39 entity_category=EntityCategory.CONFIG,
40 value_fn=
lambda data: LB_MODE_OPTIONS[data[
"lb_mode"]],
41 set_value_fn=
lambda device, value: device.set_load_balancing_mode(value),
48 entry: LektricoConfigEntry,
49 async_add_entities: AddEntitiesCallback,
51 """Set up Lektrico select entities based on a config entry."""
53 coordinator = entry.runtime_data
59 f
"{entry.data[CONF_TYPE]}_{entry.data[ATTR_SERIAL_NUMBER]}",
61 for description
in SELECTS
66 """Defines a Lektrico select entity."""
68 entity_description: LektricoSelectEntityDescription
72 description: LektricoSelectEntityDescription,
73 coordinator: LektricoDeviceDataUpdateCoordinator,
76 """Initialize Lektrico select."""
77 super().
__init__(coordinator, device_name)
79 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.serial_number}_{description.key}"
83 """Return the state of the select."""
87 """Change the selected option."""
89 self.coordinator.device, LB_MODE_OPTIONS.index(option)
91 await self.coordinator.async_request_refresh()
None async_select_option(self, str option)
None __init__(self, LektricoSelectEntityDescription description, LektricoDeviceDataUpdateCoordinator coordinator, str device_name)
str|None current_option(self)
None async_setup_entry(HomeAssistant hass, LektricoConfigEntry entry, AddEntitiesCallback async_add_entities)