Skip to content

Commit 2b0df38

Browse files
committed
Add V2 Quirk for telink devices with cfw
1 parent e61ecbb commit 2b0df38

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed

zhaquirks/custom/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Quirks for diy devices or with custom firmware."""

zhaquirks/custom/telink.py

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
"""Telink TLSR825x based devices with custom firmware.
2+
3+
see https://github.com/pvvx/ZigbeeTLc
4+
"""
5+
6+
from zigpy.quirks.v2 import QuirkBuilder
7+
from zigpy.quirks.v2.homeassistant import PERCENTAGE, UnitOfTemperature
8+
import zigpy.types as t
9+
from zigpy.zcl import ClusterType
10+
from zigpy.zcl.clusters.hvac import UserInterface
11+
from zigpy.zcl.foundation import ZCLAttributeDef
12+
13+
from zhaquirks import CustomCluster
14+
15+
16+
class Display(t.enum8):
17+
"""Turn off the display."""
18+
19+
Off = 0x01
20+
On = 0x00
21+
22+
class CustomUserInterfaceCluster(CustomCluster, UserInterface):
23+
"""Custom User Interface Cluster with smiley control."""
24+
25+
class AttributeDefs(UserInterface.AttributeDefs):
26+
"""Attribute Definitions."""
27+
28+
# display. 0 - display is off, 1 - display is on
29+
display = ZCLAttributeDef(
30+
id=0x0106,
31+
type=Display,
32+
access="rw",
33+
is_manufacturer_specific=True,
34+
)
35+
36+
# comfort temperature min: A value in 0.01ºC to set minimum comfort temperature for happy face
37+
comfort_temperature_min = ZCLAttributeDef(
38+
id=0x0102,
39+
type=t.int16s,
40+
access="rw",
41+
is_manufacturer_specific=True,
42+
)
43+
44+
# comfort temperature max: A value in 0.01ºC to set maximum comfort temperature for happy face
45+
comfort_temperature_max = ZCLAttributeDef(
46+
id=0x0103,
47+
type=t.int16s,
48+
access="rw",
49+
is_manufacturer_specific=True,
50+
)
51+
52+
# comfort humidity min: A value in 0.01%RH to set minimum comfort humidity for happy face
53+
comfort_humidity_min = ZCLAttributeDef(
54+
id=0x0104,
55+
type=t.uint16_t,
56+
access="rw",
57+
is_manufacturer_specific=True,
58+
)
59+
60+
# comfort humidity max: A value in 0.01%RH to set maximum comfort humidity for happy face
61+
comfort_humidity_max = ZCLAttributeDef(
62+
id=0x0105,
63+
type=t.uint16_t,
64+
access="rw",
65+
is_manufacturer_specific=True,
66+
)
67+
68+
# A value in 0.01ºC offset to fix up incorrect values from sensor
69+
temperature_offset = ZCLAttributeDef(
70+
id=0x0100,
71+
type=t.int16s,
72+
access="rw",
73+
is_manufacturer_specific=True,
74+
)
75+
76+
# A value in 0.01%RH offset to fix up incorrect values from sensor
77+
humidity_offset = ZCLAttributeDef(
78+
id=0x0101,
79+
type=t.int16s,
80+
access="rw",
81+
is_manufacturer_specific=True,
82+
)
83+
# Measurement interval, step 1 second, range: 3..255 seconds. Default 10 seconds.
84+
measurement_interval = ZCLAttributeDef(
85+
id=0x0107,
86+
type=t.uint8_t,
87+
access="rw",
88+
is_manufacturer_specific=True,
89+
)
90+
91+
92+
(
93+
QuirkBuilder("MiaMiaoCe", "MHO-C401N-z")
94+
.applies_to("Xiaomi", "LYWSD03MMC-z")
95+
.replaces(CustomUserInterfaceCluster, cluster_type=ClusterType.Client)
96+
# .number(
97+
# CustomUserInterfaceCluster.AttributeDefs.temperature_offset.name,
98+
# CustomUserInterfaceCluster.cluster_id,
99+
# ClusterType.Client,
100+
# min_value=-327.67,
101+
# max_value=327.67,
102+
# step=0.01,
103+
# unit=UnitOfTemperature.CELSIUS,
104+
# translation_key="temperature_offset",
105+
# fallback_name="Temperature offset",
106+
# multiplier=100
107+
# )
108+
# .number(
109+
# CustomUserInterfaceCluster.AttributeDefs.humidity_offset.name,
110+
# CustomUserInterfaceCluster.cluster_id,
111+
# ClusterType.Client,
112+
# min_value=-327.67,
113+
# max_value=327.67,
114+
# step=0.01,
115+
# # unit=PERCENTAGE,
116+
# translation_key="temperature_offset",
117+
# fallback_name="Temperature offset",
118+
# multiplier=100
119+
# )
120+
.add_to_registry()
121+
)

0 commit comments

Comments
 (0)