From 118ceedda1640c39f72f1ff287b8a6d0d84185a5 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Sun, 22 Sep 2024 14:41:47 +0200 Subject: [PATCH] Add Reolink Home Hub ringtone control (#126390) * Add Hub alarm/visitor ringtones * fix styling * fix translations * fix tests * Rename buzzer to hub ringtone --- homeassistant/components/reolink/icons.json | 16 +++++++-- homeassistant/components/reolink/select.py | 27 ++++++++++++++ homeassistant/components/reolink/strings.json | 36 +++++++++++++++++-- homeassistant/components/reolink/switch.py | 4 +-- .../reolink/snapshots/test_diagnostics.ambr | 4 +++ 5 files changed, 81 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/reolink/icons.json b/homeassistant/components/reolink/icons.json index e3a0c867f18..a254669a119 100644 --- a/homeassistant/components/reolink/icons.json +++ b/homeassistant/components/reolink/icons.json @@ -210,6 +210,18 @@ "hdr": { "default": "mdi:hdr" }, + "hub_alarm_ringtone": { + "default": "mdi:music-note", + "state": { + "alarm": "mdi:bullhorn" + } + }, + "hub_visitor_ringtone": { + "default": "mdi:music-note", + "state": { + "alarm": "mdi:bullhorn" + } + }, "motion_tone": { "default": "mdi:music-note", "state": { @@ -297,8 +309,8 @@ "manual_record": { "default": "mdi:record-rec" }, - "buzzer": { - "default": "mdi:room-service" + "hub_ringtone_on_event": { + "default": "mdi:music-note" }, "doorbell_button_sound": { "default": "mdi:volume-high" diff --git a/homeassistant/components/reolink/select.py b/homeassistant/components/reolink/select.py index bc6368df8de..b4175d41069 100644 --- a/homeassistant/components/reolink/select.py +++ b/homeassistant/components/reolink/select.py @@ -13,6 +13,7 @@ from reolink_aio.api import ( DayNightEnum, HDREnum, Host, + HubToneEnum, SpotlightModeEnum, StatusLedEnum, TrackMethodEnum, @@ -114,6 +115,32 @@ SELECT_ENTITIES = ( api.set_quick_reply(ch, file_id=_get_quick_reply_id(api, ch, mess)) ), ), + ReolinkSelectEntityDescription( + key="hub_alarm_ringtone", + cmd_key="GetDeviceAudioCfg", + translation_key="hub_alarm_ringtone", + entity_category=EntityCategory.CONFIG, + get_options=[mode.name for mode in HubToneEnum], + supported=lambda api, ch: api.supported(ch, "hub_audio"), + value=lambda api, ch: HubToneEnum(api.hub_alarm_tone_id(ch)).name, + method=lambda api, ch, name: ( + api.set_hub_audio(ch, alarm_tone_id=HubToneEnum[name].value) + ), + ), + ReolinkSelectEntityDescription( + key="hub_visitor_ringtone", + cmd_key="GetDeviceAudioCfg", + translation_key="hub_visitor_ringtone", + entity_category=EntityCategory.CONFIG, + get_options=[mode.name for mode in HubToneEnum], + supported=lambda api, ch: ( + api.supported(ch, "hub_audio") and api.is_doorbell(ch) + ), + value=lambda api, ch: HubToneEnum(api.hub_visitor_tone_id(ch)).name, + method=lambda api, ch, name: ( + api.set_hub_audio(ch, visitor_tone_id=HubToneEnum[name].value) + ), + ), ReolinkSelectEntityDescription( key="auto_track_method", cmd_key="GetAiCfg", diff --git a/homeassistant/components/reolink/strings.json b/homeassistant/components/reolink/strings.json index bd674b6574f..212300332c4 100644 --- a/homeassistant/components/reolink/strings.json +++ b/homeassistant/components/reolink/strings.json @@ -531,6 +531,38 @@ "auto": "Auto" } }, + "hub_alarm_ringtone": { + "name": "Hub alarm ringtone", + "state": { + "alarm": "Alarm", + "citybird": "[%key:component::reolink::entity::select::motion_tone::state::citybird%]", + "originaltune": "[%key:component::reolink::entity::select::motion_tone::state::originaltune%]", + "pianokey": "[%key:component::reolink::entity::select::motion_tone::state::pianokey%]", + "loop": "[%key:component::reolink::entity::select::motion_tone::state::loop%]", + "attraction": "[%key:component::reolink::entity::select::motion_tone::state::attraction%]", + "hophop": "[%key:component::reolink::entity::select::motion_tone::state::hophop%]", + "goodday": "[%key:component::reolink::entity::select::motion_tone::state::goodday%]", + "operetta": "[%key:component::reolink::entity::select::motion_tone::state::operetta%]", + "moonlight": "[%key:component::reolink::entity::select::motion_tone::state::moonlight%]", + "waybackhome": "[%key:component::reolink::entity::select::motion_tone::state::waybackhome%]" + } + }, + "hub_visitor_ringtone": { + "name": "Hub visitor ringtone", + "state": { + "alarm": "[%key:component::reolink::entity::select::hub_alarm_ringtone::state::alarm%]", + "citybird": "[%key:component::reolink::entity::select::motion_tone::state::citybird%]", + "originaltune": "[%key:component::reolink::entity::select::motion_tone::state::originaltune%]", + "pianokey": "[%key:component::reolink::entity::select::motion_tone::state::pianokey%]", + "loop": "[%key:component::reolink::entity::select::motion_tone::state::loop%]", + "attraction": "[%key:component::reolink::entity::select::motion_tone::state::attraction%]", + "hophop": "[%key:component::reolink::entity::select::motion_tone::state::hophop%]", + "goodday": "[%key:component::reolink::entity::select::motion_tone::state::goodday%]", + "operetta": "[%key:component::reolink::entity::select::motion_tone::state::operetta%]", + "moonlight": "[%key:component::reolink::entity::select::motion_tone::state::moonlight%]", + "waybackhome": "[%key:component::reolink::entity::select::motion_tone::state::waybackhome%]" + } + }, "motion_tone": { "name": "Motion ringtone", "state": { @@ -663,8 +695,8 @@ "manual_record": { "name": "Manual record" }, - "buzzer": { - "name": "Buzzer on event" + "hub_ringtone_on_event": { + "name": "Hub ringtone on event" }, "doorbell_button_sound": { "name": "Doorbell button sound" diff --git a/homeassistant/components/reolink/switch.py b/homeassistant/components/reolink/switch.py index e43cb0fdaaa..07f75ca5fa3 100644 --- a/homeassistant/components/reolink/switch.py +++ b/homeassistant/components/reolink/switch.py @@ -171,7 +171,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="buzzer", cmd_key="GetBuzzerAlarmV20", - translation_key="buzzer", + translation_key="hub_ringtone_on_event", entity_category=EntityCategory.CONFIG, supported=lambda api, ch: api.supported(ch, "buzzer") and api.is_nvr, value=lambda api, ch: api.buzzer_enabled(ch), @@ -248,7 +248,7 @@ NVR_SWITCH_ENTITIES = ( ReolinkNVRSwitchEntityDescription( key="buzzer", cmd_key="GetBuzzerAlarmV20", - translation_key="buzzer", + translation_key="hub_ringtone_on_event", icon="mdi:room-service", entity_category=EntityCategory.CONFIG, supported=lambda api: api.supported(None, "buzzer"), diff --git a/tests/components/reolink/snapshots/test_diagnostics.ambr b/tests/components/reolink/snapshots/test_diagnostics.ambr index 00363023d14..b8646eb0bee 100644 --- a/tests/components/reolink/snapshots/test_diagnostics.ambr +++ b/tests/components/reolink/snapshots/test_diagnostics.ambr @@ -77,6 +77,10 @@ '0': 1, 'null': 1, }), + 'GetDeviceAudioCfg': dict({ + '0': 2, + 'null': 2, + }), 'GetEmail': dict({ '0': 1, 'null': 2,