Home Assistant Unofficial Reference 2024.12.1
devices.py
Go to the documentation of this file.
1 """Class to manage satellite devices."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from homeassistant.components.assist_pipeline.vad import VadSensitivity
9 from homeassistant.core import HomeAssistant, callback
10 from homeassistant.helpers import entity_registry as er
11 
12 from .const import DOMAIN
13 
14 
15 @dataclass
17  """Class to store device."""
18 
19  satellite_id: str
20  device_id: str
21  is_active: bool = False
22  is_muted: bool = False
23  pipeline_name: str | None = None
24  noise_suppression_level: int = 0
25  auto_gain: int = 0
26  volume_multiplier: float = 1.0
27  vad_sensitivity: VadSensitivity = VadSensitivity.DEFAULT
28 
29  _is_active_listener: Callable[[], None] | None = None
30  _is_muted_listener: Callable[[], None] | None = None
31  _pipeline_listener: Callable[[], None] | None = None
32  _audio_settings_listener: Callable[[], None] | None = None
33 
34  @callback
35  def set_is_active(self, active: bool) -> None:
36  """Set active state."""
37  if active != self.is_activeis_active:
38  self.is_activeis_active = active
39  if self._is_active_listener_is_active_listener is not None:
40  self._is_active_listener_is_active_listener()
41 
42  @callback
43  def set_is_muted(self, muted: bool) -> None:
44  """Set muted state."""
45  if muted != self.is_mutedis_muted:
46  self.is_mutedis_muted = muted
47  if self._is_muted_listener_is_muted_listener is not None:
48  self._is_muted_listener_is_muted_listener()
49 
50  @callback
51  def set_pipeline_name(self, pipeline_name: str) -> None:
52  """Inform listeners that pipeline selection has changed."""
53  if pipeline_name != self.pipeline_namepipeline_name:
54  self.pipeline_namepipeline_name = pipeline_name
55  if self._pipeline_listener_pipeline_listener is not None:
56  self._pipeline_listener_pipeline_listener()
57 
58  @callback
59  def set_noise_suppression_level(self, noise_suppression_level: int) -> None:
60  """Set noise suppression level."""
61  if noise_suppression_level != self.noise_suppression_levelnoise_suppression_level:
62  self.noise_suppression_levelnoise_suppression_level = noise_suppression_level
63  if self._audio_settings_listener_audio_settings_listener is not None:
64  self._audio_settings_listener_audio_settings_listener()
65 
66  @callback
67  def set_auto_gain(self, auto_gain: int) -> None:
68  """Set auto gain amount."""
69  if auto_gain != self.auto_gainauto_gain:
70  self.auto_gainauto_gain = auto_gain
71  if self._audio_settings_listener_audio_settings_listener is not None:
72  self._audio_settings_listener_audio_settings_listener()
73 
74  @callback
75  def set_volume_multiplier(self, volume_multiplier: float) -> None:
76  """Set auto gain amount."""
77  if volume_multiplier != self.volume_multipliervolume_multiplier:
78  self.volume_multipliervolume_multiplier = volume_multiplier
79  if self._audio_settings_listener_audio_settings_listener is not None:
80  self._audio_settings_listener_audio_settings_listener()
81 
82  @callback
83  def set_vad_sensitivity(self, vad_sensitivity: VadSensitivity) -> None:
84  """Set VAD sensitivity."""
85  if vad_sensitivity != self.vad_sensitivityvad_sensitivity:
86  self.vad_sensitivityvad_sensitivity = vad_sensitivity
87  if self._audio_settings_listener_audio_settings_listener is not None:
88  self._audio_settings_listener_audio_settings_listener()
89 
90  @callback
91  def set_is_active_listener(self, is_active_listener: Callable[[], None]) -> None:
92  """Listen for updates to is_active."""
93  self._is_active_listener_is_active_listener = is_active_listener
94 
95  @callback
96  def set_is_muted_listener(self, is_muted_listener: Callable[[], None]) -> None:
97  """Listen for updates to muted status."""
98  self._is_muted_listener_is_muted_listener = is_muted_listener
99 
100  @callback
101  def set_pipeline_listener(self, pipeline_listener: Callable[[], None]) -> None:
102  """Listen for updates to pipeline."""
103  self._pipeline_listener_pipeline_listener = pipeline_listener
104 
105  @callback
107  self, audio_settings_listener: Callable[[], None]
108  ) -> None:
109  """Listen for updates to audio settings."""
110  self._audio_settings_listener_audio_settings_listener = audio_settings_listener
111 
112  def get_assist_in_progress_entity_id(self, hass: HomeAssistant) -> str | None:
113  """Return entity id for assist in progress binary sensor."""
114  ent_reg = er.async_get(hass)
115  return ent_reg.async_get_entity_id(
116  "binary_sensor", DOMAIN, f"{self.satellite_id}-assist_in_progress"
117  )
118 
119  def get_muted_entity_id(self, hass: HomeAssistant) -> str | None:
120  """Return entity id for satellite muted switch."""
121  ent_reg = er.async_get(hass)
122  return ent_reg.async_get_entity_id(
123  "switch", DOMAIN, f"{self.satellite_id}-mute"
124  )
125 
126  def get_pipeline_entity_id(self, hass: HomeAssistant) -> str | None:
127  """Return entity id for pipeline select."""
128  ent_reg = er.async_get(hass)
129  return ent_reg.async_get_entity_id(
130  "select", DOMAIN, f"{self.satellite_id}-pipeline"
131  )
132 
133  def get_noise_suppression_level_entity_id(self, hass: HomeAssistant) -> str | None:
134  """Return entity id for noise suppression select."""
135  ent_reg = er.async_get(hass)
136  return ent_reg.async_get_entity_id(
137  "select", DOMAIN, f"{self.satellite_id}-noise_suppression_level"
138  )
139 
140  def get_auto_gain_entity_id(self, hass: HomeAssistant) -> str | None:
141  """Return entity id for auto gain amount."""
142  ent_reg = er.async_get(hass)
143  return ent_reg.async_get_entity_id(
144  "number", DOMAIN, f"{self.satellite_id}-auto_gain"
145  )
146 
147  def get_volume_multiplier_entity_id(self, hass: HomeAssistant) -> str | None:
148  """Return entity id for microphone volume multiplier."""
149  ent_reg = er.async_get(hass)
150  return ent_reg.async_get_entity_id(
151  "number", DOMAIN, f"{self.satellite_id}-volume_multiplier"
152  )
153 
154  def get_vad_sensitivity_entity_id(self, hass: HomeAssistant) -> str | None:
155  """Return entity id for VAD sensitivity."""
156  ent_reg = er.async_get(hass)
157  return ent_reg.async_get_entity_id(
158  "select", DOMAIN, f"{self.satellite_id}-vad_sensitivity"
159  )
None set_noise_suppression_level(self, int noise_suppression_level)
Definition: devices.py:59
None set_pipeline_name(self, str pipeline_name)
Definition: devices.py:51
str|None get_assist_in_progress_entity_id(self, HomeAssistant hass)
Definition: devices.py:112
str|None get_noise_suppression_level_entity_id(self, HomeAssistant hass)
Definition: devices.py:133
str|None get_muted_entity_id(self, HomeAssistant hass)
Definition: devices.py:119
str|None get_vad_sensitivity_entity_id(self, HomeAssistant hass)
Definition: devices.py:154
None set_is_muted_listener(self, Callable[[], None] is_muted_listener)
Definition: devices.py:96
str|None get_auto_gain_entity_id(self, HomeAssistant hass)
Definition: devices.py:140
None set_volume_multiplier(self, float volume_multiplier)
Definition: devices.py:75
None set_audio_settings_listener(self, Callable[[], None] audio_settings_listener)
Definition: devices.py:108
None set_vad_sensitivity(self, VadSensitivity vad_sensitivity)
Definition: devices.py:83
str|None get_pipeline_entity_id(self, HomeAssistant hass)
Definition: devices.py:126
None set_is_active_listener(self, Callable[[], None] is_active_listener)
Definition: devices.py:91
None set_pipeline_listener(self, Callable[[], None] pipeline_listener)
Definition: devices.py:101
str|None get_volume_multiplier_entity_id(self, HomeAssistant hass)
Definition: devices.py:147