3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
9 from yolink.client_request
import ClientRequest
10 from yolink.const
import ATTR_DEVICE_SIREN
11 from yolink.device
import YoLinkDevice
15 SirenEntityDescription,
22 from .const
import DOMAIN
23 from .coordinator
import YoLinkCoordinator
24 from .entity
import YoLinkEntity
27 @dataclass(frozen=True)
29 """YoLink SirenEntityDescription."""
31 exists_fn: Callable[[YoLinkDevice], bool] =
lambda _:
True
32 value: Callable[[Any], bool |
None] =
lambda _:
None
35 DEVICE_TYPES: tuple[YoLinkSirenEntityDescription, ...] = (
38 value=
lambda value: value ==
"alert" if value
is not None else None,
39 exists_fn=
lambda device: device.device_type
in [ATTR_DEVICE_SIREN],
43 DEVICE_TYPE = [ATTR_DEVICE_SIREN]
48 config_entry: ConfigEntry,
49 async_add_entities: AddEntitiesCallback,
51 """Set up YoLink siren from a config entry."""
52 device_coordinators = hass.data[DOMAIN][config_entry.entry_id].device_coordinators
53 siren_device_coordinators = [
55 for device_coordinator
in device_coordinators.values()
56 if device_coordinator.device.device_type
in DEVICE_TYPE
60 for siren_device_coordinator
in siren_device_coordinators
61 for description
in DEVICE_TYPES
62 if description.exists_fn(siren_device_coordinator.device)
67 """YoLink Siren Entity."""
71 entity_description: YoLinkSirenEntityDescription
75 config_entry: ConfigEntry,
76 coordinator: YoLinkCoordinator,
77 description: YoLinkSirenEntityDescription,
79 """Init YoLink Siren."""
80 super().
__init__(config_entry, coordinator)
83 f
"{coordinator.device.device_id} {self.entity_description.key}"
86 SirenEntityFeature.TURN_ON | SirenEntityFeature.TURN_OFF
91 """Update HA Entity State."""
98 """Call setState api to change siren state."""
99 await self.
call_devicecall_device(ClientRequest(
"setState", {
"state": {
"alarm": state}}))
104 """Turn the entity on."""
108 """Turn the entity off."""
None call_device(self, ClientRequest request)
None update_entity_state(self, dict[str, Any] state)
None async_turn_off(self, **Any kwargs)
None __init__(self, ConfigEntry config_entry, YoLinkCoordinator coordinator, YoLinkSirenEntityDescription description)
None async_turn_on(self, **Any kwargs)
None call_state_change(self, bool state)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)