1 """Component providing support for Reolink siren entities."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
8 from reolink_aio.exceptions
import InvalidParameterError, ReolinkError
14 SirenEntityDescription,
21 from .entity
import ReolinkChannelCoordinatorEntity, ReolinkChannelEntityDescription
22 from .util
import ReolinkConfigEntry, ReolinkData
27 @dataclass(frozen=True)
29 SirenEntityDescription, ReolinkChannelEntityDescription
31 """A class that describes siren entities."""
37 translation_key=
"siren",
38 supported=
lambda api, ch: api.supported(ch,
"siren_play"),
45 config_entry: ReolinkConfigEntry,
46 async_add_entities: AddEntitiesCallback,
48 """Set up a Reolink siren entities."""
49 reolink_data: ReolinkData = config_entry.runtime_data
53 for entity_description
in SIREN_ENTITIES
54 for channel
in reolink_data.host.api.channels
55 if entity_description.supported(reolink_data.host.api, channel)
60 """Base siren entity class for Reolink IP cameras."""
62 _attr_supported_features = (
63 SirenEntityFeature.TURN_ON
64 | SirenEntityFeature.TURN_OFF
65 | SirenEntityFeature.DURATION
66 | SirenEntityFeature.VOLUME_SET
68 entity_description: ReolinkSirenEntityDescription
72 reolink_data: ReolinkData,
74 entity_description: ReolinkSirenEntityDescription,
76 """Initialize Reolink siren entity."""
78 super().
__init__(reolink_data, channel)
81 """Turn on the siren."""
82 if (volume := kwargs.get(ATTR_VOLUME_LEVEL))
is not None:
84 await self.
_host_host.api.set_volume(self.
_channel_channel,
int(volume * 100))
85 except InvalidParameterError
as err:
87 except ReolinkError
as err:
89 duration = kwargs.get(ATTR_DURATION)
91 await self.
_host_host.api.set_siren(self.
_channel_channel,
True, duration)
92 except InvalidParameterError
as err:
94 except ReolinkError
as err:
98 """Turn off the siren."""
100 await self.
_host_host.api.set_siren(self.
_channel_channel,
False,
None)
101 except ReolinkError
as err:
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None __init__(self, ReolinkData reolink_data, int channel, ReolinkSirenEntityDescription entity_description)
None async_setup_entry(HomeAssistant hass, ReolinkConfigEntry config_entry, AddEntitiesCallback async_add_entities)