Home Assistant Unofficial Reference 2024.12.1
select.py
Go to the documentation of this file.
1 """The select entities for musiccast."""
2 
3 from __future__ import annotations
4 
5 from aiomusiccast.capabilities import OptionSetter
6 
7 from homeassistant.components.select import SelectEntity
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.core import HomeAssistant
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 
12 from .const import DOMAIN, TRANSLATION_KEY_MAPPING
13 from .coordinator import MusicCastDataUpdateCoordinator
14 from .entity import MusicCastCapabilityEntity
15 
16 
18  hass: HomeAssistant,
19  entry: ConfigEntry,
20  async_add_entities: AddEntitiesCallback,
21 ) -> None:
22  """Set up MusicCast select entities based on a config entry."""
23  coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
24 
25  select_entities = [
26  SelectableCapability(coordinator, capability)
27  for capability in coordinator.data.capabilities
28  if isinstance(capability, OptionSetter)
29  ]
30 
31  select_entities.extend(
32  SelectableCapability(coordinator, capability, zone)
33  for zone, data in coordinator.data.zones.items()
34  for capability in data.capabilities
35  if isinstance(capability, OptionSetter)
36  )
37 
38  async_add_entities(select_entities)
39 
40 
42  """Representation of a MusicCast Select entity."""
43 
44  capability: OptionSetter
45 
46  def __init__(
47  self,
48  coordinator: MusicCastDataUpdateCoordinator,
49  capability: OptionSetter,
50  zone_id: str | None = None,
51  ) -> None:
52  """Initialize the MusicCast Select entity."""
53  MusicCastCapabilityEntity.__init__(self, coordinator, capability, zone_id)
54  self._attr_options_attr_options = list(capability.options.values())
55  self._attr_translation_key_attr_translation_key = TRANSLATION_KEY_MAPPING.get(capability.id)
56 
57  async def async_select_option(self, option: str) -> None:
58  """Select the given option."""
59  value = {val: key for key, val in self.capabilitycapability.options.items()}[option]
60  await self.capabilitycapability.set(value)
61  self._attr_translation_key_attr_translation_key = TRANSLATION_KEY_MAPPING.get(self.capabilitycapability.id)
62 
63  @property
64  def current_option(self) -> str | None:
65  """Return the currently selected option."""
66  return self.capabilitycapability.options.get(self.capabilitycapability.current)
None __init__(self, MusicCastDataUpdateCoordinator coordinator, OptionSetter capability, str|None zone_id=None)
Definition: select.py:51
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: select.py:21