Home Assistant Unofficial Reference 2024.12.1
siren.py
Go to the documentation of this file.
1 """Support for ZHA sirens."""
2 
3 from __future__ import annotations
4 
5 import functools
6 from typing import Any
7 
8 from zha.application.const import (
9  WARNING_DEVICE_MODE_BURGLAR,
10  WARNING_DEVICE_MODE_EMERGENCY,
11  WARNING_DEVICE_MODE_EMERGENCY_PANIC,
12  WARNING_DEVICE_MODE_FIRE,
13  WARNING_DEVICE_MODE_FIRE_PANIC,
14  WARNING_DEVICE_MODE_POLICE_PANIC,
15 )
16 from zha.application.platforms.siren import SirenEntityFeature as ZHASirenEntityFeature
17 
19  ATTR_DURATION,
20  ATTR_TONE,
21  ATTR_VOLUME_LEVEL,
22  SirenEntity,
23  SirenEntityFeature,
24 )
25 from homeassistant.config_entries import ConfigEntry
26 from homeassistant.const import Platform
27 from homeassistant.core import HomeAssistant
28 from homeassistant.helpers.dispatcher import async_dispatcher_connect
29 from homeassistant.helpers.entity_platform import AddEntitiesCallback
30 
31 from .entity import ZHAEntity
32 from .helpers import (
33  SIGNAL_ADD_ENTITIES,
34  EntityData,
35  async_add_entities as zha_async_add_entities,
36  convert_zha_error_to_ha_error,
37  get_zha_data,
38 )
39 
40 
42  hass: HomeAssistant,
43  config_entry: ConfigEntry,
44  async_add_entities: AddEntitiesCallback,
45 ) -> None:
46  """Set up the Zigbee Home Automation siren from config entry."""
47  zha_data = get_zha_data(hass)
48  entities_to_create = zha_data.platforms[Platform.SIREN]
49 
51  hass,
52  SIGNAL_ADD_ENTITIES,
53  functools.partial(
54  zha_async_add_entities, async_add_entities, ZHASiren, entities_to_create
55  ),
56  )
57  config_entry.async_on_unload(unsub)
58 
59 
61  """Representation of a ZHA siren."""
62 
63  _attr_available_tones: list[int | str] | dict[int, str] | None = {
64  WARNING_DEVICE_MODE_BURGLAR: "Burglar",
65  WARNING_DEVICE_MODE_FIRE: "Fire",
66  WARNING_DEVICE_MODE_EMERGENCY: "Emergency",
67  WARNING_DEVICE_MODE_POLICE_PANIC: "Police Panic",
68  WARNING_DEVICE_MODE_FIRE_PANIC: "Fire Panic",
69  WARNING_DEVICE_MODE_EMERGENCY_PANIC: "Emergency Panic",
70  }
71 
72  def __init__(self, entity_data: EntityData, **kwargs: Any) -> None:
73  """Initialize the ZHA siren."""
74  super().__init__(entity_data, **kwargs)
75 
76  features: SirenEntityFeature = SirenEntityFeature(0)
77  zha_features: ZHASirenEntityFeature = self.entity_data.entity.supported_features
78 
79  if ZHASirenEntityFeature.TURN_ON in zha_features:
80  features |= SirenEntityFeature.TURN_ON
81  if ZHASirenEntityFeature.TURN_OFF in zha_features:
82  features |= SirenEntityFeature.TURN_OFF
83  if ZHASirenEntityFeature.TONES in zha_features:
84  features |= SirenEntityFeature.TONES
85  if ZHASirenEntityFeature.VOLUME_SET in zha_features:
86  features |= SirenEntityFeature.VOLUME_SET
87  if ZHASirenEntityFeature.DURATION in zha_features:
88  features |= SirenEntityFeature.DURATION
89 
90  self._attr_supported_features_attr_supported_features = features
91 
92  @property
93  def is_on(self) -> bool:
94  """Return True if entity is on."""
95  return self.entity_data.entity.is_on
96 
97  @convert_zha_error_to_ha_error
98  async def async_turn_on(self, **kwargs: Any) -> None:
99  """Turn on siren."""
100  await self.entity_data.entity.async_turn_on(
101  duration=kwargs.get(ATTR_DURATION),
102  tone=kwargs.get(ATTR_TONE),
103  volume_level=kwargs.get(ATTR_VOLUME_LEVEL),
104  )
105  self.async_write_ha_stateasync_write_ha_state()
106 
107  @convert_zha_error_to_ha_error
108  async def async_turn_off(self, **kwargs: Any) -> None:
109  """Turn off siren."""
110  await self.entity_data.entity.async_turn_off()
111  self.async_write_ha_stateasync_write_ha_state()
None __init__(self, EntityData entity_data, **Any kwargs)
Definition: siren.py:72
None async_turn_off(self, **Any kwargs)
Definition: siren.py:108
None async_turn_on(self, **Any kwargs)
Definition: siren.py:98
HAZHAData get_zha_data(HomeAssistant hass)
Definition: helpers.py:1020
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: siren.py:45
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103