Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 173 additions & 0 deletions zhaquirks/schneiderelectric/smoke.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
"""Scneider Electric Smoke Alarm."""

from typing import Final

from zigpy.quirks import CustomCluster
from zigpy.quirks.v2 import EntityType, QuirkBuilder, ReportingConfig
from zigpy.quirks.v2.homeassistant import UnitOfTime
from zigpy.quirks.v2.homeassistant.number import NumberDeviceClass
import zigpy.types as t
from zigpy.zcl.foundation import ZCLAttributeDef

from zhaquirks.schneiderelectric import SE_MANUF_NAME, SEBasic


class SELEDBrightness(t.enum8):
"""LED brightness."""

Min = 0x00
Max = 0x01


class SEAlarmSoundLevel(t.enum8):
"""Alarm sound level."""

Min = 0x00
Max = 0x01


class SEAlarmSoundMode(t.enum8):
"""Alarm sound mode."""

PressureLow = 0x00
PressureMid = 0x01
PressureHigh = 0x02


class SEAlarmConfiguration(CustomCluster):
"""Schneider Electric Alarm Configuration cluster."""

cluster_id = 0xFC04
name = "SEAlarmConfiguration"

class AttributeDefs(CustomCluster.AttributeDefs):
"""Attribute definitions."""

se_led_brightness: Final = ZCLAttributeDef(
id=0x0000,
type=SELEDBrightness,
access="rw",
is_manufacturer_specific=True,
)
se_alarm_sound_level: Final = ZCLAttributeDef(
id=0x0001,
type=SEAlarmSoundLevel,
access="rw",
is_manufacturer_specific=True,
)
se_alarm_sound_mode: Final = ZCLAttributeDef(
id=0x0002,
type=SEAlarmSoundMode,
access="rw",
is_manufacturer_specific=True,
)
se_lifetime: Final = ZCLAttributeDef(
id=0x0003,
type=t.uint8_t,
access="r",
is_manufacturer_specific=True,
)
se_hush_duration: Final = ZCLAttributeDef(
id=0x0004,
type=t.uint8_t,
access="rw",
is_manufacturer_specific=True,
)
se_test_mode: Final = ZCLAttributeDef(
id=0x0005,
type=t.Bool,
access="rw",
is_manufacturer_specific=True,
)
se_silence_alarm: Final = ZCLAttributeDef(
id=0x0006,
type=t.Bool,
access="rw",
is_manufacturer_specific=True,
)
se_cluster_revision: Final = ZCLAttributeDef(
id=0xFFFD,
type=t.uint16_t,
access="r",
is_manufacturer_specific=True,
)


(
QuirkBuilder(SE_MANUF_NAME, "W599001")
.applies_to(SE_MANUF_NAME, "W599501")
.applies_to(SE_MANUF_NAME, "755WSA")
.replaces(SEBasic, endpoint_id=20)
.replaces(SEAlarmConfiguration, endpoint_id=20)
.enum(
cluster_id=SEAlarmConfiguration.cluster_id,
endpoint_id=20,
attribute_name=SEAlarmConfiguration.AttributeDefs.se_led_brightness.name,
translation_key="led_brightness",
fallback_name="LED brightness",
enum_class=SELEDBrightness,
)
.enum(
cluster_id=SEAlarmConfiguration.cluster_id,
endpoint_id=20,
attribute_name=SEAlarmConfiguration.AttributeDefs.se_alarm_sound_level.name,
translation_key="alarm_sound_level",
fallback_name="Alarm sound level",
enum_class=SEAlarmSoundLevel,
)
.enum(
cluster_id=SEAlarmConfiguration.cluster_id,
endpoint_id=20,
attribute_name=SEAlarmConfiguration.AttributeDefs.se_alarm_sound_mode.name,
translation_key="alarm_sound_mode",
fallback_name="Alarm sound mode",
enum_class=SEAlarmSoundMode,
)
.sensor(
cluster_id=SEAlarmConfiguration.cluster_id,
endpoint_id=20,
attribute_name=SEAlarmConfiguration.AttributeDefs.se_lifetime.name,
translation_key="lifetime",
fallback_name="Lifetime",
unit=UnitOfTime.YEARS,
multiplier=0.5,
entity_type=EntityType.DIAGNOSTIC,
)
.number(
cluster_id=SEAlarmConfiguration.cluster_id,
endpoint_id=20,
attribute_name=SEAlarmConfiguration.AttributeDefs.se_hush_duration.name,
translation_key="hush_duration",
fallback_name="Hush duration",
device_class=NumberDeviceClass.DURATION,
unit=UnitOfTime.MINUTES,
min_value=5,
max_value=15,
step=1,
)
.switch(
cluster_id=SEAlarmConfiguration.cluster_id,
endpoint_id=20,
attribute_name=SEAlarmConfiguration.AttributeDefs.se_test_mode.name,
translation_key="test_mode",
fallback_name="Test mode",
reporting_config=ReportingConfig(
min_interval=0,
max_interval=0,
reportable_change=1,
),
)
.switch(
cluster_id=SEAlarmConfiguration.cluster_id,
endpoint_id=20,
attribute_name=SEAlarmConfiguration.AttributeDefs.se_silence_alarm.name,
translation_key="silence_alarm",
fallback_name="Silence alarm",
reporting_config=ReportingConfig(
min_interval=0,
max_interval=0,
reportable_change=1,
),
)
.add_to_registry()
)
Loading