6
6
7
7
from tests .common import ClusterListener
8
8
import zhaquirks
9
+ from zhaquirks .tuya import TUYA_MCU_VERSION_RSP
9
10
from zhaquirks .tuya .mcu import TuyaMCUCluster
10
11
11
12
zhaquirks .setup ()
12
13
14
+ ZCL_TUYA_VERSION_RSP = b"\x09 \x06 \x11 \x01 \x6d \x82 "
15
+ ZCL_TUYA_SET_TIME = b"\x09 \x12 \x24 \x0d \x00 "
16
+
13
17
14
18
@pytest .mark .parametrize (
15
- "msg,attr,value" ,
19
+ "manuf, msg,attr,value" ,
16
20
[
17
21
(
22
+ "_TZE204_p3lqqy2r" ,
18
23
b"\t \x13 \x02 \x00 \x06 \x01 \x01 \x00 \x01 \x01 " ,
19
24
Thermostat .AttributeDefs .system_mode ,
20
25
Thermostat .SystemMode .Heat ,
21
26
), # Set to heat, dp 1
22
27
(
28
+ "_TZE204_p3lqqy2r" ,
23
29
b"\t \x16 \x02 \x00 \t \x18 \x02 \x00 \x04 \x00 \x00 \x00 \x18 " ,
24
30
Thermostat .AttributeDefs .local_temperature ,
25
31
2400 ,
26
32
), # Current temp 24, dp 24
27
33
(
34
+ "_TZE204_p3lqqy2r" ,
28
35
b"\t \x15 \x02 \x00 \x08 \x10 \x02 \x00 \x04 \x00 \x00 \x00 \x19 " ,
29
36
Thermostat .AttributeDefs .occupied_heating_setpoint ,
30
37
2500 ,
31
38
), # Setpoint to 25, dp 16
32
39
(
40
+ "_TZE204_p3lqqy2r" ,
33
41
b"\t \x17 \x02 \x00 \n \x1c \x02 \x00 \x04 \x00 \x00 \x00 \x00 " ,
34
42
Thermostat .AttributeDefs .local_temperature_calibration ,
35
43
0 ,
36
44
), # Local calibration to 0, dp 28
37
45
(
46
+ "_TZE204_p3lqqy2r" ,
38
47
b"\t \x1c \x02 \x00 \x0f h\x01 \x00 \x01 \x01 " ,
39
48
Thermostat .AttributeDefs .running_state ,
40
49
Thermostat .RunningState .Heat_State_On ,
41
50
), # Running state, dp 104
42
51
(
52
+ "_TZE204_p3lqqy2r" ,
43
53
b"\t \x1d \x02 \x00 \x10 k\x02 \x00 \x04 \x00 \x00 \x00 \x1b " ,
44
54
Thermostat .AttributeDefs .max_heat_setpoint_limit ,
45
55
2700 ,
46
56
), # Max heat set point, dp 107
57
+ (
58
+ "_TZE204_lzriup1j" ,
59
+ b"\t \x13 \x02 \x00 \x06 \x01 \x01 \x00 \x01 \x01 " ,
60
+ Thermostat .AttributeDefs .system_mode ,
61
+ Thermostat .SystemMode .Heat ,
62
+ ), # Set to heat, dp 1
63
+ (
64
+ "_TZE200_viy9ihs7" ,
65
+ b"\t \x13 \x02 \x00 \x06 \x01 \x01 \x00 \x01 \x01 " ,
66
+ Thermostat .AttributeDefs .system_mode ,
67
+ Thermostat .SystemMode .Heat ,
68
+ ), # Set to heat, dp 1
69
+ (
70
+ "_TZE204_xnbkhhdr" ,
71
+ b"\t \x13 \x02 \x00 \x06 \x01 \x01 \x00 \x01 \x01 " ,
72
+ Thermostat .AttributeDefs .system_mode ,
73
+ Thermostat .SystemMode .Heat ,
74
+ ), # Set to heat, dp 1
75
+ (
76
+ "_TZE284_xnbkhhdr" ,
77
+ b"\t \x13 \x02 \x00 \x06 \x01 \x01 \x00 \x01 \x01 " ,
78
+ Thermostat .AttributeDefs .system_mode ,
79
+ Thermostat .SystemMode .Heat ,
80
+ ), # Set to heat, dp 1
47
81
],
48
82
)
49
- async def test_handle_get_data (zigpy_device_from_v2_quirk , msg , attr , value ):
83
+ async def test_handle_get_data (zigpy_device_from_v2_quirk , manuf , msg , attr , value ):
50
84
"""Test handle_get_data for multiple attributes."""
51
85
52
- quirked = zigpy_device_from_v2_quirk ("_TZE204_p3lqqy2r" , "TS0601" )
86
+ quirked = zigpy_device_from_v2_quirk (manuf , "TS0601" )
53
87
ep = quirked .endpoints [1 ]
54
88
55
89
assert ep .tuya_manufacturer is not None
@@ -69,3 +103,21 @@ async def test_handle_get_data(zigpy_device_from_v2_quirk, msg, attr, value):
69
103
assert thermostat_listener .attribute_updates [0 ][1 ] == value
70
104
71
105
assert ep .thermostat .get (attr .id ) == value
106
+
107
+
108
+ async def test_tuya_no_mcu_version (zigpy_device_from_v2_quirk ):
109
+ """Test lack of TUYA_MCU_VERSION_RSP messages."""
110
+
111
+ tuya_device = zigpy_device_from_v2_quirk ("_TZE284_xnbkhhdr" , "TS0601" )
112
+
113
+ tuya_cluster = tuya_device .endpoints [1 ].tuya_manufacturer
114
+ cluster_listener = ClusterListener (tuya_cluster )
115
+
116
+ assert len (cluster_listener .attribute_updates ) == 0
117
+
118
+ # simulate a TUYA_MCU_VERSION_RSP message
119
+ hdr , args = tuya_cluster .deserialize (ZCL_TUYA_VERSION_RSP )
120
+ assert hdr .command_id == TUYA_MCU_VERSION_RSP
121
+
122
+ tuya_cluster .handle_message (hdr , args )
123
+ assert len (cluster_listener .attribute_updates ) == 0
0 commit comments