From 36b714b513785a029aaedcbd4eea751ae303244e Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Fri, 26 Jun 2026 11:38:48 +0200 Subject: [PATCH] Add Reolink push command IDs (#174876) --- homeassistant/components/reolink/__init__.py | 8 ++++++-- homeassistant/components/reolink/light.py | 1 + homeassistant/components/reolink/number.py | 19 +++++++++++++++++++ homeassistant/components/reolink/select.py | 9 +++++++++ homeassistant/components/reolink/switch.py | 12 ++++++++++++ tests/components/reolink/test_init.py | 2 +- 6 files changed, 48 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/reolink/__init__.py b/homeassistant/components/reolink/__init__.py index 523fcf25309f..a3caa09603d5 100644 --- a/homeassistant/components/reolink/__init__.py +++ b/homeassistant/components/reolink/__init__.py @@ -286,7 +286,10 @@ async def register_callbacks( return async_camera_wake host.api.baichuan.register_callback( - "privacy_mode_change", async_privacy_mode_change, 623 + "privacy_mode_change_623", async_privacy_mode_change, 623 + ) + host.api.baichuan.register_callback( + "privacy_mode_change_574", async_privacy_mode_change, 574 ) for channel in host.api.channels: if host.api.supported(channel, "battery"): @@ -306,7 +309,8 @@ async def async_unload_entry( await host.stop() - host.api.baichuan.unregister_callback("privacy_mode_change") + host.api.baichuan.unregister_callback("privacy_mode_change_623") + host.api.baichuan.unregister_callback("privacy_mode_change_574") for channel in host.api.channels: if host.api.supported(channel, "battery"): host.api.baichuan.unregister_callback(f"camera_{channel}_wake") diff --git a/homeassistant/components/reolink/light.py b/homeassistant/components/reolink/light.py index 4a52bcb66fd8..48eb5b053a0a 100644 --- a/homeassistant/components/reolink/light.py +++ b/homeassistant/components/reolink/light.py @@ -75,6 +75,7 @@ LIGHT_ENTITIES = ( ReolinkLightEntityDescription( key="status_led", cmd_key="GetPowerLed", + cmd_id=208, translation_key="status_led", entity_category=EntityCategory.CONFIG, supported=lambda api, ch: api.supported(ch, "power_led"), diff --git a/homeassistant/components/reolink/number.py b/homeassistant/components/reolink/number.py index d9f49a0dd236..84f1fa1ce311 100644 --- a/homeassistant/components/reolink/number.py +++ b/homeassistant/components/reolink/number.py @@ -195,6 +195,7 @@ NUMBER_ENTITIES = ( key="volume", cmd_key="GetAudioCfg", translation_key="volume", + cmd_id=264, entity_category=EntityCategory.CONFIG, native_step=1, native_min_value=0, @@ -206,6 +207,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="volume_speak", cmd_key="GetAudioCfg", + cmd_id=264, translation_key="volume_speak", entity_category=EntityCategory.CONFIG, native_step=1, @@ -218,6 +220,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="volume_doorbell", cmd_key="GetAudioCfg", + cmd_id=264, translation_key="volume_doorbell", entity_category=EntityCategory.CONFIG, native_step=1, @@ -269,6 +272,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="pir_sensitivity", cmd_key="GetPirInfo", + cmd_id=212, translation_key="pir_sensitivity", entity_category=EntityCategory.CONFIG, native_step=1, @@ -281,6 +285,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="pir_interval", cmd_key="GetPirInfo", + cmd_id=212, translation_key="pir_interval", entity_category=EntityCategory.CONFIG, device_class=NumberDeviceClass.DURATION, @@ -296,6 +301,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_face_sensititvity", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_face_sensitivity", entity_category=EntityCategory.CONFIG, native_step=1, @@ -310,6 +316,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_person_sensititvity", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_person_sensitivity", entity_category=EntityCategory.CONFIG, native_step=1, @@ -324,6 +331,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_vehicle_sensititvity", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_vehicle_sensitivity", entity_category=EntityCategory.CONFIG, native_step=1, @@ -338,6 +346,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_non_motor_vehicle_sensitivity", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_non_motor_vehicle_sensitivity", entity_category=EntityCategory.CONFIG, native_step=1, @@ -355,6 +364,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_package_sensititvity", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_package_sensitivity", entity_category=EntityCategory.CONFIG, native_step=1, @@ -369,6 +379,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_pet_sensititvity", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_pet_sensitivity", entity_category=EntityCategory.CONFIG, native_step=1, @@ -385,6 +396,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_pet_sensititvity", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_animal_sensitivity", entity_category=EntityCategory.CONFIG, native_step=1, @@ -411,6 +423,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_face_delay", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_face_delay", entity_category=EntityCategory.CONFIG, device_class=NumberDeviceClass.DURATION, @@ -428,6 +441,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_person_delay", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_person_delay", entity_category=EntityCategory.CONFIG, device_class=NumberDeviceClass.DURATION, @@ -445,6 +459,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_non_motor_vehicle_delay", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_non_motor_vehicle_delay", entity_category=EntityCategory.CONFIG, device_class=NumberDeviceClass.DURATION, @@ -464,6 +479,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_vehicle_delay", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_vehicle_delay", entity_category=EntityCategory.CONFIG, device_class=NumberDeviceClass.DURATION, @@ -481,6 +497,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_package_delay", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_package_delay", entity_category=EntityCategory.CONFIG, device_class=NumberDeviceClass.DURATION, @@ -498,6 +515,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_pet_delay", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_pet_delay", entity_category=EntityCategory.CONFIG, device_class=NumberDeviceClass.DURATION, @@ -517,6 +535,7 @@ NUMBER_ENTITIES = ( ReolinkNumberEntityDescription( key="ai_pet_delay", cmd_key="GetAiAlarm", + cmd_id=342, translation_key="ai_animal_delay", entity_category=EntityCategory.CONFIG, device_class=NumberDeviceClass.DURATION, diff --git a/homeassistant/components/reolink/select.py b/homeassistant/components/reolink/select.py index 02497919e317..475134b2dd43 100644 --- a/homeassistant/components/reolink/select.py +++ b/homeassistant/components/reolink/select.py @@ -185,6 +185,7 @@ SELECT_ENTITIES = ( ReolinkSelectEntityDescription( key="status_led", cmd_key="GetPowerLed", + cmd_id=208, translation_key="doorbell_led", entity_category=EntityCategory.CONFIG, get_options=lambda api, ch: api.doorbell_led_list(ch), @@ -232,6 +233,7 @@ SELECT_ENTITIES = ( ReolinkSelectEntityDescription( key="main_frame_rate", cmd_key="GetEnc", + cmd_id=56, translation_key="main_frame_rate", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, @@ -244,6 +246,7 @@ SELECT_ENTITIES = ( ReolinkSelectEntityDescription( key="sub_frame_rate", cmd_key="GetEnc", + cmd_id=56, translation_key="sub_frame_rate", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, @@ -256,6 +259,7 @@ SELECT_ENTITIES = ( ReolinkSelectEntityDescription( key="main_bit_rate", cmd_key="GetEnc", + cmd_id=56, translation_key="main_bit_rate", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, @@ -268,6 +272,7 @@ SELECT_ENTITIES = ( ReolinkSelectEntityDescription( key="sub_bit_rate", cmd_key="GetEnc", + cmd_id=56, translation_key="sub_bit_rate", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, @@ -280,6 +285,7 @@ SELECT_ENTITIES = ( ReolinkSelectEntityDescription( key="main_encoding", cmd_key="GetEnc", + cmd_id=56, translation_key="main_encoding", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, @@ -291,6 +297,7 @@ SELECT_ENTITIES = ( ReolinkSelectEntityDescription( key="sub_encoding", cmd_key="GetEnc", + cmd_id=56, translation_key="sub_encoding", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, @@ -316,6 +323,7 @@ SELECT_ENTITIES = ( ReolinkSelectEntityDescription( key="post_rec_time", cmd_key="GetRec", + cmd_id=54, translation_key="post_rec_time", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, @@ -340,6 +348,7 @@ HOST_SELECT_ENTITIES = ( ReolinkHostSelectEntityDescription( key="packing_time", cmd_key="GetRec", + cmd_id=54, translation_key="packing_time", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, diff --git a/homeassistant/components/reolink/switch.py b/homeassistant/components/reolink/switch.py index 2e501fc17a6c..69be215d546d 100644 --- a/homeassistant/components/reolink/switch.py +++ b/homeassistant/components/reolink/switch.py @@ -74,6 +74,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="ir_lights", cmd_key="GetIrLights", + cmd_id=208, translation_key="ir_lights", entity_category=EntityCategory.CONFIG, supported=lambda api, ch: api.supported(ch, "ir_lights"), @@ -83,6 +84,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="record_audio", cmd_key="GetEnc", + cmd_id=56, translation_key="record_audio", entity_category=EntityCategory.CONFIG, supported=lambda api, ch: api.supported(ch, "audio"), @@ -92,6 +94,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="siren_on_event", cmd_key="GetAudioAlarm", + cmd_id=232, translation_key="siren_on_event", entity_category=EntityCategory.CONFIG, supported=lambda api, ch: api.supported(ch, "siren"), @@ -136,6 +139,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="email", cmd_key="GetEmail", + cmd_id=217, translation_key="email", entity_category=EntityCategory.CONFIG, supported=lambda api, ch: api.supported(ch, "email") and api.is_nvr, @@ -145,6 +149,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="ftp_upload", cmd_key="GetFtp", + cmd_id=70, translation_key="ftp_upload", entity_category=EntityCategory.CONFIG, supported=lambda api, ch: api.supported(ch, "ftp") and api.is_nvr, @@ -163,6 +168,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="record", cmd_key="GetRec", + cmd_id=81, translation_key="record", entity_category=EntityCategory.CONFIG, supported=lambda api, ch: api.supported(ch, "rec_enable") and api.is_nvr, @@ -200,6 +206,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="doorbell_button_sound", cmd_key="GetAudioCfg", + cmd_id=264, translation_key="doorbell_button_sound", entity_category=EntityCategory.CONFIG, supported=lambda api, ch: api.supported(ch, "doorbell_button_sound"), @@ -209,6 +216,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="pir_enabled", cmd_key="GetPirInfo", + cmd_id=212, translation_key="pir_enabled", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, @@ -219,6 +227,7 @@ SWITCH_ENTITIES = ( ReolinkSwitchEntityDescription( key="pir_reduce_alarm", cmd_key="GetPirInfo", + cmd_id=212, translation_key="pir_reduce_alarm", entity_category=EntityCategory.CONFIG, entity_registry_enabled_default=False, @@ -260,6 +269,7 @@ HOST_SWITCH_ENTITIES = ( ReolinkHostSwitchEntityDescription( key="email", cmd_key="GetEmail", + cmd_id=217, translation_key="email", entity_category=EntityCategory.CONFIG, supported=lambda api: api.supported(None, "email") and not api.is_hub, @@ -269,6 +279,7 @@ HOST_SWITCH_ENTITIES = ( ReolinkHostSwitchEntityDescription( key="ftp_upload", cmd_key="GetFtp", + cmd_id=70, translation_key="ftp_upload", entity_category=EntityCategory.CONFIG, supported=lambda api: api.supported(None, "ftp") and not api.is_hub, @@ -287,6 +298,7 @@ HOST_SWITCH_ENTITIES = ( ReolinkHostSwitchEntityDescription( key="record", cmd_key="GetRec", + cmd_id=81, translation_key="record", entity_category=EntityCategory.CONFIG, supported=lambda api: api.supported(None, "rec_enable") and not api.is_hub, diff --git a/tests/components/reolink/test_init.py b/tests/components/reolink/test_init.py index 385397a72e81..4a7ce157cc77 100644 --- a/tests/components/reolink/test_init.py +++ b/tests/components/reolink/test_init.py @@ -1076,7 +1076,7 @@ async def test_privacy_mode_change_callback( def register_callback( self, callback_id: str, callback: Callable[[], None], *args, **key_args ) -> None: - if callback_id == "privacy_mode_change": + if callback_id == "privacy_mode_change_623": self.callback_func = callback callback_mock = callback_mock_class()