Home Assistant Unofficial Reference 2024.12.1
select.py
Go to the documentation of this file.
1 """Support for EZVIZ select controls."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 
7 from pyezviz.constants import DeviceSwitchType, SoundMode
8 from pyezviz.exceptions import HTTPError, PyEzvizError
9 
10 from homeassistant.components.select import SelectEntity, SelectEntityDescription
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import EntityCategory
13 from homeassistant.core import HomeAssistant
14 from homeassistant.exceptions import HomeAssistantError
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 
17 from .const import DATA_COORDINATOR, DOMAIN
18 from .coordinator import EzvizDataUpdateCoordinator
19 from .entity import EzvizEntity
20 
21 PARALLEL_UPDATES = 1
22 
23 
24 @dataclass(frozen=True, kw_only=True)
26  """Describe a EZVIZ Select entity."""
27 
28  supported_switch: int
29 
30 
32  key="alarm_sound_mod",
33  translation_key="alarm_sound_mode",
34  entity_category=EntityCategory.CONFIG,
35  options=["soft", "intensive", "silent"],
36  supported_switch=DeviceSwitchType.ALARM_TONE.value,
37 )
38 
39 
41  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
42 ) -> None:
43  """Set up EZVIZ select entities based on a config entry."""
44  coordinator: EzvizDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
45  DATA_COORDINATOR
46  ]
47 
49  EzvizSelect(coordinator, camera)
50  for camera in coordinator.data
51  for switch in coordinator.data[camera]["switches"]
52  if switch == SELECT_TYPE.supported_switch
53  )
54 
55 
57  """Representation of a EZVIZ select entity."""
58 
59  def __init__(
60  self,
61  coordinator: EzvizDataUpdateCoordinator,
62  serial: str,
63  ) -> None:
64  """Initialize the sensor."""
65  super().__init__(coordinator, serial)
66  self._attr_unique_id_attr_unique_id = f"{serial}_{SELECT_TYPE.key}"
67  self.entity_descriptionentity_description = SELECT_TYPE
68 
69  @property
70  def current_option(self) -> str | None:
71  """Return the selected entity option to represent the entity state."""
72  sound_mode_value = getattr(
73  SoundMode, self.datadatadata[self.entity_descriptionentity_description.key]
74  ).value
75  if sound_mode_value in [0, 1, 2]:
76  return self.optionsoptions[sound_mode_value]
77 
78  return None
79 
80  def select_option(self, option: str) -> None:
81  """Change the selected option."""
82  sound_mode_value = self.optionsoptions.index(option)
83 
84  try:
85  self.coordinator.ezviz_client.alarm_sound(self._serial_serial, sound_mode_value, 1)
86 
87  except (HTTPError, PyEzvizError) as err:
88  raise HomeAssistantError(
89  f"Cannot set Warning sound level for {self.entity_id}"
90  ) from err
None __init__(self, EzvizDataUpdateCoordinator coordinator, str serial)
Definition: select.py:63
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: select.py:42