Skip to content

Commit 382dc33

Browse files
Add Third Reality plug, motion, water leak sensor (#3426)
Co-authored-by: TheJulianJES <[email protected]>
1 parent abf208e commit 382dc33

File tree

3 files changed

+130
-0
lines changed

3 files changed

+130
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
"""Third Reality motion sensor devices."""
2+
3+
from typing import Final
4+
5+
from zigpy.quirks import CustomCluster
6+
from zigpy.quirks.v2 import QuirkBuilder
7+
from zigpy.quirks.v2.homeassistant import UnitOfTime
8+
import zigpy.types as t
9+
from zigpy.zcl.foundation import BaseAttributeDefs, ZCLAttributeDef
10+
11+
12+
class ThirdRealityMotionCluster(CustomCluster):
13+
"""Third Reality's motion sensor private cluster."""
14+
15+
cluster_id = 0xFF01
16+
17+
class AttributeDefs(BaseAttributeDefs):
18+
"""Define the attributes of a private cluster."""
19+
20+
detection_interval: Final = ZCLAttributeDef(
21+
id=0x0001,
22+
type=t.uint16_t,
23+
is_manufacturer_specific=True,
24+
)
25+
26+
27+
(
28+
QuirkBuilder("Third Reality, Inc", "3RMS16BZ")
29+
.replaces(ThirdRealityMotionCluster)
30+
.number(
31+
attribute_name=ThirdRealityMotionCluster.AttributeDefs.detection_interval.name,
32+
min_value=5,
33+
max_value=3600,
34+
unit=UnitOfTime.SECONDS,
35+
cluster_id=ThirdRealityMotionCluster.cluster_id,
36+
translation_key="detection_interval",
37+
fallback_name="Detection interval",
38+
)
39+
.add_to_registry()
40+
)

zhaquirks/thirdreality/plug.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
"""Third Reality plug devices."""
2+
3+
from typing import Final
4+
5+
from zigpy.quirks import CustomCluster
6+
from zigpy.quirks.v2 import QuirkBuilder
7+
import zigpy.types as t
8+
from zigpy.zcl.foundation import BaseAttributeDefs, ZCLAttributeDef
9+
10+
11+
class ThirdRealityPlugCluster(CustomCluster):
12+
"""Third Reality's plug private cluster."""
13+
14+
cluster_id = 0xFF03
15+
16+
class AttributeDefs(BaseAttributeDefs):
17+
"""Define the attributes of a private cluster."""
18+
19+
reset_summation_delivered: Final = ZCLAttributeDef(
20+
id=0x0000,
21+
type=t.uint8_t,
22+
is_manufacturer_specific=True,
23+
)
24+
25+
26+
(
27+
QuirkBuilder("Third Reality, Inc", "3RSP02028BZ")
28+
.also_applies_to("Third Reality, Inc", "3RSPE01044BZ")
29+
.replaces(ThirdRealityPlugCluster)
30+
.write_attr_button(
31+
attribute_name=ThirdRealityPlugCluster.AttributeDefs.reset_summation_delivered.name,
32+
attribute_value=0x01,
33+
cluster_id=ThirdRealityPlugCluster.cluster_id,
34+
translation_key="reset_summation_delivered",
35+
fallback_name="Reset summation delivered",
36+
)
37+
.add_to_registry()
38+
)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""Third Reality water leak devices."""
2+
3+
from typing import Final
4+
5+
from zigpy.quirks import CustomCluster
6+
from zigpy.quirks.v2 import QuirkBuilder
7+
from zigpy.quirks.v2.homeassistant import UnitOfTime
8+
import zigpy.types as t
9+
from zigpy.zcl.foundation import BaseAttributeDefs, ZCLAttributeDef
10+
11+
12+
class ThirdRealityWaterLeakCluster(CustomCluster):
13+
"""Third Reality's water leak sensor private cluster."""
14+
15+
cluster_id = 0xFF01
16+
17+
class AttributeDefs(BaseAttributeDefs):
18+
"""Define the attributes of a private cluster."""
19+
20+
enable_siren: Final = ZCLAttributeDef(
21+
id=0x0010,
22+
type=t.uint8_t,
23+
is_manufacturer_specific=True,
24+
)
25+
26+
siren_time: Final = ZCLAttributeDef(
27+
id=0x0011,
28+
type=t.uint8_t,
29+
is_manufacturer_specific=True,
30+
)
31+
32+
33+
(
34+
QuirkBuilder("Third Reality, Inc", "3RWS18BZ")
35+
.replaces(ThirdRealityWaterLeakCluster)
36+
.switch(
37+
attribute_name=ThirdRealityWaterLeakCluster.AttributeDefs.enable_siren.name,
38+
cluster_id=ThirdRealityWaterLeakCluster.cluster_id,
39+
translation_key="enable_siren",
40+
fallback_name="Enable siren",
41+
)
42+
.number(
43+
attribute_name=ThirdRealityWaterLeakCluster.AttributeDefs.siren_time.name,
44+
min_value=0,
45+
max_value=255,
46+
unit=UnitOfTime.MINUTES,
47+
cluster_id=ThirdRealityWaterLeakCluster.cluster_id,
48+
translation_key="siren_time",
49+
fallback_name="Siren time",
50+
)
51+
.add_to_registry()
52+
)

0 commit comments

Comments
 (0)