Skip to content

Commit

Permalink
Add Tuya motion sensor _TZE204_uxllnywp (#3699)
Browse files Browse the repository at this point in the history
  • Loading branch information
prairiesnpr authored Jan 20, 2025
1 parent edf9432 commit f8e7128
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 1 deletion.
3 changes: 2 additions & 1 deletion tests/test_tuya_motion.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
ZCL_TUYA_MOTION_V2 = b"\tL\x01\x00\x05\x65\x01\x00\x01\x01" # DP 101
ZCL_TUYA_MOTION_V3 = b"\tL\x01\x00\x05\x03\x04\x00\x01\x02" # DP 3, enum
ZCL_TUYA_MOTION_V4 = b"\tL\x01\x00\x05\x69\x01\x00\x01\x01" # DP 105

ZCL_TUYA_MOTION_V5 = b"\tL\x01\x00\x05\x01\x01\x00\x01\x04" # DP 1, motion is 0x04

zhaquirks.setup()

Expand Down Expand Up @@ -56,6 +56,7 @@
("_TZE200_ttcovulf", "TS0601", ZCL_TUYA_MOTION),
("_TZE204_sxm7l9xa", "TS0601", ZCL_TUYA_MOTION_V4),
("_TZE204_e5m9c5hl", "TS0601", ZCL_TUYA_MOTION_V4),
("_TZE204_uxllnywp", "TS0601", ZCL_TUYA_MOTION_V5),
],
)
async def test_tuya_motion_quirk_occ(zigpy_device_from_v2_quirk, model, manuf, occ_msg):
Expand Down
97 changes: 97 additions & 0 deletions zhaquirks/tuya/ts0601_motion.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ class TuyaMotionFadeTime(t.enum8):
.skip_configuration()
)


(
base_tuya_motion.clone()
.applies_to("_TZE200_ya4ft0w4", "TS0601")
Expand Down Expand Up @@ -243,6 +244,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


(
base_tuya_motion.clone()
.applies_to("_TZE200_ar0slwnd", "TS0601") # Not present in z2m
Expand Down Expand Up @@ -305,6 +307,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


(
base_tuya_motion.clone()
.applies_to("_TZE204_qasjif9e", "TS0601")
Expand Down Expand Up @@ -351,6 +354,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


(
TuyaQuirkBuilder("_TYST11_i5j6ifxj", "5j6ifxj")
.applies_to("_TYST11_7hfcudw5", "hfcudw5")
Expand All @@ -363,6 +367,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


# Neo motion, NAS-PD07 occupancy sensor
(
TuyaQuirkBuilder("_TZE200_7hfcudw5", "TS0601")
Expand All @@ -380,6 +385,92 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


(
TuyaQuirkBuilder("_TZE204_uxllnywp", "TS0601")
.tuya_dp(
dp_id=1,
ep_attribute=TuyaOccupancySensing.ep_attribute,
attribute_name=OccupancySensing.AttributeDefs.occupancy.name,
converter=lambda x: x == 4,
)
.adds(TuyaOccupancySensing)
.tuya_sensor(
dp_id=101,
attribute_name="target_distance",
type=t.uint16_t,
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.DISTANCE,
unit=UnitOfLength.CENTIMETERS,
entity_type=EntityType.STANDARD,
translation_key="target_distance",
fallback_name="Target distance",
)
.tuya_dp(
dp_id=102,
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=103,
attribute_name="fading_time",
type=t.uint16_t,
device_class=SensorDeviceClass.DURATION,
unit=UnitOfTime.SECONDS,
min_value=1,
max_value=59,
step=1,
translation_key="fading_time",
fallback_name="Fading time",
)
.tuya_switch(
dp_id=104,
attribute_name="find_switch",
entity_type=EntityType.STANDARD,
translation_key="led_indicator",
fallback_name="LED indicator",
)
.tuya_number(
dp_id=107,
attribute_name="detection_distance_min",
type=t.uint16_t,
device_class=SensorDeviceClass.DISTANCE,
unit=UnitOfLength.CENTIMETERS,
min_value=0,
max_value=840,
step=1,
translation_key="detection_distance_min",
fallback_name="Minimum range",
)
.tuya_number(
dp_id=108,
attribute_name="detection_distance_max",
type=t.uint16_t,
device_class=SensorDeviceClass.DISTANCE,
unit=UnitOfLength.CENTIMETERS,
min_value=0.75,
max_value=840,
step=1,
translation_key="detection_distance_max",
fallback_name="Maximum range",
)
.tuya_number(
dp_id=111,
attribute_name="presence_sensitivity",
type=t.uint16_t,
min_value=0,
max_value=10,
step=1,
translation_key="presence_sensitivity",
fallback_name="Presence sensitivity",
)
.skip_configuration()
.add_to_registry()
)


(
base_tuya_motion.clone()
.applies_to("_TZE204_sbyx0lm6", "TS0601")
Expand Down Expand Up @@ -520,6 +611,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


(
TuyaQuirkBuilder("_TZE204_muvkrjr5", "TS0601")
.tuya_dp(
Expand Down Expand Up @@ -587,6 +679,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


(
TuyaQuirkBuilder("_TZE204_kyhbrfyl", "TS0601")
.tuya_dp(
Expand Down Expand Up @@ -664,6 +757,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


# Heimen HS80S-TY
(
TuyaQuirkBuilder("_TZ6210_duv6fhwt", "TS0601")
Expand Down Expand Up @@ -722,6 +816,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


# NEO NAS-PS10B2
(
TuyaQuirkBuilder("_TZE204_1youk3hj", "TS0601")
Expand Down Expand Up @@ -842,6 +937,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


# TuyaZG-204ZL
(
TuyaQuirkBuilder("_TZE200_3towulqd", "TS0601")
Expand Down Expand Up @@ -893,6 +989,7 @@ class TuyaMotionFadeTime(t.enum8):
.add_to_registry()
)


# Tuya Mini human breath sensor ZY-M100-S_1
(
TuyaQuirkBuilder("_TZE204_sxm7l9xa", "TS0601")
Expand Down

0 comments on commit f8e7128

Please sign in to comment.