1 """Reolink additional services."""
3 from __future__
import annotations
5 from reolink_aio.api
import Chime
6 from reolink_aio.enums
import ChimeToneEnum
7 from reolink_aio.exceptions
import InvalidParameterError, ReolinkError
8 import voluptuous
as vol
16 from .const
import DOMAIN
17 from .host
import ReolinkHost
18 from .util
import get_device_uid_and_ch
20 ATTR_RINGTONE =
"ringtone"
25 """Set up Reolink services."""
27 async
def async_play_chime(service_call: ServiceCall) ->
None:
28 """Play a ringtone."""
29 service_data = service_call.data
30 device_registry = dr.async_get(hass)
32 for device_id
in service_data[ATTR_DEVICE_ID]:
34 device = device_registry.async_get(device_id)
35 if device
is not None:
36 for entry_id
in device.config_entries:
37 config_entry = hass.config_entries.async_get_entry(entry_id)
38 if config_entry
is not None and config_entry.domain == DOMAIN:
43 or config_entry.state == ConfigEntryState.NOT_LOADED
46 translation_domain=DOMAIN,
47 translation_key=
"service_entry_ex",
48 translation_placeholders={
"service_name":
"play_chime"},
50 host: ReolinkHost = config_entry.runtime_data.host
52 chime: Chime |
None = host.api.chime(chime_id)
53 if not is_chime
or chime
is None:
55 translation_domain=DOMAIN,
56 translation_key=
"service_not_chime",
57 translation_placeholders={
"device_name":
str(device.name)},
60 ringtone = service_data[ATTR_RINGTONE]
62 await chime.play(ChimeToneEnum[ringtone].value)
63 except InvalidParameterError
as err:
65 except ReolinkError
as err:
68 hass.services.async_register(
74 vol.Required(ATTR_DEVICE_ID): list[str],
75 vol.Required(ATTR_RINGTONE): vol.In(
76 [method.name
for method
in ChimeToneEnum][1:]
None async_setup_services(HomeAssistant hass)
tuple[list[str], int|None, bool] get_device_uid_and_ch(dr.DeviceEntry device, ReolinkHost host)