diff --git a/tests/test_tuya_motion.py b/tests/test_tuya_motion.py index 7935bbf46d..af607b3fbc 100644 --- a/tests/test_tuya_motion.py +++ b/tests/test_tuya_motion.py @@ -57,6 +57,7 @@ ("_TZE204_sxm7l9xa", "TS0601", ZCL_TUYA_MOTION_V4), ("_TZE204_e5m9c5hl", "TS0601", ZCL_TUYA_MOTION_V4), ("_TZE204_uxllnywp", "TS0601", ZCL_TUYA_MOTION_V5), + ("_TZE200_gjldowol", "TS0601", ZCL_TUYA_MOTION), ], ) async def test_tuya_motion_quirk_occ(zigpy_device_from_v2_quirk, model, manuf, occ_msg): diff --git a/zhaquirks/tuya/ts0601_motion.py b/zhaquirks/tuya/ts0601_motion.py index 5051b50a3f..0ed25d51fe 100644 --- a/zhaquirks/tuya/ts0601_motion.py +++ b/zhaquirks/tuya/ts0601_motion.py @@ -138,6 +138,14 @@ class TuyaMotionFadeTime(t.enum8): _120_seconds = 0x03 +class TuyaSensitivityMode(t.enum8): + """Tuya sensitivity mode enum.""" + + Low = 0x00 + Medium = 0x01 + High = 0x02 + + base_tuya_motion = ( TuyaQuirkBuilder() .adds(TuyaOccupancySensing) @@ -1081,3 +1089,57 @@ class TuyaMotionFadeTime(t.enum8): .skip_configuration() .add_to_registry() ) + + +# Tuya PIR Motion Sensor ZM-35ZH-Q occupancy sensor +( + TuyaQuirkBuilder("_TZE200_gjldowol", "TS0601") + .tuya_dp( + dp_id=1, + ep_attribute=TuyaOccupancySensing.ep_attribute, + attribute_name=OccupancySensing.AttributeDefs.occupancy.name, + converter=lambda x: x == 1, + ) + .adds(TuyaOccupancySensing) + .tuya_battery(dp_id=4) + .tuya_enum( + dp_id=9, + attribute_name="motion_sensitivity", + enum_class=TuyaSensitivityMode, + translation_key="motion_sensitivity", + fallback_name="Motion sensitivity", + ) + .tuya_dp( + dp_id=12, + ep_attribute=TuyaIlluminanceCluster.ep_attribute, + attribute_name=TuyaIlluminanceCluster.AttributeDefs.measured_value.name, + converter=lambda x: 10000 * math.log10(x) + 1 if x != 0 else 0, + ) + .adds(TuyaIlluminanceCluster) + .tuya_number( + dp_id=101, + attribute_name="illuminance_interval", + type=t.uint16_t, + device_class=SensorDeviceClass.DURATION, + unit=UnitOfTime.MINUTES, + min_value=1, + max_value=720, + step=1, + translation_key="illuminance_interval", + fallback_name="Illuminance interval", + ) + .tuya_number( + dp_id=102, + attribute_name="fading_time", + type=t.uint16_t, + device_class=SensorDeviceClass.DURATION, + unit=UnitOfTime.SECONDS, + min_value=5, + max_value=3600, + step=1, + translation_key="fading_time", + fallback_name="Fading time", + ) + .skip_configuration() + .add_to_registry() +)