Skip to content

Commit 65b3326

Browse files
committed
Init quirk
1 parent 57bcec8 commit 65b3326

File tree

3 files changed

+59
-5
lines changed

3 files changed

+59
-5
lines changed

tests/test_tuya_builder.py

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

76+
class ModTuyaMCUCluster(TuyaMCUCluster):
77+
"""Modified Cluster."""
78+
7679
entry = (
7780
TuyaQuirkBuilder(device_mock.manufacturer, device_mock.model, registry=registry)
7881
.tuya_battery(dp_id=1)
@@ -111,7 +114,7 @@ class TestEnum(t.enum8):
111114
fallback_name="Test enum",
112115
)
113116
.skip_configuration()
114-
.add_to_registry()
117+
.add_to_registry(mcu_cluster=ModTuyaMCUCluster)
115118
)
116119

117120
# coverage for overridden __eq__ method
@@ -128,6 +131,7 @@ class TestEnum(t.enum8):
128131
assert isinstance(ep.basic, Basic)
129132

130133
assert ep.tuya_manufacturer is not None
134+
assert isinstance(ep.tuya_manufacturer, ModTuyaMCUCluster)
131135
assert isinstance(ep.tuya_manufacturer, TuyaMCUCluster)
132136

133137
tuya_cluster = ep.tuya_manufacturer

zhaquirks/tuya/builder/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -538,16 +538,16 @@ class EnchantedDeviceV2(CustomDeviceV2, BaseEnchantedDevice):
538538

539539
return self
540540

541-
def add_to_registry(self) -> QuirksV2RegistryEntry:
541+
def add_to_registry(self, mcu_cluster=TuyaMCUCluster) -> QuirksV2RegistryEntry:
542542
"""Build the quirks v2 registry entry."""
543543

544-
class NewAttributeDefs(TuyaMCUCluster.AttributeDefs):
544+
class NewAttributeDefs(mcu_cluster.AttributeDefs):
545545
"""Attribute Definitions."""
546546

547547
for attr in self.new_attributes:
548548
setattr(NewAttributeDefs, attr.name, attr)
549549

550-
class TuyaReplacementCluster(TuyaMCUCluster):
550+
class TuyaReplacementCluster(mcu_cluster):
551551
"""Replacement Tuya Cluster."""
552552

553553
data_point_handlers: dict[int, str]

zhaquirks/tuya/ts0601_sensor.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +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 TuyaPowerConfigurationCluster2AAA, TuyaQuirkBuilder
7+
from zhaquirks.tuya import (
8+
TUYA_MCU_VERSION_REQ,
9+
TUYA_QUERY_DATA,
10+
TuyaPowerConfigurationCluster2AAA,
11+
)
12+
from zhaquirks.tuya.builder import TuyaQuirkBuilder
13+
from zhaquirks.tuya.mcu import TuyaMCUCluster
714

815
(
916
TuyaQuirkBuilder("_TZE200_bjawzodf", "TS0601")
@@ -33,6 +40,49 @@
3340
)
3441

3542

43+
class RespondingTuyaMCUCluster(TuyaMCUCluster):
44+
"""Tuya Manufacturer Cluster with mcu version response."""
45+
46+
def handle_mcu_version_response(
47+
self, payload: TuyaMCUCluster.MCUVersion
48+
) -> foundation.Status:
49+
"""Handle MCU version response."""
50+
51+
self.create_catching_task(
52+
super().command(TUYA_MCU_VERSION_REQ, 2, expect_reply=False)
53+
)
54+
self.create_catching_task(super().command(TUYA_QUERY_DATA, expect_reply=False))
55+
super().handle_mcu_version_response(payload)
56+
57+
server_commands = TuyaMCUCluster.server_commands.copy()
58+
server_commands.update(
59+
{
60+
TUYA_MCU_VERSION_REQ: foundation.ZCLCommandDef(
61+
"mcu_version_req",
62+
{"data": t.uint16_t},
63+
True,
64+
is_manufacturer_specific=False,
65+
),
66+
}
67+
)
68+
69+
70+
(
71+
TuyaQuirkBuilder("_TZE204_upagmta9", "TS0601")
72+
.tuya_temperature(dp_id=1, scale=10)
73+
.tuya_humidity(dp_id=2)
74+
.tuya_dp(
75+
dp_id=3,
76+
ep_attribute=TuyaPowerConfigurationCluster2AAA.ep_attribute,
77+
attribute_name="battery_percentage_remaining",
78+
converter=lambda x: {0: 50, 1: 100, 2: 200}[x],
79+
)
80+
.adds(TuyaPowerConfigurationCluster2AAA)
81+
.skip_configuration()
82+
.add_to_registry(mcu_cluster=RespondingTuyaMCUCluster)
83+
)
84+
85+
3686
(
3787
TuyaQuirkBuilder("_TZE200_yjjdcqsq", "TS0601")
3888
.applies_to("_TZE200_9yapgbuv", "TS0601")

0 commit comments

Comments
 (0)