From ff8189743ec53cf2b6511b8bfb5fb8ebe6ae4bb5 Mon Sep 17 00:00:00 2001 From: cfulton Date: Mon, 16 Dec 2024 16:32:23 +1100 Subject: [PATCH 1/7] Added Clipsal Dimmer and 2A Switch with attributes --- zhaquirks/schneiderelectric/dimmers.py | 59 +++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/zhaquirks/schneiderelectric/dimmers.py b/zhaquirks/schneiderelectric/dimmers.py index 4621b1426a..80261ac3c1 100644 --- a/zhaquirks/schneiderelectric/dimmers.py +++ b/zhaquirks/schneiderelectric/dimmers.py @@ -1,6 +1,9 @@ """Schneider Electric dimmers and switches quirks.""" from zigpy.quirks.v2 import QuirkBuilder +from zigpy.quirks.v2.homeassistant import UnitOfTime +from zigpy.quirks.v2.homeassistant.number import NumberDeviceClass +from zigpy.zcl import ClusterType from zhaquirks.schneiderelectric import ( SE_MANUF_NAME, @@ -8,26 +11,78 @@ SEBasic, SEOnOff, SESpecific, + SEControlMode, ) ( + # Note: UNIDIM and DIMMER have unique setttings in Ballast Cluster. QuirkBuilder(SE_MANUF_NAME, "NHROTARY/DIMMER/1") .applies_to(SE_MANUF_NAME, "NHROTARY/UNIDIM/1") .applies_to(SE_MANUF_NAME, "NHPB/DIMMER/1") .applies_to(SE_MANUF_NAME, "NHPB/UNIDIM/1") + .applies_to(SE_MANUF_NAME, "CH/DIMMER/1") .replaces(SEBasic, endpoint_id=3) .replaces(SEBallast, endpoint_id=3) .replaces(SEOnOff, endpoint_id=3) .replaces(SEBasic, endpoint_id=21) + .replaces(SEOnOff, endpoint_id=21, cluster_type=ClusterType.Client) .replaces(SESpecific, endpoint_id=21) + .number( + attribute_name=SEOnOff.AttributeDefs.se_on_time_reload.name, + cluster_id=SEOnOff.cluster_id, + endpoint_id=3, + min_value=0x0, + max_value=0xFFFFFFFF, + step=1, + device_class=NumberDeviceClass.DURATION, + unit=UnitOfTime.SECONDS, + fallback_name="On Time Reload", + translation_key="on_time_reload") + .number( + attribute_name=SEBallast.AttributeDefs.min_level.name, + cluster_id=SEBallast.cluster_id, + endpoint_id=3, + min_value=1, + max_value=254, + step=1, + fallback_name="Min Light Level", + translation_key="min_level") + .number( + attribute_name=SEBallast.AttributeDefs.max_level.name, + cluster_id=SEBallast.cluster_id, + endpoint_id=3, + min_value=1, + max_value=254, + step=1, + fallback_name="Max Light Level", + translation_key="max_level") + .enum( + attribute_name=SEBallast.AttributeDefs.se_control_mode.name, + enum_class=SEControlMode, + cluster_id=SEBallast.cluster_id, + endpoint_id=3, + translation_key="control_mode", + fallback_name="Control Mode") .add_to_registry() ) ( QuirkBuilder(SE_MANUF_NAME, "NHPB/SWITCH/1") - .replaces(SEBasic) - .replaces(SEOnOff) + .applies_to(SE_MANUF_NAME, "CH2AX/SWITCH/1") + .replaces(SEBasic, endpoint_id=1) + .replaces(SEOnOff, endpoint_id=1) .replaces(SEBasic, endpoint_id=21) .replaces(SESpecific, endpoint_id=21) + .number( + attribute_name=SEOnOff.AttributeDefs.se_on_time_reload.name, + cluster_id=SEOnOff.cluster_id, + endpoint_id=1, + min_value=0x0, + max_value=0xFFFFFFFF, + step=1, + unit=UnitOfTime.SECONDS, + device_class=NumberDeviceClass.DURATION, + fallback_name="On Time Reload", + translation_key="on_time_reload") .add_to_registry() ) From acbde5a557723d59849635d75444727bbc04647f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 05:38:26 +0000 Subject: [PATCH 2/7] Apply pre-commit auto fixes --- zhaquirks/schneiderelectric/dimmers.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/zhaquirks/schneiderelectric/dimmers.py b/zhaquirks/schneiderelectric/dimmers.py index 80261ac3c1..20423a8d50 100644 --- a/zhaquirks/schneiderelectric/dimmers.py +++ b/zhaquirks/schneiderelectric/dimmers.py @@ -9,9 +9,9 @@ SE_MANUF_NAME, SEBallast, SEBasic, + SEControlMode, SEOnOff, SESpecific, - SEControlMode, ) ( @@ -37,7 +37,8 @@ device_class=NumberDeviceClass.DURATION, unit=UnitOfTime.SECONDS, fallback_name="On Time Reload", - translation_key="on_time_reload") + translation_key="on_time_reload", + ) .number( attribute_name=SEBallast.AttributeDefs.min_level.name, cluster_id=SEBallast.cluster_id, @@ -46,7 +47,8 @@ max_value=254, step=1, fallback_name="Min Light Level", - translation_key="min_level") + translation_key="min_level", + ) .number( attribute_name=SEBallast.AttributeDefs.max_level.name, cluster_id=SEBallast.cluster_id, @@ -55,14 +57,16 @@ max_value=254, step=1, fallback_name="Max Light Level", - translation_key="max_level") + translation_key="max_level", + ) .enum( attribute_name=SEBallast.AttributeDefs.se_control_mode.name, enum_class=SEControlMode, cluster_id=SEBallast.cluster_id, endpoint_id=3, translation_key="control_mode", - fallback_name="Control Mode") + fallback_name="Control Mode", + ) .add_to_registry() ) @@ -83,6 +87,7 @@ unit=UnitOfTime.SECONDS, device_class=NumberDeviceClass.DURATION, fallback_name="On Time Reload", - translation_key="on_time_reload") + translation_key="on_time_reload", + ) .add_to_registry() ) From 1fba3e2e4370260a51f0073cfa00f0dc0d7fcdec Mon Sep 17 00:00:00 2001 From: cfulton Date: Mon, 16 Dec 2024 16:41:03 +1100 Subject: [PATCH 3/7] Corrected spelling error in comment --- zhaquirks/schneiderelectric/dimmers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zhaquirks/schneiderelectric/dimmers.py b/zhaquirks/schneiderelectric/dimmers.py index 20423a8d50..e22ef5053a 100644 --- a/zhaquirks/schneiderelectric/dimmers.py +++ b/zhaquirks/schneiderelectric/dimmers.py @@ -15,7 +15,7 @@ ) ( - # Note: UNIDIM and DIMMER have unique setttings in Ballast Cluster. + # Note: UNIDIM and DIMMER have unique settings in Ballast Cluster. QuirkBuilder(SE_MANUF_NAME, "NHROTARY/DIMMER/1") .applies_to(SE_MANUF_NAME, "NHROTARY/UNIDIM/1") .applies_to(SE_MANUF_NAME, "NHPB/DIMMER/1") From af24acf0b3389c37fe9a45deff1a843099642c93 Mon Sep 17 00:00:00 2001 From: Chris Fulton Date: Tue, 17 Dec 2024 12:56:27 +1100 Subject: [PATCH 4/7] Removed unnecessary replacement in quirk --- zhaquirks/schneiderelectric/dimmers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/zhaquirks/schneiderelectric/dimmers.py b/zhaquirks/schneiderelectric/dimmers.py index e22ef5053a..c52919ab48 100644 --- a/zhaquirks/schneiderelectric/dimmers.py +++ b/zhaquirks/schneiderelectric/dimmers.py @@ -25,7 +25,6 @@ .replaces(SEBallast, endpoint_id=3) .replaces(SEOnOff, endpoint_id=3) .replaces(SEBasic, endpoint_id=21) - .replaces(SEOnOff, endpoint_id=21, cluster_type=ClusterType.Client) .replaces(SESpecific, endpoint_id=21) .number( attribute_name=SEOnOff.AttributeDefs.se_on_time_reload.name, From c6b51a697815b207625fa00660a7b1f8b0aece03 Mon Sep 17 00:00:00 2001 From: Chris Fulton Date: Tue, 17 Dec 2024 12:58:09 +1100 Subject: [PATCH 5/7] Added switch indication entity --- zhaquirks/schneiderelectric/dimmers.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/zhaquirks/schneiderelectric/dimmers.py b/zhaquirks/schneiderelectric/dimmers.py index c52919ab48..a0b67e49e6 100644 --- a/zhaquirks/schneiderelectric/dimmers.py +++ b/zhaquirks/schneiderelectric/dimmers.py @@ -12,6 +12,7 @@ SEControlMode, SEOnOff, SESpecific, + SESwitchIndication, ) ( @@ -66,6 +67,13 @@ translation_key="control_mode", fallback_name="Control Mode", ) + .enum( + attribute_name=SESpecific.AttributeDefs.se_switch_indication.name, + enum_class=SESwitchIndication, + cluster_id=SESpecific.cluster_id, + endpoint_id=21, + translation_key="switch_indication", + fallback_name="Switch Indication") .add_to_registry() ) @@ -88,5 +96,12 @@ fallback_name="On Time Reload", translation_key="on_time_reload", ) + .enum( + attribute_name=SESpecific.AttributeDefs.se_switch_indication.name, + enum_class=SESwitchIndication, + cluster_id=SESpecific.cluster_id, + endpoint_id=21, + translation_key="switch_indication", + fallback_name="Switch Indication") .add_to_registry() ) From e7aed8d141394f619816e29c8698fc56db701c20 Mon Sep 17 00:00:00 2001 From: Chris Fulton Date: Tue, 17 Dec 2024 13:03:17 +1100 Subject: [PATCH 6/7] Moved switches into own python file --- zhaquirks/schneiderelectric/dimmers.py | 31 +----------------- zhaquirks/schneiderelectric/switches.py | 43 +++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 30 deletions(-) create mode 100644 zhaquirks/schneiderelectric/switches.py diff --git a/zhaquirks/schneiderelectric/dimmers.py b/zhaquirks/schneiderelectric/dimmers.py index a0b67e49e6..03ab7f2d1f 100644 --- a/zhaquirks/schneiderelectric/dimmers.py +++ b/zhaquirks/schneiderelectric/dimmers.py @@ -1,4 +1,4 @@ -"""Schneider Electric dimmers and switches quirks.""" +"""Schneider Electric dimmers quirks.""" from zigpy.quirks.v2 import QuirkBuilder from zigpy.quirks.v2.homeassistant import UnitOfTime @@ -76,32 +76,3 @@ fallback_name="Switch Indication") .add_to_registry() ) - -( - QuirkBuilder(SE_MANUF_NAME, "NHPB/SWITCH/1") - .applies_to(SE_MANUF_NAME, "CH2AX/SWITCH/1") - .replaces(SEBasic, endpoint_id=1) - .replaces(SEOnOff, endpoint_id=1) - .replaces(SEBasic, endpoint_id=21) - .replaces(SESpecific, endpoint_id=21) - .number( - attribute_name=SEOnOff.AttributeDefs.se_on_time_reload.name, - cluster_id=SEOnOff.cluster_id, - endpoint_id=1, - min_value=0x0, - max_value=0xFFFFFFFF, - step=1, - unit=UnitOfTime.SECONDS, - device_class=NumberDeviceClass.DURATION, - fallback_name="On Time Reload", - translation_key="on_time_reload", - ) - .enum( - attribute_name=SESpecific.AttributeDefs.se_switch_indication.name, - enum_class=SESwitchIndication, - cluster_id=SESpecific.cluster_id, - endpoint_id=21, - translation_key="switch_indication", - fallback_name="Switch Indication") - .add_to_registry() -) diff --git a/zhaquirks/schneiderelectric/switches.py b/zhaquirks/schneiderelectric/switches.py new file mode 100644 index 0000000000..e825559c63 --- /dev/null +++ b/zhaquirks/schneiderelectric/switches.py @@ -0,0 +1,43 @@ +"""Schneider Electric switches quirks.""" + +from zigpy.quirks.v2 import QuirkBuilder +from zigpy.quirks.v2.homeassistant import UnitOfTime +from zigpy.quirks.v2.homeassistant.number import NumberDeviceClass +from zigpy.zcl import ClusterType + +from zhaquirks.schneiderelectric import ( + SE_MANUF_NAME, + SEBasic, + SEOnOff, + SESpecific, + SESwitchIndication, +) + +( + QuirkBuilder(SE_MANUF_NAME, "NHPB/SWITCH/1") + .applies_to(SE_MANUF_NAME, "CH2AX/SWITCH/1") + .replaces(SEBasic, endpoint_id=1) + .replaces(SEOnOff, endpoint_id=1) + .replaces(SEBasic, endpoint_id=21) + .replaces(SESpecific, endpoint_id=21) + .number( + attribute_name=SEOnOff.AttributeDefs.se_on_time_reload.name, + cluster_id=SEOnOff.cluster_id, + endpoint_id=1, + min_value=0x0, + max_value=0xFFFFFFFF, + step=1, + unit=UnitOfTime.SECONDS, + device_class=NumberDeviceClass.DURATION, + fallback_name="On Time Reload", + translation_key="on_time_reload", + ) + .enum( + attribute_name=SESpecific.AttributeDefs.se_switch_indication.name, + enum_class=SESwitchIndication, + cluster_id=SESpecific.cluster_id, + endpoint_id=21, + translation_key="switch_indication", + fallback_name="Switch Indication") + .add_to_registry() +) From bbd906ce89b01bb412226b982fd79985154377de Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 02:05:21 +0000 Subject: [PATCH 7/7] Apply pre-commit auto fixes --- zhaquirks/schneiderelectric/dimmers.py | 4 ++-- zhaquirks/schneiderelectric/switches.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/zhaquirks/schneiderelectric/dimmers.py b/zhaquirks/schneiderelectric/dimmers.py index 03ab7f2d1f..43d4e5a74d 100644 --- a/zhaquirks/schneiderelectric/dimmers.py +++ b/zhaquirks/schneiderelectric/dimmers.py @@ -3,7 +3,6 @@ from zigpy.quirks.v2 import QuirkBuilder from zigpy.quirks.v2.homeassistant import UnitOfTime from zigpy.quirks.v2.homeassistant.number import NumberDeviceClass -from zigpy.zcl import ClusterType from zhaquirks.schneiderelectric import ( SE_MANUF_NAME, @@ -73,6 +72,7 @@ cluster_id=SESpecific.cluster_id, endpoint_id=21, translation_key="switch_indication", - fallback_name="Switch Indication") + fallback_name="Switch Indication", + ) .add_to_registry() ) diff --git a/zhaquirks/schneiderelectric/switches.py b/zhaquirks/schneiderelectric/switches.py index e825559c63..5cd8c9071e 100644 --- a/zhaquirks/schneiderelectric/switches.py +++ b/zhaquirks/schneiderelectric/switches.py @@ -3,7 +3,6 @@ from zigpy.quirks.v2 import QuirkBuilder from zigpy.quirks.v2.homeassistant import UnitOfTime from zigpy.quirks.v2.homeassistant.number import NumberDeviceClass -from zigpy.zcl import ClusterType from zhaquirks.schneiderelectric import ( SE_MANUF_NAME, @@ -38,6 +37,7 @@ cluster_id=SESpecific.cluster_id, endpoint_id=21, translation_key="switch_indication", - fallback_name="Switch Indication") + fallback_name="Switch Indication", + ) .add_to_registry() )