"""Device handler for IKEA of Sweden TRADFRI Fyrtur blinds.""" from zigpy.profiles import zha from zigpy.quirks import CustomDevice from zigpy.zcl.clusters.closures import WindowCovering from zigpy.zcl.clusters.general import ( Basic, Groups, Identify, Ota, PollControl, PowerConfiguration, Scenes, ) from zigpy.zcl.clusters.lightlink import LightLink from zhaquirks.const import ( DEVICE_TYPE, ENDPOINTS, INPUT_CLUSTERS, MODELS_INFO, OUTPUT_CLUSTERS, PROFILE_ID, ) from zhaquirks.ikea import IKEA, IKEA_CLUSTER_ID, DoublingPowerConfigClusterIKEA class IkeaTradfriRollerBlinds(CustomDevice): """Custom device representing IKEA of Sweden TRADFRI Fyrtur blinds.""" signature = { # MODELS_INFO: [ (IKEA, "FYRTUR block-out roller blind"), (IKEA, "KADRILJ roller blind"), (IKEA, "TREDANSEN block-out cellul blind"), (IKEA, "PRAKTLYSING cellular blind"), ], ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE, INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, Identify.cluster_id, Groups.cluster_id, Scenes.cluster_id, PollControl.cluster_id, WindowCovering.cluster_id, LightLink.cluster_id, IKEA_CLUSTER_ID, ], OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id], } }, } replacement = { ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE, INPUT_CLUSTERS: [ Basic.cluster_id, DoublingPowerConfigClusterIKEA, Identify.cluster_id, Groups.cluster_id, Scenes.cluster_id, PollControl.cluster_id, WindowCovering.cluster_id, LightLink.cluster_id, IKEA_CLUSTER_ID, ], OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id], } } } class IkeaTradfriRollerBlinds2(CustomDevice): """Custom device representing IKEA of Sweden TRADFRI Fyrtur blinds.""" signature = { # MODELS_INFO: [ (IKEA, "FYRTUR block-out roller blind"), (IKEA, "KADRILJ roller blind"), ], ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE, INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, Identify.cluster_id, Groups.cluster_id, Scenes.cluster_id, PollControl.cluster_id, WindowCovering.cluster_id, LightLink.cluster_id, ], OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id], } }, } replacement = IkeaTradfriRollerBlinds.replacement class IkeaTradfriRollerBlinds3(CustomDevice): """Custom device representing IKEA of Sweden TRADFRI Fyrtur blinds.""" signature = { # MODELS_INFO: [ (IKEA, "FYRTUR block-out roller blind"), (IKEA, "KADRILJ roller blind"), (IKEA, "TREDANSEN block-out cellul blind"), (IKEA, "PRAKTLYSING cellular blind"), ], ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE, INPUT_CLUSTERS: [ Basic.cluster_id, PowerConfiguration.cluster_id, Identify.cluster_id, Groups.cluster_id, Scenes.cluster_id, PollControl.cluster_id, WindowCovering.cluster_id, LightLink.cluster_id, IKEA_CLUSTER_ID, ], OUTPUT_CLUSTERS: [ Identify.cluster_id, Ota.cluster_id, LightLink.cluster_id, ], } }, } replacement = { ENDPOINTS: { 1: { PROFILE_ID: zha.PROFILE_ID, DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE, INPUT_CLUSTERS: [ Basic.cluster_id, DoublingPowerConfigClusterIKEA, Identify.cluster_id, Groups.cluster_id, Scenes.cluster_id, PollControl.cluster_id, WindowCovering.cluster_id, LightLink.cluster_id, IKEA_CLUSTER_ID, ], OUTPUT_CLUSTERS: [ Identify.cluster_id, Ota.cluster_id, LightLink.cluster_id, ], } } }