diff --git a/zhaquirks/tuya/hobeian_button.py b/zhaquirks/tuya/hobeian_button.py new file mode 100644 index 0000000000..f20dbe4043 --- /dev/null +++ b/zhaquirks/tuya/hobeian_button.py @@ -0,0 +1,97 @@ +"""HOBEIAN ZG-101ZL button quirk.""" + +from zigpy.profiles import zha +from zigpy.quirks import CustomDevice +from zigpy.zcl.clusters.general import ( + Basic, + Groups, + Identify, + LevelControl, + OnOff, + Ota, + PowerConfiguration, + Time, +) +from zigpy.zcl.clusters.lightlink import LightLink + +from zhaquirks.const import ( + BUTTON_1, + COMMAND, + DEVICE_TYPE, + DOUBLE_PRESS, + ENDPOINT_ID, + ENDPOINTS, + INPUT_CLUSTERS, + LONG_PRESS, + MODELS_INFO, + OUTPUT_CLUSTERS, + PROFILE_ID, + SHORT_PRESS, +) +from zhaquirks.tuya import TuyaSmartRemoteOnOffCluster, TuyaZBExternalSwitchTypeCluster + + +class HobeianZG101ZL(CustomDevice): + """HOBEIAN ZG-101ZL button quirk for proper button event handling.""" + + signature = { + MODELS_INFO: [ + ("HOBEIAN", "ZG-101ZL"), + ], + ENDPOINTS: { + 1: { + PROFILE_ID: zha.PROFILE_ID, + DEVICE_TYPE: zha.DeviceType.ON_OFF_SWITCH, + INPUT_CLUSTERS: [ + Basic.cluster_id, + PowerConfiguration.cluster_id, + Identify.cluster_id, + Groups.cluster_id, + OnOff.cluster_id, + LightLink.cluster_id, + TuyaZBExternalSwitchTypeCluster.cluster_id, + ], + OUTPUT_CLUSTERS: [ + Identify.cluster_id, + Groups.cluster_id, + OnOff.cluster_id, + LevelControl.cluster_id, + Time.cluster_id, + Ota.cluster_id, + LightLink.cluster_id, + ], + }, + }, + } + + replacement = { + ENDPOINTS: { + 1: { + PROFILE_ID: zha.PROFILE_ID, + DEVICE_TYPE: zha.DeviceType.REMOTE_CONTROL, + INPUT_CLUSTERS: [ + Basic.cluster_id, + PowerConfiguration.cluster_id, + Identify.cluster_id, + Groups.cluster_id, + LightLink.cluster_id, + TuyaZBExternalSwitchTypeCluster, + ], + OUTPUT_CLUSTERS: [ + Identify.cluster_id, + Groups.cluster_id, + TuyaSmartRemoteOnOffCluster, + LevelControl.cluster_id, + Time.cluster_id, + Ota.cluster_id, + LightLink.cluster_id, + ], + }, + }, + } + + device_automation_triggers = { + (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}, + }