1 """Select platform for Sensibo integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import TYPE_CHECKING, Any
9 from pysensibo.model
import SensiboDevice
16 from .
import SensiboConfigEntry
17 from .const
import DOMAIN
18 from .coordinator
import SensiboDataUpdateCoordinator
19 from .entity
import SensiboDeviceBaseEntity, async_handle_api_call
24 @dataclass(frozen=True, kw_only=True)
26 """Class describing Sensibo Select entities."""
29 value_fn: Callable[[SensiboDevice], str |
None]
30 options_fn: Callable[[SensiboDevice], list[str] |
None]
31 transformation: Callable[[SensiboDevice], dict |
None]
34 DEVICE_SELECT_TYPES = (
36 key=
"horizontalSwing",
37 data_key=
"horizontal_swing_mode",
38 value_fn=
lambda data: data.horizontal_swing_mode,
39 options_fn=
lambda data: data.horizontal_swing_modes,
40 translation_key=
"horizontalswing",
41 transformation=
lambda data: data.horizontal_swing_modes_translated,
45 data_key=
"light_mode",
46 value_fn=
lambda data: data.light_mode,
47 options_fn=
lambda data: data.light_modes,
48 translation_key=
"light",
49 transformation=
lambda data: data.light_modes_translated,
56 entry: SensiboConfigEntry,
57 async_add_entities: AddEntitiesCallback,
59 """Set up Sensibo number platform."""
61 coordinator = entry.runtime_data
65 for device_id, device_data
in coordinator.data.parsed.items()
66 for description
in DEVICE_SELECT_TYPES
67 if description.key
in device_data.full_features
72 """Representation of a Sensibo Select."""
74 entity_description: SensiboSelectEntityDescription
78 coordinator: SensiboDataUpdateCoordinator,
80 entity_description: SensiboSelectEntityDescription,
82 """Initiate Sensibo Select."""
83 super().
__init__(coordinator, device_id)
89 """Return the current selected option."""
94 """Return possible options."""
97 assert options
is not None
101 """Set state to the selected option."""
105 translation_domain=DOMAIN,
106 translation_key=
"select_option_not_available",
107 translation_placeholders={
108 "hvac_mode": hvac_mode,
118 @async_handle_api_call
120 """Make service call to api."""
123 assert transformation
is not None
128 "ac_states": self.
device_datadevice_data.ac_states,
129 "assumed_state":
False,
131 result = await self.
_client_client.async_set_ac_state_property(
134 transformation[data[
"value"]],
136 data[
"assumed_state"],
138 return bool(result.get(
"result", {}).
get(
"status") ==
"Success")
SensiboDevice device_data(self)
None async_select_option(self, str option)
None __init__(self, SensiboDataUpdateCoordinator coordinator, str device_id, SensiboSelectEntityDescription entity_description)
bool async_send_api_call(self, str key, Any value)
str|None current_option(self)
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, SensiboConfigEntry entry, AddEntitiesCallback async_add_entities)