From 4d08621bfc6fb4301efb5d59f686ecc22b8dd253 Mon Sep 17 00:00:00 2001 From: mik-laj <12058428+mik-laj@users.noreply.github.com> Date: Thu, 7 May 2026 01:32:53 +0000 Subject: [PATCH 1/7] Add more entities for Tuya camera --- homeassistant/components/tuya/button.py | 7 + homeassistant/components/tuya/const.py | 6 + homeassistant/components/tuya/number.py | 15 ++ homeassistant/components/tuya/strings.json | 18 ++ homeassistant/components/tuya/switch.py | 10 + .../tuya/snapshots/test_number.ambr | 180 ++++++++++++++++++ 6 files changed, 236 insertions(+) diff --git a/homeassistant/components/tuya/button.py b/homeassistant/components/tuya/button.py index 02e571b5ee742f..1d842c05340fcb 100644 --- a/homeassistant/components/tuya/button.py +++ b/homeassistant/components/tuya/button.py @@ -63,6 +63,13 @@ entity_category=EntityCategory.CONFIG, ), ), + DeviceCategory.SP: ( + ButtonEntityDescription( + key=DPCode.DEVICE_RESTART, + translation_key="device_restart", + entity_category=EntityCategory.CONFIG, + ), + ), } diff --git a/homeassistant/components/tuya/const.py b/homeassistant/components/tuya/const.py index ff668ccd5d9b7b..55c393a23a13bf 100644 --- a/homeassistant/components/tuya/const.py +++ b/homeassistant/components/tuya/const.py @@ -696,6 +696,7 @@ class DPCode(StrEnum): DEHUMIDITY_SET_VALUE = "dehumidify_set_value" DELAY_CLEAN_TIME = "delay_clean_time" DELAY_SET = "delay_set" + DEVICE_RESTART = "device_restart" DEW_POINT_TEMP = "dew_point_temp" DISINFECTION = "disinfection" DO_NOT_DISTURB = "do_not_disturb" @@ -751,6 +752,10 @@ class DPCode(StrEnum): HUMIDITY_VALUE = "humidity_value" # Humidity INSTALLATION_HEIGHT = "installation_height" INVERTER_OUTPUT_POWER = "inverter_output_power" + IPC_AUTO_SIREN = "ipc_auto_siren" + IPC_BRIGHT = "ipc_bright" + IPC_CONTRAST = "ipc_contrast" + IPC_SHARP = "ipc_sharp" IPC_WORK_MODE = "ipc_work_mode" LED_TYPE_1 = "led_type_1" LED_TYPE_2 = "led_type_2" @@ -776,6 +781,7 @@ class DPCode(StrEnum): MINI_SET = "mini_set" MODE = "mode" # Working mode / Mode MOODLIGHTING = "moodlighting" # Mood light + MOTION_AREA_SWITCH = "motion_area_switch" # Activity area MOTION_RECORD = "motion_record" MOTION_SENSITIVITY = "motion_sensitivity" MOTION_SWITCH = "motion_switch" # Motion switch diff --git a/homeassistant/components/tuya/number.py b/homeassistant/components/tuya/number.py index 2c058d2d0ba780..f2b9546d83725e 100644 --- a/homeassistant/components/tuya/number.py +++ b/homeassistant/components/tuya/number.py @@ -299,6 +299,21 @@ translation_key="volume", entity_category=EntityCategory.CONFIG, ), + NumberEntityDescription( + key=DPCode.IPC_BRIGHT, + translation_key="brightness", + entity_category=EntityCategory.CONFIG, + ), + NumberEntityDescription( + key=DPCode.IPC_CONTRAST, + translation_key="contrast", + entity_category=EntityCategory.CONFIG, + ), + NumberEntityDescription( + key=DPCode.IPC_SHARP, + translation_key="sharpness", + entity_category=EntityCategory.CONFIG, + ), ), DeviceCategory.SZJQR: ( NumberEntityDescription( diff --git a/homeassistant/components/tuya/strings.json b/homeassistant/components/tuya/strings.json index b843f06dd0772b..c61b92531ea930 100644 --- a/homeassistant/components/tuya/strings.json +++ b/homeassistant/components/tuya/strings.json @@ -77,6 +77,9 @@ } }, "button": { + "device_restart": { + "name": "Device restart" + }, "factory_reset": { "name": "Factory reset" }, @@ -169,9 +172,15 @@ "battery_backup_reserve": { "name": "Battery backup reserve" }, + "brightness": { + "name": "Brightness" + }, "cloud_recipe": { "name": "Cloud recipe" }, + "contrast": { + "name": "Contrast" + }, "cook_temperature": { "name": "Cooking temperature" }, @@ -238,6 +247,9 @@ "sensitivity": { "name": "Sensitivity" }, + "sharpness": { + "name": "Sharpness" + }, "siren_duration": { "name": "Siren duration" }, @@ -918,6 +930,9 @@ } }, "switch": { + "activity_area": { + "name": "Activity area" + }, "anion": { "name": "Anion" }, @@ -1068,6 +1083,9 @@ "time_watermark": { "name": "Time watermark" }, + "trigger_siren": { + "name": "Trigger siren" + }, "uv_sterilization": { "name": "UV sterilization" }, diff --git a/homeassistant/components/tuya/switch.py b/homeassistant/components/tuya/switch.py index a23431fc2cc740..4e910450c1ef6e 100644 --- a/homeassistant/components/tuya/switch.py +++ b/homeassistant/components/tuya/switch.py @@ -717,6 +717,16 @@ translation_key="motion_alarm", entity_category=EntityCategory.CONFIG, ), + SwitchEntityDescription( + key=DPCode.MOTION_AREA_SWITCH, + translation_key="activity_area", + entity_category=EntityCategory.CONFIG, + ), + SwitchEntityDescription( + key=DPCode.IPC_AUTO_SIREN, + translation_key="trigger_siren", + entity_category=EntityCategory.CONFIG, + ), ), DeviceCategory.SZ: ( SwitchEntityDescription( diff --git a/tests/components/tuya/snapshots/test_number.ambr b/tests/components/tuya/snapshots/test_number.ambr index 1bb0caf4aaf741..6e329270e7ea18 100644 --- a/tests/components/tuya/snapshots/test_number.ambr +++ b/tests/components/tuya/snapshots/test_number.ambr @@ -2301,6 +2301,186 @@ 'state': '0.1', }) # --- +# name: test_platform_setup_and_discovery[number.security_camera-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 100.0, + 'min': 0.0, + 'mode': , + 'step': 1.0, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.security_camera', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': None, + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'brightness', + 'unique_id': 'tuya.xihygtyd0d1faknkpsipc_bright', + 'unit_of_measurement': '%', + }) +# --- +# name: test_platform_setup_and_discovery[number.security_camera-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Security Camera', + 'max': 100.0, + 'min': 0.0, + 'mode': , + 'step': 1.0, + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'number.security_camera', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '50.0', + }) +# --- +# name: test_platform_setup_and_discovery[number.security_camera_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 100.0, + 'min': 0.0, + 'mode': , + 'step': 1.0, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.security_camera_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': None, + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'contrast', + 'unique_id': 'tuya.xihygtyd0d1faknkpsipc_contrast', + 'unit_of_measurement': '%', + }) +# --- +# name: test_platform_setup_and_discovery[number.security_camera_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Security Camera', + 'max': 100.0, + 'min': 0.0, + 'mode': , + 'step': 1.0, + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'number.security_camera_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '50.0', + }) +# --- +# name: test_platform_setup_and_discovery[number.security_camera_3-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + 'max': 100.0, + 'min': 0.0, + 'mode': , + 'step': 1.0, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': , + 'entity_id': 'number.security_camera_3', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': None, + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'sharpness', + 'unique_id': 'tuya.xihygtyd0d1faknkpsipc_sharp', + 'unit_of_measurement': '%', + }) +# --- +# name: test_platform_setup_and_discovery[number.security_camera_3-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Security Camera', + 'max': 100.0, + 'min': 0.0, + 'mode': , + 'step': 1.0, + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'number.security_camera_3', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '50.0', + }) +# --- # name: test_platform_setup_and_discovery[number.siren_time-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ From b20ee286a94edea889b6da2340390693cad4ce06 Mon Sep 17 00:00:00 2001 From: mik-laj <12058428+mik-laj@users.noreply.github.com> Date: Thu, 7 May 2026 02:06:43 +0000 Subject: [PATCH 2/7] fixup! Add more entities for Tuya camera --- .../tuya/snapshots/test_button.ambr | 150 +++++++++++++ .../tuya/snapshots/test_number.ambr | 42 ++-- .../tuya/snapshots/test_switch.ambr | 200 ++++++++++++++++++ 3 files changed, 371 insertions(+), 21 deletions(-) diff --git a/tests/components/tuya/snapshots/test_button.ambr b/tests/components/tuya/snapshots/test_button.ambr index bf236873afc343..7dda9ff589aaa5 100644 --- a/tests/components/tuya/snapshots/test_button.ambr +++ b/tests/components/tuya/snapshots/test_button.ambr @@ -1,4 +1,104 @@ # serializer version: 1 +# name: test_platform_setup_and_discovery[button.c9_device_restart-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'button', + 'entity_category': , + 'entity_id': 'button.c9_device_restart', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Device restart', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Device restart', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'device_restart', + 'unique_id': 'tuya.fjdyw5ld2f5f5ddspsdevice_restart', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[button.c9_device_restart-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'C9 Device restart', + }), + 'context': , + 'entity_id': 'button.c9_device_restart', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_platform_setup_and_discovery[button.intercom_device_restart-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'button', + 'entity_category': , + 'entity_id': 'button.intercom_device_restart', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Device restart', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Device restart', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'device_restart', + 'unique_id': 'tuya.qt0o5jlatiqf2rscpsdevice_restart', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[button.intercom_device_restart-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Intercom Device restart', + }), + 'context': , + 'entity_id': 'button.intercom_device_restart', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_platform_setup_and_discovery[button.kattenbak_factory_reset-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ @@ -199,6 +299,56 @@ 'state': 'unknown', }) # --- +# name: test_platform_setup_and_discovery[button.security_camera_device_restart-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'button', + 'entity_category': , + 'entity_id': 'button.security_camera_device_restart', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Device restart', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Device restart', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'device_restart', + 'unique_id': 'tuya.xihygtyd0d1faknkpsdevice_restart', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[button.security_camera_device_restart-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Security Camera Device restart', + }), + 'context': , + 'entity_id': 'button.security_camera_device_restart', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_platform_setup_and_discovery[button.v20_reset_duster_cloth-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ diff --git a/tests/components/tuya/snapshots/test_number.ambr b/tests/components/tuya/snapshots/test_number.ambr index 6e329270e7ea18..054d4e42e040aa 100644 --- a/tests/components/tuya/snapshots/test_number.ambr +++ b/tests/components/tuya/snapshots/test_number.ambr @@ -2301,7 +2301,7 @@ 'state': '0.1', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera-entry] +# name: test_platform_setup_and_discovery[number.security_camera_brightness-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -2320,7 +2320,7 @@ 'disabled_by': None, 'domain': 'number', 'entity_category': , - 'entity_id': 'number.security_camera', + 'entity_id': 'number.security_camera_brightness', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -2328,12 +2328,12 @@ 'labels': set({ }), 'name': None, - 'object_id_base': None, + 'object_id_base': 'Brightness', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': None, + 'original_name': 'Brightness', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, @@ -2343,10 +2343,10 @@ 'unit_of_measurement': '%', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera-state] +# name: test_platform_setup_and_discovery[number.security_camera_brightness-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera', + 'friendly_name': 'Security Camera Brightness', 'max': 100.0, 'min': 0.0, 'mode': , @@ -2354,14 +2354,14 @@ 'unit_of_measurement': '%', }), 'context': , - 'entity_id': 'number.security_camera', + 'entity_id': 'number.security_camera_brightness', 'last_changed': , 'last_reported': , 'last_updated': , 'state': '50.0', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_2-entry] +# name: test_platform_setup_and_discovery[number.security_camera_contrast-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -2380,7 +2380,7 @@ 'disabled_by': None, 'domain': 'number', 'entity_category': , - 'entity_id': 'number.security_camera_2', + 'entity_id': 'number.security_camera_contrast', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -2388,12 +2388,12 @@ 'labels': set({ }), 'name': None, - 'object_id_base': None, + 'object_id_base': 'Contrast', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': None, + 'original_name': 'Contrast', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, @@ -2403,10 +2403,10 @@ 'unit_of_measurement': '%', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_2-state] +# name: test_platform_setup_and_discovery[number.security_camera_contrast-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera', + 'friendly_name': 'Security Camera Contrast', 'max': 100.0, 'min': 0.0, 'mode': , @@ -2414,14 +2414,14 @@ 'unit_of_measurement': '%', }), 'context': , - 'entity_id': 'number.security_camera_2', + 'entity_id': 'number.security_camera_contrast', 'last_changed': , 'last_reported': , 'last_updated': , 'state': '50.0', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_3-entry] +# name: test_platform_setup_and_discovery[number.security_camera_sharpness-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -2440,7 +2440,7 @@ 'disabled_by': None, 'domain': 'number', 'entity_category': , - 'entity_id': 'number.security_camera_3', + 'entity_id': 'number.security_camera_sharpness', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -2448,12 +2448,12 @@ 'labels': set({ }), 'name': None, - 'object_id_base': None, + 'object_id_base': 'Sharpness', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': None, + 'original_name': 'Sharpness', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, @@ -2463,10 +2463,10 @@ 'unit_of_measurement': '%', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_3-state] +# name: test_platform_setup_and_discovery[number.security_camera_sharpness-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera', + 'friendly_name': 'Security Camera Sharpness', 'max': 100.0, 'min': 0.0, 'mode': , @@ -2474,7 +2474,7 @@ 'unit_of_measurement': '%', }), 'context': , - 'entity_id': 'number.security_camera_3', + 'entity_id': 'number.security_camera_sharpness', 'last_changed': , 'last_reported': , 'last_updated': , diff --git a/tests/components/tuya/snapshots/test_switch.ambr b/tests/components/tuya/snapshots/test_switch.ambr index 7d88812ae705f7..a9329605a4cf57 100644 --- a/tests/components/tuya/snapshots/test_switch.ambr +++ b/tests/components/tuya/snapshots/test_switch.ambr @@ -2070,6 +2070,56 @@ 'state': 'on', }) # --- +# name: test_platform_setup_and_discovery[switch.c9_trigger_siren-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'switch', + 'entity_category': , + 'entity_id': 'switch.c9_trigger_siren', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Trigger siren', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Trigger siren', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'trigger_siren', + 'unique_id': 'tuya.fjdyw5ld2f5f5ddspsipc_auto_siren', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[switch.c9_trigger_siren-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'C9 Trigger siren', + }), + 'context': , + 'entity_id': 'switch.c9_trigger_siren', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'off', + }) +# --- # name: test_platform_setup_and_discovery[switch.c9_video_recording-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ @@ -4489,6 +4539,56 @@ 'state': 'off', }) # --- +# name: test_platform_setup_and_discovery[switch.garage_camera_activity_area-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'switch', + 'entity_category': , + 'entity_id': 'switch.garage_camera_activity_area', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Activity area', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Activity area', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'activity_area', + 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_area_switch', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[switch.garage_camera_activity_area-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Garage Camera Activity area', + }), + 'context': , + 'entity_id': 'switch.garage_camera_activity_area', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- # name: test_platform_setup_and_discovery[switch.garage_camera_flip-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ @@ -9125,6 +9225,56 @@ 'state': 'on', }) # --- +# name: test_platform_setup_and_discovery[switch.security_camera_activity_area-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'switch', + 'entity_category': , + 'entity_id': 'switch.security_camera_activity_area', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Activity area', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Activity area', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'activity_area', + 'unique_id': 'tuya.xihygtyd0d1faknkpsmotion_area_switch', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[switch.security_camera_activity_area-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Security Camera Activity area', + }), + 'context': , + 'entity_id': 'switch.security_camera_activity_area', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'off', + }) +# --- # name: test_platform_setup_and_discovery[switch.security_camera_flip-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ @@ -9425,6 +9575,56 @@ 'state': 'on', }) # --- +# name: test_platform_setup_and_discovery[switch.security_camera_trigger_siren-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'switch', + 'entity_category': , + 'entity_id': 'switch.security_camera_trigger_siren', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Trigger siren', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Trigger siren', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'trigger_siren', + 'unique_id': 'tuya.xihygtyd0d1faknkpsipc_auto_siren', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[switch.security_camera_trigger_siren-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Security Camera Trigger siren', + }), + 'context': , + 'entity_id': 'switch.security_camera_trigger_siren', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'off', + }) +# --- # name: test_platform_setup_and_discovery[switch.security_camera_video_recording-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ From 182336809a5cd4ac35723059cf8491e852976157 Mon Sep 17 00:00:00 2001 From: mik-laj <12058428+mik-laj@users.noreply.github.com> Date: Thu, 7 May 2026 11:35:16 +0000 Subject: [PATCH 3/7] fixup! fixup! Add more entities for Tuya camera --- homeassistant/components/tuya/button.py | 8 +- homeassistant/components/tuya/strings.json | 15 +- homeassistant/components/tuya/switch.py | 4 +- .../tuya/snapshots/test_button.ambr | 57 ++-- .../tuya/snapshots/test_switch.ambr | 270 +++++++++--------- 5 files changed, 179 insertions(+), 175 deletions(-) diff --git a/homeassistant/components/tuya/button.py b/homeassistant/components/tuya/button.py index 1d842c05340fcb..021d4a76510dde 100644 --- a/homeassistant/components/tuya/button.py +++ b/homeassistant/components/tuya/button.py @@ -6,7 +6,11 @@ ) from tuya_sharing import CustomerDevice, Manager -from homeassistant.components.button import ButtonEntity, ButtonEntityDescription +from homeassistant.components.button import ( + ButtonDeviceClass, + ButtonEntity, + ButtonEntityDescription, +) from homeassistant.const import EntityCategory from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -66,7 +70,7 @@ DeviceCategory.SP: ( ButtonEntityDescription( key=DPCode.DEVICE_RESTART, - translation_key="device_restart", + device_class=ButtonDeviceClass.RESTART, entity_category=EntityCategory.CONFIG, ), ), diff --git a/homeassistant/components/tuya/strings.json b/homeassistant/components/tuya/strings.json index c61b92531ea930..fdf2360203e679 100644 --- a/homeassistant/components/tuya/strings.json +++ b/homeassistant/components/tuya/strings.json @@ -77,9 +77,6 @@ } }, "button": { - "device_restart": { - "name": "Device restart" - }, "factory_reset": { "name": "Factory reset" }, @@ -930,9 +927,6 @@ } }, "switch": { - "activity_area": { - "name": "Activity area" - }, "anion": { "name": "Anion" }, @@ -942,6 +936,9 @@ "auto_clean": { "name": "Auto clean" }, + "auto_siren": { + "name": "Auto trigger siren" + }, "battery_lock": { "name": "Battery lock" }, @@ -996,6 +993,9 @@ "motion_alarm": { "name": "Motion alarm" }, + "motion_detection_zone": { + "name": "Motion detection zone" + }, "motion_recording": { "name": "Motion recording" }, @@ -1083,9 +1083,6 @@ "time_watermark": { "name": "Time watermark" }, - "trigger_siren": { - "name": "Trigger siren" - }, "uv_sterilization": { "name": "UV sterilization" }, diff --git a/homeassistant/components/tuya/switch.py b/homeassistant/components/tuya/switch.py index 4e910450c1ef6e..752a392a0941b4 100644 --- a/homeassistant/components/tuya/switch.py +++ b/homeassistant/components/tuya/switch.py @@ -719,12 +719,12 @@ ), SwitchEntityDescription( key=DPCode.MOTION_AREA_SWITCH, - translation_key="activity_area", + translation_key="motion_detection_zone", entity_category=EntityCategory.CONFIG, ), SwitchEntityDescription( key=DPCode.IPC_AUTO_SIREN, - translation_key="trigger_siren", + translation_key="auto_siren", entity_category=EntityCategory.CONFIG, ), ), diff --git a/tests/components/tuya/snapshots/test_button.ambr b/tests/components/tuya/snapshots/test_button.ambr index 7dda9ff589aaa5..ff50b32ab82fcf 100644 --- a/tests/components/tuya/snapshots/test_button.ambr +++ b/tests/components/tuya/snapshots/test_button.ambr @@ -1,5 +1,5 @@ # serializer version: 1 -# name: test_platform_setup_and_discovery[button.c9_device_restart-entry] +# name: test_platform_setup_and_discovery[button.c9_restart-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -13,7 +13,7 @@ 'disabled_by': None, 'domain': 'button', 'entity_category': , - 'entity_id': 'button.c9_device_restart', + 'entity_id': 'button.c9_restart', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -21,35 +21,36 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Device restart', + 'object_id_base': 'Restart', 'options': dict({ }), - 'original_device_class': None, + 'original_device_class': , 'original_icon': None, - 'original_name': 'Device restart', + 'original_name': 'Restart', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'device_restart', + 'translation_key': None, 'unique_id': 'tuya.fjdyw5ld2f5f5ddspsdevice_restart', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[button.c9_device_restart-state] +# name: test_platform_setup_and_discovery[button.c9_restart-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'C9 Device restart', + 'device_class': 'restart', + 'friendly_name': 'C9 Restart', }), 'context': , - 'entity_id': 'button.c9_device_restart', + 'entity_id': 'button.c9_restart', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'unknown', }) # --- -# name: test_platform_setup_and_discovery[button.intercom_device_restart-entry] +# name: test_platform_setup_and_discovery[button.intercom_restart-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -63,7 +64,7 @@ 'disabled_by': None, 'domain': 'button', 'entity_category': , - 'entity_id': 'button.intercom_device_restart', + 'entity_id': 'button.intercom_restart', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -71,28 +72,29 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Device restart', + 'object_id_base': 'Restart', 'options': dict({ }), - 'original_device_class': None, + 'original_device_class': , 'original_icon': None, - 'original_name': 'Device restart', + 'original_name': 'Restart', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'device_restart', + 'translation_key': None, 'unique_id': 'tuya.qt0o5jlatiqf2rscpsdevice_restart', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[button.intercom_device_restart-state] +# name: test_platform_setup_and_discovery[button.intercom_restart-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Intercom Device restart', + 'device_class': 'restart', + 'friendly_name': 'Intercom Restart', }), 'context': , - 'entity_id': 'button.intercom_device_restart', + 'entity_id': 'button.intercom_restart', 'last_changed': , 'last_reported': , 'last_updated': , @@ -299,7 +301,7 @@ 'state': 'unknown', }) # --- -# name: test_platform_setup_and_discovery[button.security_camera_device_restart-entry] +# name: test_platform_setup_and_discovery[button.security_camera_restart-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -313,7 +315,7 @@ 'disabled_by': None, 'domain': 'button', 'entity_category': , - 'entity_id': 'button.security_camera_device_restart', + 'entity_id': 'button.security_camera_restart', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -321,28 +323,29 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Device restart', + 'object_id_base': 'Restart', 'options': dict({ }), - 'original_device_class': None, + 'original_device_class': , 'original_icon': None, - 'original_name': 'Device restart', + 'original_name': 'Restart', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'device_restart', + 'translation_key': None, 'unique_id': 'tuya.xihygtyd0d1faknkpsdevice_restart', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[button.security_camera_device_restart-state] +# name: test_platform_setup_and_discovery[button.security_camera_restart-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Device restart', + 'device_class': 'restart', + 'friendly_name': 'Security Camera Restart', }), 'context': , - 'entity_id': 'button.security_camera_device_restart', + 'entity_id': 'button.security_camera_restart', 'last_changed': , 'last_reported': , 'last_updated': , diff --git a/tests/components/tuya/snapshots/test_switch.ambr b/tests/components/tuya/snapshots/test_switch.ambr index a9329605a4cf57..2dc8131e1c82eb 100644 --- a/tests/components/tuya/snapshots/test_switch.ambr +++ b/tests/components/tuya/snapshots/test_switch.ambr @@ -1820,6 +1820,56 @@ 'state': 'on', }) # --- +# name: test_platform_setup_and_discovery[switch.c9_auto_trigger_siren-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'switch', + 'entity_category': , + 'entity_id': 'switch.c9_auto_trigger_siren', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Auto trigger siren', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Auto trigger siren', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'auto_siren', + 'unique_id': 'tuya.fjdyw5ld2f5f5ddspsipc_auto_siren', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[switch.c9_auto_trigger_siren-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'C9 Auto trigger siren', + }), + 'context': , + 'entity_id': 'switch.c9_auto_trigger_siren', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'off', + }) +# --- # name: test_platform_setup_and_discovery[switch.c9_flip-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ @@ -2070,56 +2120,6 @@ 'state': 'on', }) # --- -# name: test_platform_setup_and_discovery[switch.c9_trigger_siren-entry] - EntityRegistryEntrySnapshot({ - 'aliases': list([ - None, - ]), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'config_subentry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'switch', - 'entity_category': , - 'entity_id': 'switch.c9_trigger_siren', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'object_id_base': 'Trigger siren', - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': None, - 'original_name': 'Trigger siren', - 'platform': 'tuya', - 'previous_unique_id': None, - 'suggested_object_id': None, - 'supported_features': 0, - 'translation_key': 'trigger_siren', - 'unique_id': 'tuya.fjdyw5ld2f5f5ddspsipc_auto_siren', - 'unit_of_measurement': None, - }) -# --- -# name: test_platform_setup_and_discovery[switch.c9_trigger_siren-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'C9 Trigger siren', - }), - 'context': , - 'entity_id': 'switch.c9_trigger_siren', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': 'off', - }) -# --- # name: test_platform_setup_and_discovery[switch.c9_video_recording-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ @@ -4539,7 +4539,7 @@ 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_activity_area-entry] +# name: test_platform_setup_and_discovery[switch.garage_camera_flip-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -4553,7 +4553,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.garage_camera_activity_area', + 'entity_id': 'switch.garage_camera_flip', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -4561,35 +4561,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Activity area', + 'object_id_base': 'Flip', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Activity area', + 'original_name': 'Flip', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'activity_area', - 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_area_switch', + 'translation_key': 'flip', + 'unique_id': 'tuya.53fnjncm3jywuaznpsbasic_flip', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_activity_area-state] +# name: test_platform_setup_and_discovery[switch.garage_camera_flip-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Garage Camera Activity area', + 'friendly_name': 'Garage Camera Flip', }), 'context': , - 'entity_id': 'switch.garage_camera_activity_area', + 'entity_id': 'switch.garage_camera_flip', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'on', }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_flip-entry] +# name: test_platform_setup_and_discovery[switch.garage_camera_motion_alarm-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -4603,7 +4603,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.garage_camera_flip', + 'entity_id': 'switch.garage_camera_motion_alarm', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -4611,35 +4611,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Flip', + 'object_id_base': 'Motion alarm', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Flip', + 'original_name': 'Motion alarm', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'flip', - 'unique_id': 'tuya.53fnjncm3jywuaznpsbasic_flip', + 'translation_key': 'motion_alarm', + 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_switch', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_flip-state] +# name: test_platform_setup_and_discovery[switch.garage_camera_motion_alarm-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Garage Camera Flip', + 'friendly_name': 'Garage Camera Motion alarm', }), 'context': , - 'entity_id': 'switch.garage_camera_flip', + 'entity_id': 'switch.garage_camera_motion_alarm', 'last_changed': , 'last_reported': , 'last_updated': , - 'state': 'on', + 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_motion_alarm-entry] +# name: test_platform_setup_and_discovery[switch.garage_camera_motion_detection_zone-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -4653,7 +4653,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.garage_camera_motion_alarm', + 'entity_id': 'switch.garage_camera_motion_detection_zone', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -4661,32 +4661,32 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Motion alarm', + 'object_id_base': 'Motion detection zone', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Motion alarm', + 'original_name': 'Motion detection zone', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'motion_alarm', - 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_switch', + 'translation_key': 'motion_detection_zone', + 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_area_switch', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_motion_alarm-state] +# name: test_platform_setup_and_discovery[switch.garage_camera_motion_detection_zone-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Garage Camera Motion alarm', + 'friendly_name': 'Garage Camera Motion detection zone', }), 'context': , - 'entity_id': 'switch.garage_camera_motion_alarm', + 'entity_id': 'switch.garage_camera_motion_detection_zone', 'last_changed': , 'last_reported': , 'last_updated': , - 'state': 'off', + 'state': 'on', }) # --- # name: test_platform_setup_and_discovery[switch.garage_camera_motion_recording-entry] @@ -9225,7 +9225,7 @@ 'state': 'on', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_activity_area-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_auto_trigger_siren-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9239,7 +9239,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_activity_area', + 'entity_id': 'switch.security_camera_auto_trigger_siren', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9247,28 +9247,28 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Activity area', + 'object_id_base': 'Auto trigger siren', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Activity area', + 'original_name': 'Auto trigger siren', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'activity_area', - 'unique_id': 'tuya.xihygtyd0d1faknkpsmotion_area_switch', + 'translation_key': 'auto_siren', + 'unique_id': 'tuya.xihygtyd0d1faknkpsipc_auto_siren', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_activity_area-state] +# name: test_platform_setup_and_discovery[switch.security_camera_auto_trigger_siren-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Activity area', + 'friendly_name': 'Security Camera Auto trigger siren', }), 'context': , - 'entity_id': 'switch.security_camera_activity_area', + 'entity_id': 'switch.security_camera_auto_trigger_siren', 'last_changed': , 'last_reported': , 'last_updated': , @@ -9375,7 +9375,7 @@ 'state': 'on', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_motion_recording-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_motion_detection_zone-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9389,7 +9389,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_motion_recording', + 'entity_id': 'switch.security_camera_motion_detection_zone', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9397,35 +9397,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Motion recording', + 'object_id_base': 'Motion detection zone', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Motion recording', + 'original_name': 'Motion detection zone', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'motion_recording', - 'unique_id': 'tuya.xihygtyd0d1faknkpsmotion_record', + 'translation_key': 'motion_detection_zone', + 'unique_id': 'tuya.xihygtyd0d1faknkpsmotion_area_switch', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_motion_recording-state] +# name: test_platform_setup_and_discovery[switch.security_camera_motion_detection_zone-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Motion recording', + 'friendly_name': 'Security Camera Motion detection zone', }), 'context': , - 'entity_id': 'switch.security_camera_motion_recording', + 'entity_id': 'switch.security_camera_motion_detection_zone', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_privacy_mode-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_motion_recording-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9439,7 +9439,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_privacy_mode', + 'entity_id': 'switch.security_camera_motion_recording', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9447,35 +9447,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Privacy mode', + 'object_id_base': 'Motion recording', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Privacy mode', + 'original_name': 'Motion recording', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'privacy_mode', - 'unique_id': 'tuya.xihygtyd0d1faknkpsbasic_private', + 'translation_key': 'motion_recording', + 'unique_id': 'tuya.xihygtyd0d1faknkpsmotion_record', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_privacy_mode-state] +# name: test_platform_setup_and_discovery[switch.security_camera_motion_recording-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Privacy mode', + 'friendly_name': 'Security Camera Motion recording', }), 'context': , - 'entity_id': 'switch.security_camera_privacy_mode', + 'entity_id': 'switch.security_camera_motion_recording', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_sound_detection-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_privacy_mode-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9489,7 +9489,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_sound_detection', + 'entity_id': 'switch.security_camera_privacy_mode', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9497,35 +9497,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Sound detection', + 'object_id_base': 'Privacy mode', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Sound detection', + 'original_name': 'Privacy mode', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'sound_detection', - 'unique_id': 'tuya.xihygtyd0d1faknkpsdecibel_switch', + 'translation_key': 'privacy_mode', + 'unique_id': 'tuya.xihygtyd0d1faknkpsbasic_private', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_sound_detection-state] +# name: test_platform_setup_and_discovery[switch.security_camera_privacy_mode-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Sound detection', + 'friendly_name': 'Security Camera Privacy mode', }), 'context': , - 'entity_id': 'switch.security_camera_sound_detection', + 'entity_id': 'switch.security_camera_privacy_mode', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_time_watermark-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_sound_detection-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9539,7 +9539,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_time_watermark', + 'entity_id': 'switch.security_camera_sound_detection', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9547,35 +9547,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Time watermark', + 'object_id_base': 'Sound detection', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Time watermark', + 'original_name': 'Sound detection', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'time_watermark', - 'unique_id': 'tuya.xihygtyd0d1faknkpsbasic_osd', + 'translation_key': 'sound_detection', + 'unique_id': 'tuya.xihygtyd0d1faknkpsdecibel_switch', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_time_watermark-state] +# name: test_platform_setup_and_discovery[switch.security_camera_sound_detection-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Time watermark', + 'friendly_name': 'Security Camera Sound detection', }), 'context': , - 'entity_id': 'switch.security_camera_time_watermark', + 'entity_id': 'switch.security_camera_sound_detection', 'last_changed': , 'last_reported': , 'last_updated': , - 'state': 'on', + 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_trigger_siren-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_time_watermark-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9589,7 +9589,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_trigger_siren', + 'entity_id': 'switch.security_camera_time_watermark', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9597,32 +9597,32 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Trigger siren', + 'object_id_base': 'Time watermark', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Trigger siren', + 'original_name': 'Time watermark', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'trigger_siren', - 'unique_id': 'tuya.xihygtyd0d1faknkpsipc_auto_siren', + 'translation_key': 'time_watermark', + 'unique_id': 'tuya.xihygtyd0d1faknkpsbasic_osd', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_trigger_siren-state] +# name: test_platform_setup_and_discovery[switch.security_camera_time_watermark-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Trigger siren', + 'friendly_name': 'Security Camera Time watermark', }), 'context': , - 'entity_id': 'switch.security_camera_trigger_siren', + 'entity_id': 'switch.security_camera_time_watermark', 'last_changed': , 'last_reported': , 'last_updated': , - 'state': 'off', + 'state': 'on', }) # --- # name: test_platform_setup_and_discovery[switch.security_camera_video_recording-entry] From 73f08078bfda1f264a1b32df06b2b773f927eb39 Mon Sep 17 00:00:00 2001 From: mik-laj <12058428+mik-laj@users.noreply.github.com> Date: Thu, 7 May 2026 12:42:49 +0000 Subject: [PATCH 4/7] fixup! fixup! fixup! Add more entities for Tuya camera --- homeassistant/components/tuya/strings.json | 2 +- .../tuya/snapshots/test_switch.ambr | 188 +++++++++--------- 2 files changed, 95 insertions(+), 95 deletions(-) diff --git a/homeassistant/components/tuya/strings.json b/homeassistant/components/tuya/strings.json index fdf2360203e679..6b231aea7d0501 100644 --- a/homeassistant/components/tuya/strings.json +++ b/homeassistant/components/tuya/strings.json @@ -994,7 +994,7 @@ "name": "Motion alarm" }, "motion_detection_zone": { - "name": "Motion detection zone" + "name": "Use motion detection zone" }, "motion_recording": { "name": "Motion recording" diff --git a/tests/components/tuya/snapshots/test_switch.ambr b/tests/components/tuya/snapshots/test_switch.ambr index 2dc8131e1c82eb..245dae4dda7534 100644 --- a/tests/components/tuya/snapshots/test_switch.ambr +++ b/tests/components/tuya/snapshots/test_switch.ambr @@ -4639,7 +4639,7 @@ 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_motion_detection_zone-entry] +# name: test_platform_setup_and_discovery[switch.garage_camera_motion_recording-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -4653,7 +4653,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.garage_camera_motion_detection_zone', + 'entity_id': 'switch.garage_camera_motion_recording', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -4661,35 +4661,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Motion detection zone', + 'object_id_base': 'Motion recording', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Motion detection zone', + 'original_name': 'Motion recording', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'motion_detection_zone', - 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_area_switch', + 'translation_key': 'motion_recording', + 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_record', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_motion_detection_zone-state] +# name: test_platform_setup_and_discovery[switch.garage_camera_motion_recording-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Garage Camera Motion detection zone', + 'friendly_name': 'Garage Camera Motion recording', }), 'context': , - 'entity_id': 'switch.garage_camera_motion_detection_zone', + 'entity_id': 'switch.garage_camera_motion_recording', 'last_changed': , 'last_reported': , 'last_updated': , - 'state': 'on', + 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_motion_recording-entry] +# name: test_platform_setup_and_discovery[switch.garage_camera_motion_tracking-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -4703,7 +4703,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.garage_camera_motion_recording', + 'entity_id': 'switch.garage_camera_motion_tracking', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -4711,35 +4711,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Motion recording', + 'object_id_base': 'Motion tracking', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Motion recording', + 'original_name': 'Motion tracking', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'motion_recording', - 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_record', + 'translation_key': 'motion_tracking', + 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_tracking', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_motion_recording-state] +# name: test_platform_setup_and_discovery[switch.garage_camera_motion_tracking-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Garage Camera Motion recording', + 'friendly_name': 'Garage Camera Motion tracking', }), 'context': , - 'entity_id': 'switch.garage_camera_motion_recording', + 'entity_id': 'switch.garage_camera_motion_tracking', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_motion_tracking-entry] +# name: test_platform_setup_and_discovery[switch.garage_camera_privacy_mode-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -4753,7 +4753,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.garage_camera_motion_tracking', + 'entity_id': 'switch.garage_camera_privacy_mode', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -4761,35 +4761,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Motion tracking', + 'object_id_base': 'Privacy mode', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Motion tracking', + 'original_name': 'Privacy mode', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'motion_tracking', - 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_tracking', + 'translation_key': 'privacy_mode', + 'unique_id': 'tuya.53fnjncm3jywuaznpsbasic_private', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_motion_tracking-state] +# name: test_platform_setup_and_discovery[switch.garage_camera_privacy_mode-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Garage Camera Motion tracking', + 'friendly_name': 'Garage Camera Privacy mode', }), 'context': , - 'entity_id': 'switch.garage_camera_motion_tracking', + 'entity_id': 'switch.garage_camera_privacy_mode', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_privacy_mode-entry] +# name: test_platform_setup_and_discovery[switch.garage_camera_time_watermark-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -4803,7 +4803,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.garage_camera_privacy_mode', + 'entity_id': 'switch.garage_camera_time_watermark', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -4811,35 +4811,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Privacy mode', + 'object_id_base': 'Time watermark', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Privacy mode', + 'original_name': 'Time watermark', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'privacy_mode', - 'unique_id': 'tuya.53fnjncm3jywuaznpsbasic_private', + 'translation_key': 'time_watermark', + 'unique_id': 'tuya.53fnjncm3jywuaznpsbasic_osd', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_privacy_mode-state] +# name: test_platform_setup_and_discovery[switch.garage_camera_time_watermark-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Garage Camera Privacy mode', + 'friendly_name': 'Garage Camera Time watermark', }), 'context': , - 'entity_id': 'switch.garage_camera_privacy_mode', + 'entity_id': 'switch.garage_camera_time_watermark', 'last_changed': , 'last_reported': , 'last_updated': , - 'state': 'off', + 'state': 'on', }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_time_watermark-entry] +# name: test_platform_setup_and_discovery[switch.garage_camera_use_motion_detection_zone-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -4853,7 +4853,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.garage_camera_time_watermark', + 'entity_id': 'switch.garage_camera_use_motion_detection_zone', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -4861,28 +4861,28 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Time watermark', + 'object_id_base': 'Use motion detection zone', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Time watermark', + 'original_name': 'Use motion detection zone', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'time_watermark', - 'unique_id': 'tuya.53fnjncm3jywuaznpsbasic_osd', + 'translation_key': 'motion_detection_zone', + 'unique_id': 'tuya.53fnjncm3jywuaznpsmotion_area_switch', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.garage_camera_time_watermark-state] +# name: test_platform_setup_and_discovery[switch.garage_camera_use_motion_detection_zone-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Garage Camera Time watermark', + 'friendly_name': 'Garage Camera Use motion detection zone', }), 'context': , - 'entity_id': 'switch.garage_camera_time_watermark', + 'entity_id': 'switch.garage_camera_use_motion_detection_zone', 'last_changed': , 'last_reported': , 'last_updated': , @@ -9375,7 +9375,7 @@ 'state': 'on', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_motion_detection_zone-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_motion_recording-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9389,7 +9389,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_motion_detection_zone', + 'entity_id': 'switch.security_camera_motion_recording', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9397,35 +9397,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Motion detection zone', + 'object_id_base': 'Motion recording', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Motion detection zone', + 'original_name': 'Motion recording', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'motion_detection_zone', - 'unique_id': 'tuya.xihygtyd0d1faknkpsmotion_area_switch', + 'translation_key': 'motion_recording', + 'unique_id': 'tuya.xihygtyd0d1faknkpsmotion_record', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_motion_detection_zone-state] +# name: test_platform_setup_and_discovery[switch.security_camera_motion_recording-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Motion detection zone', + 'friendly_name': 'Security Camera Motion recording', }), 'context': , - 'entity_id': 'switch.security_camera_motion_detection_zone', + 'entity_id': 'switch.security_camera_motion_recording', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_motion_recording-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_privacy_mode-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9439,7 +9439,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_motion_recording', + 'entity_id': 'switch.security_camera_privacy_mode', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9447,35 +9447,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Motion recording', + 'object_id_base': 'Privacy mode', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Motion recording', + 'original_name': 'Privacy mode', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'motion_recording', - 'unique_id': 'tuya.xihygtyd0d1faknkpsmotion_record', + 'translation_key': 'privacy_mode', + 'unique_id': 'tuya.xihygtyd0d1faknkpsbasic_private', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_motion_recording-state] +# name: test_platform_setup_and_discovery[switch.security_camera_privacy_mode-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Motion recording', + 'friendly_name': 'Security Camera Privacy mode', }), 'context': , - 'entity_id': 'switch.security_camera_motion_recording', + 'entity_id': 'switch.security_camera_privacy_mode', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_privacy_mode-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_sound_detection-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9489,7 +9489,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_privacy_mode', + 'entity_id': 'switch.security_camera_sound_detection', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9497,35 +9497,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Privacy mode', + 'object_id_base': 'Sound detection', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Privacy mode', + 'original_name': 'Sound detection', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'privacy_mode', - 'unique_id': 'tuya.xihygtyd0d1faknkpsbasic_private', + 'translation_key': 'sound_detection', + 'unique_id': 'tuya.xihygtyd0d1faknkpsdecibel_switch', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_privacy_mode-state] +# name: test_platform_setup_and_discovery[switch.security_camera_sound_detection-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Privacy mode', + 'friendly_name': 'Security Camera Sound detection', }), 'context': , - 'entity_id': 'switch.security_camera_privacy_mode', + 'entity_id': 'switch.security_camera_sound_detection', 'last_changed': , 'last_reported': , 'last_updated': , 'state': 'off', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_sound_detection-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_time_watermark-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9539,7 +9539,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_sound_detection', + 'entity_id': 'switch.security_camera_time_watermark', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9547,35 +9547,35 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Sound detection', + 'object_id_base': 'Time watermark', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Sound detection', + 'original_name': 'Time watermark', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'sound_detection', - 'unique_id': 'tuya.xihygtyd0d1faknkpsdecibel_switch', + 'translation_key': 'time_watermark', + 'unique_id': 'tuya.xihygtyd0d1faknkpsbasic_osd', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_sound_detection-state] +# name: test_platform_setup_and_discovery[switch.security_camera_time_watermark-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Sound detection', + 'friendly_name': 'Security Camera Time watermark', }), 'context': , - 'entity_id': 'switch.security_camera_sound_detection', + 'entity_id': 'switch.security_camera_time_watermark', 'last_changed': , 'last_reported': , 'last_updated': , - 'state': 'off', + 'state': 'on', }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_time_watermark-entry] +# name: test_platform_setup_and_discovery[switch.security_camera_use_motion_detection_zone-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -9589,7 +9589,7 @@ 'disabled_by': None, 'domain': 'switch', 'entity_category': , - 'entity_id': 'switch.security_camera_time_watermark', + 'entity_id': 'switch.security_camera_use_motion_detection_zone', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -9597,32 +9597,32 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Time watermark', + 'object_id_base': 'Use motion detection zone', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Time watermark', + 'original_name': 'Use motion detection zone', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'time_watermark', - 'unique_id': 'tuya.xihygtyd0d1faknkpsbasic_osd', + 'translation_key': 'motion_detection_zone', + 'unique_id': 'tuya.xihygtyd0d1faknkpsmotion_area_switch', 'unit_of_measurement': None, }) # --- -# name: test_platform_setup_and_discovery[switch.security_camera_time_watermark-state] +# name: test_platform_setup_and_discovery[switch.security_camera_use_motion_detection_zone-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Time watermark', + 'friendly_name': 'Security Camera Use motion detection zone', }), 'context': , - 'entity_id': 'switch.security_camera_time_watermark', + 'entity_id': 'switch.security_camera_use_motion_detection_zone', 'last_changed': , 'last_reported': , 'last_updated': , - 'state': 'on', + 'state': 'off', }) # --- # name: test_platform_setup_and_discovery[switch.security_camera_video_recording-entry] From 9aa2eb7234cd049b7eb8846f17877360f4f07569 Mon Sep 17 00:00:00 2001 From: mik-laj <12058428+mik-laj@users.noreply.github.com> Date: Thu, 7 May 2026 13:35:03 +0000 Subject: [PATCH 5/7] fixup! fixup! fixup! fixup! Add more entities for Tuya camera --- homeassistant/components/tuya/number.py | 6 +-- homeassistant/components/tuya/strings.json | 18 +++---- .../tuya/snapshots/test_number.ambr | 48 +++++++++---------- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/homeassistant/components/tuya/number.py b/homeassistant/components/tuya/number.py index f2b9546d83725e..c93f91bf68d4d6 100644 --- a/homeassistant/components/tuya/number.py +++ b/homeassistant/components/tuya/number.py @@ -301,17 +301,17 @@ ), NumberEntityDescription( key=DPCode.IPC_BRIGHT, - translation_key="brightness", + translation_key="video_brightness", entity_category=EntityCategory.CONFIG, ), NumberEntityDescription( key=DPCode.IPC_CONTRAST, - translation_key="contrast", + translation_key="video_contrast", entity_category=EntityCategory.CONFIG, ), NumberEntityDescription( key=DPCode.IPC_SHARP, - translation_key="sharpness", + translation_key="video_sharpness", entity_category=EntityCategory.CONFIG, ), ), diff --git a/homeassistant/components/tuya/strings.json b/homeassistant/components/tuya/strings.json index 6b231aea7d0501..b971e3e16cbc55 100644 --- a/homeassistant/components/tuya/strings.json +++ b/homeassistant/components/tuya/strings.json @@ -169,15 +169,9 @@ "battery_backup_reserve": { "name": "Battery backup reserve" }, - "brightness": { - "name": "Brightness" - }, "cloud_recipe": { "name": "Cloud recipe" }, - "contrast": { - "name": "Contrast" - }, "cook_temperature": { "name": "Cooking temperature" }, @@ -244,9 +238,6 @@ "sensitivity": { "name": "Sensitivity" }, - "sharpness": { - "name": "Sharpness" - }, "siren_duration": { "name": "Siren duration" }, @@ -265,6 +256,15 @@ "time": { "name": "Time" }, + "video_brightness": { + "name": "Video brightness" + }, + "video_contrast": { + "name": "Video contrast" + }, + "video_sharpness": { + "name": "Video sharpness" + }, "voice_times": { "name": "Voice times" }, diff --git a/tests/components/tuya/snapshots/test_number.ambr b/tests/components/tuya/snapshots/test_number.ambr index 054d4e42e040aa..d7255ae8bf4efc 100644 --- a/tests/components/tuya/snapshots/test_number.ambr +++ b/tests/components/tuya/snapshots/test_number.ambr @@ -2301,7 +2301,7 @@ 'state': '0.1', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_brightness-entry] +# name: test_platform_setup_and_discovery[number.security_camera_video_brightness-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -2320,7 +2320,7 @@ 'disabled_by': None, 'domain': 'number', 'entity_category': , - 'entity_id': 'number.security_camera_brightness', + 'entity_id': 'number.security_camera_video_brightness', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -2328,25 +2328,25 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Brightness', + 'object_id_base': 'Video brightness', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Brightness', + 'original_name': 'Video brightness', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'brightness', + 'translation_key': 'video_brightness', 'unique_id': 'tuya.xihygtyd0d1faknkpsipc_bright', 'unit_of_measurement': '%', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_brightness-state] +# name: test_platform_setup_and_discovery[number.security_camera_video_brightness-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Brightness', + 'friendly_name': 'Security Camera Video brightness', 'max': 100.0, 'min': 0.0, 'mode': , @@ -2354,14 +2354,14 @@ 'unit_of_measurement': '%', }), 'context': , - 'entity_id': 'number.security_camera_brightness', + 'entity_id': 'number.security_camera_video_brightness', 'last_changed': , 'last_reported': , 'last_updated': , 'state': '50.0', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_contrast-entry] +# name: test_platform_setup_and_discovery[number.security_camera_video_contrast-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -2380,7 +2380,7 @@ 'disabled_by': None, 'domain': 'number', 'entity_category': , - 'entity_id': 'number.security_camera_contrast', + 'entity_id': 'number.security_camera_video_contrast', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -2388,25 +2388,25 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Contrast', + 'object_id_base': 'Video contrast', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Contrast', + 'original_name': 'Video contrast', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'contrast', + 'translation_key': 'video_contrast', 'unique_id': 'tuya.xihygtyd0d1faknkpsipc_contrast', 'unit_of_measurement': '%', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_contrast-state] +# name: test_platform_setup_and_discovery[number.security_camera_video_contrast-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Contrast', + 'friendly_name': 'Security Camera Video contrast', 'max': 100.0, 'min': 0.0, 'mode': , @@ -2414,14 +2414,14 @@ 'unit_of_measurement': '%', }), 'context': , - 'entity_id': 'number.security_camera_contrast', + 'entity_id': 'number.security_camera_video_contrast', 'last_changed': , 'last_reported': , 'last_updated': , 'state': '50.0', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_sharpness-entry] +# name: test_platform_setup_and_discovery[number.security_camera_video_sharpness-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ None, @@ -2440,7 +2440,7 @@ 'disabled_by': None, 'domain': 'number', 'entity_category': , - 'entity_id': 'number.security_camera_sharpness', + 'entity_id': 'number.security_camera_video_sharpness', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -2448,25 +2448,25 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Sharpness', + 'object_id_base': 'Video sharpness', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Sharpness', + 'original_name': 'Video sharpness', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': 'sharpness', + 'translation_key': 'video_sharpness', 'unique_id': 'tuya.xihygtyd0d1faknkpsipc_sharp', 'unit_of_measurement': '%', }) # --- -# name: test_platform_setup_and_discovery[number.security_camera_sharpness-state] +# name: test_platform_setup_and_discovery[number.security_camera_video_sharpness-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Sharpness', + 'friendly_name': 'Security Camera Video sharpness', 'max': 100.0, 'min': 0.0, 'mode': , @@ -2474,7 +2474,7 @@ 'unit_of_measurement': '%', }), 'context': , - 'entity_id': 'number.security_camera_sharpness', + 'entity_id': 'number.security_camera_video_sharpness', 'last_changed': , 'last_reported': , 'last_updated': , From 9f81a37c9c2e9e6b71e930dbddd3199af4bef985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Bregu=C5=82a?= Date: Sat, 9 May 2026 23:33:39 +0200 Subject: [PATCH 6/7] Update homeassistant/components/tuya/strings.json Co-authored-by: Norbert Rittel --- homeassistant/components/tuya/strings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/tuya/strings.json b/homeassistant/components/tuya/strings.json index b971e3e16cbc55..359459d7e6d205 100644 --- a/homeassistant/components/tuya/strings.json +++ b/homeassistant/components/tuya/strings.json @@ -937,7 +937,7 @@ "name": "Auto clean" }, "auto_siren": { - "name": "Auto trigger siren" + "name": "Auto-trigger siren" }, "battery_lock": { "name": "Battery lock" From aa62a6f540999e86d978d615d1722ca074623a74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Bregu=C5=82a?= Date: Sat, 9 May 2026 23:34:34 +0200 Subject: [PATCH 7/7] Fix hyphenation in object IDs and friendly names --- tests/components/tuya/snapshots/test_switch.ambr | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/components/tuya/snapshots/test_switch.ambr b/tests/components/tuya/snapshots/test_switch.ambr index 245dae4dda7534..5d8c2c337d76b0 100644 --- a/tests/components/tuya/snapshots/test_switch.ambr +++ b/tests/components/tuya/snapshots/test_switch.ambr @@ -1842,12 +1842,12 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Auto trigger siren', + 'object_id_base': 'Auto-trigger siren', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Auto trigger siren', + 'original_name': 'Auto-trigger siren', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, @@ -1860,7 +1860,7 @@ # name: test_platform_setup_and_discovery[switch.c9_auto_trigger_siren-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'C9 Auto trigger siren', + 'friendly_name': 'C9 Auto-trigger siren', }), 'context': , 'entity_id': 'switch.c9_auto_trigger_siren', @@ -9247,12 +9247,12 @@ 'labels': set({ }), 'name': None, - 'object_id_base': 'Auto trigger siren', + 'object_id_base': 'Auto-trigger siren', 'options': dict({ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Auto trigger siren', + 'original_name': 'Auto-trigger siren', 'platform': 'tuya', 'previous_unique_id': None, 'suggested_object_id': None, @@ -9265,7 +9265,7 @@ # name: test_platform_setup_and_discovery[switch.security_camera_auto_trigger_siren-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'Security Camera Auto trigger siren', + 'friendly_name': 'Security Camera Auto-trigger siren', }), 'context': , 'entity_id': 'switch.security_camera_auto_trigger_siren',