|
1 | 1 | """Tuya temp and humidity sensors."""
|
2 | 2 |
|
3 |
| -from zigpy.quirks.v2 import EntityPlatform, EntityType |
4 |
| -from zigpy.quirks.v2.homeassistant import PERCENTAGE, UnitOfTemperature, UnitOfTime |
5 | 3 | from zigpy.quirks.v2.homeassistant.sensor import SensorDeviceClass, SensorStateClass
|
6 | 4 | import zigpy.types as t
|
7 | 5 | from zigpy.zcl import foundation
|
8 | 6 |
|
9 | 7 | from zhaquirks.tuya import (
|
10 |
| - TUYA_SET_TIME, |
| 8 | + TUYA_MCU_VERSION_REQ, |
| 9 | + TUYA_QUERY_DATA, |
11 | 10 | TuyaPowerConfigurationCluster2AAA,
|
12 |
| - TuyaTimePayload, |
13 | 11 | )
|
14 | 12 | from zhaquirks.tuya.builder import TuyaQuirkBuilder
|
15 | 13 | from zhaquirks.tuya.mcu import TuyaMCUCluster
|
@@ -58,167 +56,46 @@ class TuyaNousTempHumiAlarm(t.enum8):
|
58 | 56 | )
|
59 | 57 |
|
60 | 58 |
|
61 |
| -class NoManufTimeTuyaMCUCluster(TuyaMCUCluster): |
62 |
| - """Tuya Manufacturer Cluster with set_time mod.""" |
| 59 | +class RespondingTuyaMCUCluster(TuyaMCUCluster): |
| 60 | + """Tuya Manufacturer Cluster with mcu version response.""" |
63 | 61 |
|
64 |
| - set_time_offset = 1970 |
65 |
| - set_time_local_offset = 1970 |
| 62 | + def handle_mcu_version_response( |
| 63 | + self, payload: TuyaMCUCluster.MCUVersion |
| 64 | + ) -> foundation.Status: |
| 65 | + """Handle MCU version response.""" |
| 66 | + |
| 67 | + self.create_catching_task( |
| 68 | + super().command(TUYA_MCU_VERSION_REQ, 2, expect_reply=False) |
| 69 | + ) |
| 70 | + self.create_catching_task(super().command(TUYA_QUERY_DATA, expect_reply=False)) |
| 71 | + super().handle_mcu_version_response(payload) |
66 | 72 |
|
67 | 73 | server_commands = TuyaMCUCluster.server_commands.copy()
|
68 | 74 | server_commands.update(
|
69 | 75 | {
|
70 |
| - TUYA_SET_TIME: foundation.ZCLCommandDef( |
71 |
| - "set_time", |
72 |
| - {"time": TuyaTimePayload}, |
73 |
| - False, |
| 76 | + TUYA_MCU_VERSION_REQ: foundation.ZCLCommandDef( |
| 77 | + "mcu_version_req", |
| 78 | + {"data": t.uint16_t}, |
| 79 | + True, |
74 | 80 | is_manufacturer_specific=False,
|
75 | 81 | ),
|
76 | 82 | }
|
77 | 83 | )
|
78 | 84 |
|
79 | 85 |
|
80 |
| -# TH01Z - Temperature and humidity sensor with clock |
81 | 86 | (
|
82 |
| - TuyaQuirkBuilder("_TZE200_lve3dvpy", "TS0601") |
83 |
| - .applies_to("_TZE200_c7emyjom", "TS0601") |
84 |
| - .applies_to("_TZE200_locansqn", "TS0601") |
85 |
| - .applies_to("_TZE200_qrztc3ev", "TS0601") |
86 |
| - .applies_to("_TZE200_snloy4rw", "TS0601") |
87 |
| - .applies_to("_TZE200_eanjj2pa", "TS0601") |
88 |
| - .applies_to("_TZE200_ydrdfkim", "TS0601") |
89 |
| - .applies_to("_TZE284_locansqn", "TS0601") |
| 87 | + TuyaQuirkBuilder("_TZE204_upagmta9", "TS0601") |
90 | 88 | .tuya_temperature(dp_id=1, scale=10)
|
91 | 89 | .tuya_humidity(dp_id=2)
|
92 |
| - .tuya_battery(dp_id=4) |
93 |
| - .tuya_number( |
94 |
| - dp_id=17, |
95 |
| - attribute_name="temperature_report_interval", |
96 |
| - type=t.uint16_t, |
97 |
| - device_class=SensorDeviceClass.DURATION, |
98 |
| - unit=UnitOfTime.MINUTES, |
99 |
| - min_value=5, |
100 |
| - max_value=120, |
101 |
| - step=5, |
102 |
| - entity_type=EntityType.CONFIG, |
103 |
| - translation_key="temperature_report_interval", |
104 |
| - fallback_name="Temperature report interval", |
105 |
| - ) |
106 |
| - .tuya_number( |
107 |
| - dp_id=18, |
108 |
| - attribute_name="humidity_report_interval", |
109 |
| - type=t.uint16_t, |
110 |
| - device_class=SensorDeviceClass.DURATION, |
111 |
| - unit=UnitOfTime.MINUTES, |
112 |
| - min_value=5, |
113 |
| - max_value=120, |
114 |
| - step=5, |
115 |
| - entity_type=EntityType.CONFIG, |
116 |
| - translation_key="humidity_report_interval", |
117 |
| - fallback_name="Humidity report interval", |
118 |
| - ) |
119 |
| - .tuya_enum( |
120 |
| - dp_id=9, |
121 |
| - attribute_name="display_unit", |
122 |
| - enum_class=TuyaTempUnitConvert, |
123 |
| - entity_type=EntityType.CONFIG, |
124 |
| - translation_key="display_unit", |
125 |
| - fallback_name="Display unit", |
126 |
| - ) |
127 |
| - .tuya_enum( |
128 |
| - dp_id=14, |
129 |
| - attribute_name="temperature_alarm", |
130 |
| - enum_class=TuyaNousTempHumiAlarm, |
131 |
| - entity_platform=EntityPlatform.SENSOR, |
132 |
| - entity_type=EntityType.STANDARD, |
133 |
| - translation_key="temperature_alarm", |
134 |
| - fallback_name="Temperature alarm", |
135 |
| - ) |
136 |
| - .tuya_number( |
137 |
| - dp_id=10, |
138 |
| - attribute_name="alarm_temperature_max", |
139 |
| - type=t.uint16_t, |
140 |
| - unit=UnitOfTemperature.CELSIUS, |
141 |
| - min_value=-20, |
142 |
| - max_value=60, |
143 |
| - step=1, |
144 |
| - multiplier=0.1, |
145 |
| - entity_type=EntityType.CONFIG, |
146 |
| - translation_key="alarm_temperature_max", |
147 |
| - fallback_name="Alarm temperature max", |
148 |
| - ) |
149 |
| - .tuya_number( |
150 |
| - dp_id=11, |
151 |
| - attribute_name="alarm_temperature_min", |
152 |
| - type=t.uint16_t, |
153 |
| - unit=UnitOfTemperature.CELSIUS, |
154 |
| - min_value=-20, |
155 |
| - max_value=60, |
156 |
| - step=1, |
157 |
| - multiplier=0.1, |
158 |
| - entity_type=EntityType.CONFIG, |
159 |
| - translation_key="alarm_temperature_min", |
160 |
| - fallback_name="Alarm temperature min", |
161 |
| - ) |
162 |
| - .tuya_number( |
163 |
| - dp_id=19, |
164 |
| - attribute_name="temperature_sensitivity", |
165 |
| - type=t.uint16_t, |
166 |
| - unit=UnitOfTemperature.CELSIUS, |
167 |
| - min_value=0.1, |
168 |
| - max_value=50, |
169 |
| - step=0.1, |
170 |
| - multiplier=0.1, |
171 |
| - entity_type=EntityType.CONFIG, |
172 |
| - translation_key="temperature_sensitivity", |
173 |
| - fallback_name="Temperature sensitivity", |
174 |
| - ) |
175 |
| - .tuya_enum( |
176 |
| - dp_id=15, |
177 |
| - attribute_name="humidity_alarm", |
178 |
| - enum_class=TuyaNousTempHumiAlarm, |
179 |
| - entity_platform=EntityPlatform.SENSOR, |
180 |
| - entity_type=EntityType.STANDARD, |
181 |
| - translation_key="humidity_alarm", |
182 |
| - fallback_name="Humidity alarm", |
183 |
| - ) |
184 |
| - .tuya_number( |
185 |
| - dp_id=12, |
186 |
| - attribute_name="alarm_humidity_max", |
187 |
| - type=t.uint16_t, |
188 |
| - unit=PERCENTAGE, |
189 |
| - min_value=0, |
190 |
| - max_value=100, |
191 |
| - step=1, |
192 |
| - entity_type=EntityType.CONFIG, |
193 |
| - translation_key="alarm_humidity_max", |
194 |
| - fallback_name="Alarm humidity max", |
195 |
| - ) |
196 |
| - .tuya_number( |
197 |
| - dp_id=13, |
198 |
| - attribute_name="alarm_humidity_min", |
199 |
| - type=t.uint16_t, |
200 |
| - unit=PERCENTAGE, |
201 |
| - min_value=0, |
202 |
| - max_value=100, |
203 |
| - step=1, |
204 |
| - entity_type=EntityType.CONFIG, |
205 |
| - translation_key="alarm_humidity_min", |
206 |
| - fallback_name="Alarm humidity min", |
207 |
| - ) |
208 |
| - .tuya_number( |
209 |
| - dp_id=20, |
210 |
| - attribute_name="humidity_sensitivity", |
211 |
| - type=t.uint16_t, |
212 |
| - unit=PERCENTAGE, |
213 |
| - min_value=1, |
214 |
| - max_value=100, |
215 |
| - step=1, |
216 |
| - entity_type=EntityType.CONFIG, |
217 |
| - translation_key="humidity_sensitivity", |
218 |
| - fallback_name="Humidity sensitivity", |
| 90 | + .tuya_dp( |
| 91 | + dp_id=3, |
| 92 | + ep_attribute=TuyaPowerConfigurationCluster2AAA.ep_attribute, |
| 93 | + attribute_name="battery_percentage_remaining", |
| 94 | + converter=lambda x: {0: 50, 1: 100, 2: 200}[x], |
219 | 95 | )
|
| 96 | + .adds(TuyaPowerConfigurationCluster2AAA) |
220 | 97 | .skip_configuration()
|
221 |
| - .add_to_registry(mcu_cluster=NoManufTimeTuyaMCUCluster) |
| 98 | + .add_to_registry(mcu_cluster=RespondingTuyaMCUCluster) |
222 | 99 | )
|
223 | 100 |
|
224 | 101 |
|
|
0 commit comments