Home Assistant Unofficial Reference 2024.12.1
select.py
Go to the documentation of this file.
1 """Support for Harmony Hub select activities."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
7 from homeassistant.components.select import SelectEntity
8 from homeassistant.core import HassJob, HomeAssistant, callback
9 from homeassistant.helpers.entity_platform import AddEntitiesCallback
10 
11 from .const import ACTIVITY_POWER_OFF, DOMAIN
12 from .data import HarmonyConfigEntry, HarmonyData
13 from .entity import HarmonyEntity
14 from .subscriber import HarmonyCallback
15 
16 _LOGGER = logging.getLogger(__name__)
17 
18 TRANSLATABLE_POWER_OFF = "power_off"
19 
20 
22  hass: HomeAssistant,
23  entry: HarmonyConfigEntry,
24  async_add_entities: AddEntitiesCallback,
25 ) -> None:
26  """Set up harmony activities select."""
27  async_add_entities([HarmonyActivitySelect(entry.runtime_data)])
28 
29 
31  """Select representation of a Harmony activities."""
32 
33  _attr_translation_key = "activities"
34 
35  def __init__(self, data: HarmonyData) -> None:
36  """Initialize HarmonyActivitySelect class."""
37  super().__init__(data=data)
38  self._data_data_data = data
39  self._attr_unique_id_attr_unique_id = self._data_data_data.unique_id
40  self._attr_device_info_attr_device_info = self._data_data_data.device_info(DOMAIN)
41 
42  @property
43  def options(self) -> list[str]:
44  """Return a set of selectable options."""
45  return [TRANSLATABLE_POWER_OFF, *sorted(self._data_data_data.activity_names)]
46 
47  @property
48  def current_option(self) -> str | None:
49  """Return the current activity."""
50  _, activity_name = self._data_data_data.current_activity
51  if activity_name == ACTIVITY_POWER_OFF:
52  return TRANSLATABLE_POWER_OFF
53  return activity_name
54 
55  async def async_select_option(self, option: str) -> None:
56  """Change the current activity."""
57  if option == TRANSLATABLE_POWER_OFF:
58  await self._data_data_data.async_start_activity(ACTIVITY_POWER_OFF)
59  return
60  await self._data_data_data.async_start_activity(option)
61 
62  async def async_added_to_hass(self) -> None:
63  """Call when entity is added to hass."""
64  activity_update_job = HassJob(self._async_activity_update_async_activity_update)
65  self.async_on_removeasync_on_remove(
66  self._data_data_data.async_subscribe(
68  connected=HassJob(self.async_got_connectedasync_got_connected),
69  disconnected=HassJob(self.async_got_disconnectedasync_got_disconnected),
70  activity_starting=activity_update_job,
71  activity_started=activity_update_job,
72  config_updated=None,
73  )
74  )
75  )
76 
77  @callback
78  def _async_activity_update(self, activity_info: tuple) -> None:
79  self.async_write_ha_stateasync_write_ha_state()
None async_got_connected(self, str|None _=None)
Definition: entity.py:37
None async_got_disconnected(self, str|None _=None)
Definition: entity.py:44
None _async_activity_update(self, tuple activity_info)
Definition: select.py:78
None async_on_remove(self, CALLBACK_TYPE func)
Definition: entity.py:1331
DeviceInfo|None device_info(self)
Definition: entity.py:798
None async_setup_entry(HomeAssistant hass, HarmonyConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: select.py:25
CALLBACK_TYPE async_subscribe(HomeAssistant hass, str topic, Callable[[ReceiveMessage], Coroutine[Any, Any, None]|None] msg_callback, int qos=DEFAULT_QOS, str|None encoding=DEFAULT_ENCODING)
Definition: client.py:194