Home Assistant Unofficial Reference 2024.12.1
siren.py
Go to the documentation of this file.
1 """Platform for siren integration."""
2 
3 from typing import Any
4 
5 from devolo_home_control_api.devices.zwave import Zwave
6 from devolo_home_control_api.homecontrol import HomeControl
7 
8 from homeassistant.components.siren import ATTR_TONE, SirenEntity, SirenEntityFeature
9 from homeassistant.core import HomeAssistant
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 
12 from . import DevoloHomeControlConfigEntry
13 from .devolo_multi_level_switch import DevoloMultiLevelSwitchDeviceEntity
14 
15 
17  hass: HomeAssistant,
18  entry: DevoloHomeControlConfigEntry,
19  async_add_entities: AddEntitiesCallback,
20 ) -> None:
21  """Get all binary sensor and multi level sensor devices and setup them via config entry."""
22 
25  homecontrol=gateway,
26  device_instance=device,
27  element_uid=multi_level_switch,
28  )
29  for gateway in entry.runtime_data
30  for device in gateway.multi_level_switch_devices
31  for multi_level_switch in device.multi_level_switch_property
32  if multi_level_switch.startswith("devolo.SirenMultiLevelSwitch")
33  )
34 
35 
37  """Representation of a cover device within devolo Home Control."""
38 
39  _attr_supported_features = (
40  SirenEntityFeature.TURN_OFF
41  | SirenEntityFeature.TURN_ON
42  | SirenEntityFeature.TONES
43  )
44 
45  def __init__(
46  self, homecontrol: HomeControl, device_instance: Zwave, element_uid: str
47  ) -> None:
48  """Initialize a devolo multi level switch."""
49  super().__init__(
50  homecontrol=homecontrol,
51  device_instance=device_instance,
52  element_uid=element_uid,
53  )
54  self._attr_available_tones_attr_available_tones = [
55  *range(
56  int(self._multi_level_switch_property_multi_level_switch_property.min),
57  int(self._multi_level_switch_property_multi_level_switch_property.max) + 1,
58  )
59  ]
60  self._default_tone_default_tone = device_instance.settings_property["tone"].tone
61 
62  @property
63  def is_on(self) -> bool:
64  """Whether the device is on or off."""
65  return self._value_value_value != 0
66 
67  def turn_on(self, **kwargs: Any) -> None:
68  """Turn the device off."""
69  tone = kwargs.get(ATTR_TONE) or self._default_tone_default_tone
70  self._multi_level_switch_property_multi_level_switch_property.set(tone)
71 
72  def turn_off(self, **kwargs: Any) -> None:
73  """Turn the device off."""
74  self._multi_level_switch_property_multi_level_switch_property.set(0)
75 
76  def _generic_message(self, message: tuple) -> None:
77  """Handle generic messages."""
78  if message[0].startswith("mss"):
79  # The default tone was changed
80  self._default_tone_default_tone = message[1]
81  else:
82  super()._generic_message(message=message)
None __init__(self, HomeControl homecontrol, Zwave device_instance, str element_uid)
Definition: siren.py:47
None async_setup_entry(HomeAssistant hass, DevoloHomeControlConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: siren.py:20