Skip to content

Commit 4e23f81

Browse files
committed
Init Quirk
1 parent 278817c commit 4e23f81

File tree

1 file changed

+26
-149
lines changed

1 file changed

+26
-149
lines changed

zhaquirks/tuya/ts0601_sensor.py

Lines changed: 26 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
"""Tuya temp and humidity sensors."""
22

3-
from zigpy.quirks.v2 import EntityPlatform, EntityType
4-
from zigpy.quirks.v2.homeassistant import PERCENTAGE, UnitOfTemperature, UnitOfTime
53
from zigpy.quirks.v2.homeassistant.sensor import SensorDeviceClass, SensorStateClass
64
import zigpy.types as t
75
from zigpy.zcl import foundation
86

97
from zhaquirks.tuya import (
10-
TUYA_SET_TIME,
8+
TUYA_MCU_VERSION_REQ,
9+
TUYA_QUERY_DATA,
1110
TuyaPowerConfigurationCluster2AAA,
12-
TuyaTimePayload,
1311
)
1412
from zhaquirks.tuya.builder import TuyaQuirkBuilder
1513
from zhaquirks.tuya.mcu import TuyaMCUCluster
@@ -58,167 +56,46 @@ class TuyaNousTempHumiAlarm(t.enum8):
5856
)
5957

6058

61-
class NoManufTimeTuyaMCUCluster(TuyaMCUCluster):
62-
"""Tuya Manufacturer Cluster with set_time mod."""
59+
class RespondingTuyaMCUCluster(TuyaMCUCluster):
60+
"""Tuya Manufacturer Cluster with mcu version response."""
6361

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)
6672

6773
server_commands = TuyaMCUCluster.server_commands.copy()
6874
server_commands.update(
6975
{
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,
7480
is_manufacturer_specific=False,
7581
),
7682
}
7783
)
7884

7985

80-
# TH01Z - Temperature and humidity sensor with clock
8186
(
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")
9088
.tuya_temperature(dp_id=1, scale=10)
9189
.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],
21995
)
96+
.adds(TuyaPowerConfigurationCluster2AAA)
22097
.skip_configuration()
221-
.add_to_registry(mcu_cluster=NoManufTimeTuyaMCUCluster)
98+
.add_to_registry(mcu_cluster=RespondingTuyaMCUCluster)
22299
)
223100

224101

0 commit comments

Comments
 (0)