From 308e547b5c1b225916e20873011f00bae5801810 Mon Sep 17 00:00:00 2001 From: Jan Figura Date: Tue, 18 Aug 2026 09:43:06 +0200 Subject: [PATCH] Created TuyaSmartRemote004FRotaryDimmer class to properly support _TZ3000_402vrq2i rotary dimmer --- zhaquirks/tuya/ts004f.py | 104 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/zhaquirks/tuya/ts004f.py b/zhaquirks/tuya/ts004f.py index 1e679f1114..516a7a4381 100644 --- a/zhaquirks/tuya/ts004f.py +++ b/zhaquirks/tuya/ts004f.py @@ -31,6 +31,7 @@ COMMAND_OFF, COMMAND_ON, COMMAND_STEP, + COMMAND_STEP_COLOR_TEMP, COMMAND_STOP, COMMAND_STOP_MOVE_STEP, COMMAND_TOGGLE, @@ -440,6 +441,109 @@ class TuyaSmartRemote004FSK_v2(TuyaSmartRemote004FSK): } +class TuyaSmartRemote004FRotaryDimmer(EnchantedDevice): + """Tuya TS004F rotary encoder remote, _TZ3000_402vrq2i variant.""" + + signature = { + MODELS_INFO: [("_TZ3000_402vrq2i", "TS004F")], + ENDPOINTS: { + 1: { + PROFILE_ID: zha.PROFILE_ID, + DEVICE_TYPE: zha.DeviceType.DIMMER_SWITCH, + INPUT_CLUSTERS: [ + Basic.cluster_id, + PowerConfiguration.cluster_id, + Identify.cluster_id, + Groups.cluster_id, + OnOff.cluster_id, + LightLink.cluster_id, + ], + OUTPUT_CLUSTERS: [ + Ota.cluster_id, + Time.cluster_id, + Identify.cluster_id, + Groups.cluster_id, + Scenes.cluster_id, + OnOff.cluster_id, + LevelControl.cluster_id, + LightLink.cluster_id, + ], + }, + }, + } + + replacement = { + ENDPOINTS: { + 1: { + PROFILE_ID: zha.PROFILE_ID, + DEVICE_TYPE: zha.DeviceType.NON_COLOR_CONTROLLER, + INPUT_CLUSTERS: [ + Basic.cluster_id, + TuyaNoBindPowerConfigurationCluster, + Identify.cluster_id, + Groups.cluster_id, + OnOff.cluster_id, + LightLink.cluster_id, + ], + OUTPUT_CLUSTERS: [ + Ota.cluster_id, + Time.cluster_id, + Identify.cluster_id, + Groups.cluster_id, + Scenes.cluster_id, + TuyaSmartRemoteOnOffCluster, + LevelControl.cluster_id, + Color.cluster_id, + LightLink.cluster_id, + ], + }, + }, + } + + device_automation_triggers = { + # --- Dimmer / Remote mode --- + (SHORT_PRESS, BUTTON): {COMMAND: COMMAND_TOGGLE, ENDPOINT_ID: 1, CLUSTER_ID: 6}, + (ROTATED, DIM_UP): { + COMMAND: COMMAND_STEP, + ENDPOINT_ID: 1, + CLUSTER_ID: 8, + PARAMS: {"step_mode": 0}, + }, + (ROTATED, DIM_DOWN): { + COMMAND: COMMAND_STEP, + ENDPOINT_ID: 1, + CLUSTER_ID: 8, + PARAMS: {"step_mode": 1}, + }, + (ROTATED, RIGHT): { + COMMAND: COMMAND_STEP_COLOR_TEMP, + ENDPOINT_ID: 1, + CLUSTER_ID: 768, + PARAMS: {"step_mode": 1}, + }, + (ROTATED, LEFT): { + COMMAND: COMMAND_STEP_COLOR_TEMP, + ENDPOINT_ID: 1, + CLUSTER_ID: 768, + PARAMS: {"step_mode": 3}, + }, + # --- Scene mode --- + (SHORT_PRESS, BUTTON_1): {ENDPOINT_ID: 1, COMMAND: SHORT_PRESS}, + (DOUBLE_PRESS, BUTTON_1): {ENDPOINT_ID: 1, COMMAND: DOUBLE_PRESS}, + (LONG_PRESS, BUTTON_1): {ENDPOINT_ID: 1, COMMAND: LONG_PRESS}, + (SHORT_PRESS, RIGHT): { + COMMAND: RIGHT, + ENDPOINT_ID: 1, + CLUSTER_ID: 6, + }, + (SHORT_PRESS, LEFT): { + COMMAND: LEFT, + ENDPOINT_ID: 1, + CLUSTER_ID: 6, + }, + } + + class TuyaSmartRemote004F(EnchantedDevice): """Tuya 4-button New version remote device."""