Skip to content

Commit fa6e3c1

Browse files
committed
Init quirk
1 parent e61ecbb commit fa6e3c1

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

tests/test_tuya_builder.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ class TestEnum(t.enum8):
8585
A = 0x00
8686
B = 0x01
8787

88+
class ModTuyaMCUCluster(TuyaMCUCluster):
89+
"""Modified Cluster."""
90+
8891
entry = (
8992
TuyaQuirkBuilder(device_mock.manufacturer, device_mock.model, registry=registry)
9093
.tuya_battery(dp_id=1)
@@ -123,7 +126,7 @@ class TestEnum(t.enum8):
123126
fallback_name="Test enum",
124127
)
125128
.skip_configuration()
126-
.add_to_registry()
129+
.add_to_registry(replacement_cluster=ModTuyaMCUCluster)
127130
)
128131

129132
# coverage for overridden __eq__ method
@@ -140,6 +143,7 @@ class TestEnum(t.enum8):
140143
assert isinstance(ep.basic, Basic)
141144

142145
assert ep.tuya_manufacturer is not None
146+
assert isinstance(ep.tuya_manufacturer, ModTuyaMCUCluster)
143147
assert isinstance(ep.tuya_manufacturer, TuyaMCUCluster)
144148

145149
tuya_cluster = ep.tuya_manufacturer

zhaquirks/tuya/ts0601_sensor.py

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
from zigpy.quirks.v2.homeassistant.sensor import SensorDeviceClass, SensorStateClass
44
import zigpy.types as t
5+
from zigpy.zcl import foundation
56

6-
from zhaquirks.tuya.builder import (
7+
from zhaquirks.tuya import (
8+
TUYA_MCU_VERSION_REQ,
9+
TUYA_QUERY_DATA,
710
TuyaPowerConfigurationCluster2AAA,
8-
TuyaQuirkBuilder,
9-
TuyaTemperatureMeasurement,
1011
)
12+
from zhaquirks.tuya.builder import TuyaQuirkBuilder, TuyaTemperatureMeasurement
13+
from zhaquirks.tuya.mcu import TuyaMCUCluster
1114

1215
(
1316
TuyaQuirkBuilder("_TZE200_bjawzodf", "TS0601")
@@ -61,6 +64,50 @@
6164
.add_to_registry()
6265
)
6366

67+
68+
class RespondingTuyaMCUCluster(TuyaMCUCluster):
69+
"""Tuya Manufacturer Cluster with mcu version response."""
70+
71+
def handle_mcu_version_response(
72+
self, payload: TuyaMCUCluster.MCUVersion
73+
) -> foundation.Status:
74+
"""Handle MCU version response."""
75+
76+
self.create_catching_task(
77+
super().command(TUYA_MCU_VERSION_REQ, 2, expect_reply=False)
78+
)
79+
self.create_catching_task(super().command(TUYA_QUERY_DATA, expect_reply=False))
80+
super().handle_mcu_version_response(payload)
81+
82+
server_commands = TuyaMCUCluster.server_commands.copy()
83+
server_commands.update(
84+
{
85+
TUYA_MCU_VERSION_REQ: foundation.ZCLCommandDef(
86+
"mcu_version_req",
87+
{"data": t.uint16_t},
88+
True,
89+
is_manufacturer_specific=False,
90+
),
91+
}
92+
)
93+
94+
95+
(
96+
TuyaQuirkBuilder("_TZE204_upagmta9", "TS0601")
97+
.tuya_temperature(dp_id=1, scale=10)
98+
.tuya_humidity(dp_id=2)
99+
.tuya_dp(
100+
dp_id=3,
101+
ep_attribute=TuyaPowerConfigurationCluster2AAA.ep_attribute,
102+
attribute_name="battery_percentage_remaining",
103+
converter=lambda x: {0: 50, 1: 100, 2: 200}[x],
104+
)
105+
.adds(TuyaPowerConfigurationCluster2AAA)
106+
.skip_configuration()
107+
.add_to_registry(replacement_cluster=RespondingTuyaMCUCluster)
108+
)
109+
110+
64111
(
65112
TuyaQuirkBuilder("_TZE200_yjjdcqsq", "TS0601")
66113
.applies_to("_TZE200_9yapgbuv", "TS0601")

0 commit comments

Comments
 (0)