Home Assistant Unofficial Reference 2024.12.1
siren.py
Go to the documentation of this file.
1 """Support for TPLink hub alarm."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from kasa import Device, Module
8 from kasa.smart.modules.alarm import Alarm
9 
10 from homeassistant.components.siren import SirenEntity, SirenEntityFeature
11 from homeassistant.core import HomeAssistant, callback
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from . import TPLinkConfigEntry
15 from .coordinator import TPLinkDataUpdateCoordinator
16 from .entity import CoordinatedTPLinkEntity, async_refresh_after
17 
18 
20  hass: HomeAssistant,
21  config_entry: TPLinkConfigEntry,
22  async_add_entities: AddEntitiesCallback,
23 ) -> None:
24  """Set up siren entities."""
25  data = config_entry.runtime_data
26  parent_coordinator = data.parent_coordinator
27  device = parent_coordinator.device
28 
29  if Module.Alarm in device.modules:
30  async_add_entities([TPLinkSirenEntity(device, parent_coordinator)])
31 
32 
34  """Representation of a tplink hub alarm."""
35 
36  _attr_name = None
37  _attr_supported_features = SirenEntityFeature.TURN_OFF | SirenEntityFeature.TURN_ON
38 
39  def __init__(
40  self,
41  device: Device,
42  coordinator: TPLinkDataUpdateCoordinator,
43  ) -> None:
44  """Initialize the siren entity."""
45  self._alarm_module: Alarm = device.modules[Module.Alarm]
46  super().__init__(device, coordinator)
47 
48  @async_refresh_after
49  async def async_turn_on(self, **kwargs: Any) -> None:
50  """Turn the siren on."""
51  await self._alarm_module.play()
52 
53  @async_refresh_after
54  async def async_turn_off(self, **kwargs: Any) -> None:
55  """Turn the siren off."""
56  await self._alarm_module.stop()
57 
58  @callback
59  def _async_update_attrs(self) -> None:
60  """Update the entity's attributes."""
61  self._attr_is_on_attr_is_on = self._alarm_module.active