Home Assistant Unofficial Reference 2024.12.1
select.py
Go to the documentation of this file.
1 """Select entities for Wyoming integration."""
2 
3 from __future__ import annotations
4 
5 from typing import TYPE_CHECKING, Final
6 
8  AssistPipelineSelect,
9  VadSensitivitySelect,
10 )
11 from homeassistant.components.assist_pipeline.vad import VadSensitivity
12 from homeassistant.components.select import SelectEntity, SelectEntityDescription
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.const import EntityCategory
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers import restore_state
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 
19 from .const import DOMAIN
20 from .devices import SatelliteDevice
21 from .entity import WyomingSatelliteEntity
22 
23 if TYPE_CHECKING:
24  from .models import DomainDataItem
25 
26 _NOISE_SUPPRESSION_LEVEL: Final = {
27  "off": 0,
28  "low": 1,
29  "medium": 2,
30  "high": 3,
31  "max": 4,
32 }
33 _DEFAULT_NOISE_SUPPRESSION_LEVEL: Final = "off"
34 
35 
37  hass: HomeAssistant,
38  config_entry: ConfigEntry,
39  async_add_entities: AddEntitiesCallback,
40 ) -> None:
41  """Set up Wyoming select entities."""
42  item: DomainDataItem = hass.data[DOMAIN][config_entry.entry_id]
43 
44  # Setup is only forwarded for satellites
45  assert item.device is not None
46 
48  [
49  WyomingSatellitePipelineSelect(hass, item.device),
51  WyomingSatelliteVadSensitivitySelect(hass, item.device),
52  ]
53  )
54 
55 
57  """Pipeline selector for Wyoming satellites."""
58 
59  def __init__(self, hass: HomeAssistant, device: SatelliteDevice) -> None:
60  """Initialize a pipeline selector."""
61  self.devicedevice = device
62 
63  WyomingSatelliteEntity.__init__(self, device)
64  AssistPipelineSelect.__init__(self, hass, DOMAIN, device.satellite_id)
65 
66  async def async_select_option(self, option: str) -> None:
67  """Select an option."""
68  await super().async_select_option(option)
69  self.devicedevice.set_pipeline_name(option)
70 
71 
73  WyomingSatelliteEntity, SelectEntity, restore_state.RestoreEntity
74 ):
75  """Entity to represent noise suppression level setting."""
76 
77  entity_description = SelectEntityDescription(
78  key="noise_suppression_level",
79  translation_key="noise_suppression_level",
80  entity_category=EntityCategory.CONFIG,
81  )
82  _attr_should_poll = False
83  _attr_current_option = _DEFAULT_NOISE_SUPPRESSION_LEVEL
84  _attr_options = list(_NOISE_SUPPRESSION_LEVEL.keys())
85 
86  async def async_added_to_hass(self) -> None:
87  """When entity is added to Home Assistant."""
88  await super().async_added_to_hass()
89 
90  state = await self.async_get_last_state()
91  if state is not None and state.state in self.optionsoptions:
92  self._attr_current_option_attr_current_option = state.state
93 
94  async def async_select_option(self, option: str) -> None:
95  """Select an option."""
96  self._attr_current_option_attr_current_option = option
97  self.async_write_ha_stateasync_write_ha_state()
98  self._device_device.set_noise_suppression_level(_NOISE_SUPPRESSION_LEVEL[option])
99 
100 
102  WyomingSatelliteEntity, VadSensitivitySelect
103 ):
104  """VAD sensitivity selector for Wyoming satellites."""
105 
106  def __init__(self, hass: HomeAssistant, device: SatelliteDevice) -> None:
107  """Initialize a VAD sensitivity selector."""
108  self.devicedevice = device
109 
110  WyomingSatelliteEntity.__init__(self, device)
111  VadSensitivitySelect.__init__(self, hass, device.satellite_id)
112 
113  async def async_select_option(self, option: str) -> None:
114  """Select an option."""
115  await super().async_select_option(option)
116  self.devicedevice.set_vad_sensitivity(VadSensitivity(option))
None __init__(self, HomeAssistant hass, SatelliteDevice device)
Definition: select.py:59
None __init__(self, HomeAssistant hass, SatelliteDevice device)
Definition: select.py:106
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: select.py:40