Skip to content

Commit b5e2295

Browse files
committed
Add Schneider Electric Smoke Alarms
1 parent bd9ecbb commit b5e2295

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
"""Scneider Electric Smoke Alarm."""
2+
3+
from typing import Final
4+
5+
from zigpy.quirks import CustomCluster
6+
from zigpy.quirks.v2 import EntityType, QuirkBuilder
7+
from zigpy.quirks.v2.homeassistant import (
8+
UnitOfTime,
9+
)
10+
from zigpy.quirks.v2.homeassistant.number import NumberDeviceClass
11+
import zigpy.types as t
12+
from zigpy.zcl.foundation import ZCLAttributeDef, ZCLCommandDef
13+
14+
from zhaquirks.schneiderelectric import (
15+
SE_MANUF_NAME,
16+
SEBasic,
17+
)
18+
19+
20+
class SELEDBrightness(t.enum8):
21+
"""LED brightness."""
22+
23+
Min = 0x00
24+
Max = 0x01
25+
26+
27+
class SEAlarmSoundLevel(t.enum8):
28+
"""Alarm sound level."""
29+
30+
Min = 0x00
31+
Max = 0x01
32+
33+
34+
class SEAlarmSoundMode(t.enum8):
35+
"""Alarm sound mode."""
36+
37+
PressureLow = 0x00
38+
PressureMid = 0x01
39+
PressureHigh = 0x02
40+
41+
42+
class SEAlarmConfiguration(CustomCluster):
43+
"""Schneider Electric Alarm Configuration cluster."""
44+
45+
cluster_id = 0xFC04
46+
name = "SEAlarmConfiguration"
47+
48+
class AttributeDefs(CustomCluster.AttributeDefs):
49+
"""Attribute definitions."""
50+
51+
se_led_brightness: Final = ZCLAttributeDef(
52+
id=0x0000,
53+
type=SELEDBrightness,
54+
access="rw",
55+
is_manufacturer_specific=True,
56+
)
57+
se_alarm_sound_level: Final = ZCLAttributeDef(
58+
id=0x0001,
59+
type=SEAlarmSoundLevel,
60+
access="rw",
61+
is_manufacturer_specific=True,
62+
)
63+
se_alarm_sound_mode: Final = ZCLAttributeDef(
64+
id=0x0002,
65+
type=SEAlarmSoundMode,
66+
access="rw",
67+
is_manufacturer_specific=True,
68+
)
69+
se_lifetime: Final = ZCLAttributeDef(
70+
id=0x0003,
71+
type=t.uint8_t,
72+
access="r",
73+
is_manufacturer_specific=True,
74+
)
75+
se_hush_duration: Final = ZCLAttributeDef(
76+
id=0x0004,
77+
type=t.uint8_t,
78+
access="rw",
79+
is_manufacturer_specific=True,
80+
)
81+
se_test_mode: Final = ZCLAttributeDef(
82+
id=0x0005,
83+
type=t.Bool,
84+
access="rw",
85+
is_manufacturer_specific=True,
86+
)
87+
se_no_disturb_mode: Final = ZCLAttributeDef(
88+
id=0x0006,
89+
type=t.Bool,
90+
access="rw",
91+
is_manufacturer_specific=True,
92+
)
93+
se_cluster_revision: Final = ZCLAttributeDef(
94+
id=0xFFFD,
95+
type=t.uint16_t,
96+
access="r",
97+
is_manufacturer_specific=True,
98+
)
99+
100+
101+
(
102+
QuirkBuilder(SE_MANUF_NAME, "W599001")
103+
.applies_to(SE_MANUF_NAME, "W599501")
104+
.applies_to(SE_MANUF_NAME, "755WSA")
105+
.replaces(SEBasic, endpoint_id=20)
106+
.replaces(SEAlarmConfiguration, endpoint_id=20)
107+
.enum(
108+
cluster_id=SEAlarmConfiguration.cluster_id,
109+
endpoint_id=20,
110+
attribute_name=SEAlarmConfiguration.AttributeDefs.se_led_brightness.name,
111+
translation_key="led_brightness",
112+
fallback_name="LED brightness",
113+
enum_class=SELEDBrightness,
114+
)
115+
.enum(
116+
cluster_id=SEAlarmConfiguration.cluster_id,
117+
endpoint_id=20,
118+
attribute_name=SEAlarmConfiguration.AttributeDefs.se_alarm_sound_level.name,
119+
translation_key="alarm_sound_level",
120+
fallback_name="Alarm sound level",
121+
enum_class=SEAlarmSoundLevel,
122+
)
123+
.enum(
124+
cluster_id=SEAlarmConfiguration.cluster_id,
125+
endpoint_id=20,
126+
attribute_name=SEAlarmConfiguration.AttributeDefs.se_alarm_sound_mode.name,
127+
translation_key="alarm_sound_mode",
128+
fallback_name="Alarm sound mode",
129+
enum_class=SEAlarmSoundMode,
130+
)
131+
.sensor(
132+
cluster_id=SEAlarmConfiguration.cluster_id,
133+
endpoint_id=20,
134+
attribute_name=SEAlarmConfiguration.AttributeDefs.se_lifetime.name,
135+
translation_key="lifetime",
136+
fallback_name="Lifetime",
137+
device_class=NumberDeviceClass.DURATION,
138+
unit=UnitOfTime.YEARS,
139+
multiplier=0.5,
140+
entity_type=EntityType.DIAGNOSTIC,
141+
)
142+
.number(
143+
cluster_id=SEAlarmConfiguration.cluster_id,
144+
endpoint_id=20,
145+
attribute_name=SEAlarmConfiguration.AttributeDefs.se_hush_duration.name,
146+
translation_key="hush_duration",
147+
fallback_name="Hush duration",
148+
device_class=NumberDeviceClass.DURATION,
149+
unit=UnitOfTime.MINUTES,
150+
min_value=5,
151+
max_value=15,
152+
step=1,
153+
)
154+
.switch(
155+
cluster_id=SEAlarmConfiguration.cluster_id,
156+
endpoint_id=20,
157+
attribute_name=SEAlarmConfiguration.AttributeDefs.se_test_mode.name,
158+
translation_key="test_mode",
159+
fallback_name="Test mode",
160+
)
161+
.switch(
162+
cluster_id=SEAlarmConfiguration.cluster_id,
163+
endpoint_id=20,
164+
attribute_name=SEAlarmConfiguration.AttributeDefs.se_no_disturb_mode.name,
165+
translation_key="no_disturb_mode",
166+
fallback_name="No disturb mode",
167+
)
168+
.add_to_registry()
169+
)

0 commit comments

Comments
 (0)