prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  [BUG]Ikea FYRTUR blind and remote reporting wrong battery or no battery
  First 
  
  Blind:
  
  Never updates the battery automatically.
  
  However if you do a zigbee get cluster attribute for battery percentage remaining it does return a correct value.
  
  Remote:
  
  does update battery on its own.
  
  Both:
  
  both values are displayed correctly in the get attribute box but the sensor for the batteries figures are always half what it shows.
  ![zha cluster 2](https://user-images.githubusercontent.com/44187409/77225998-78782080-6b6c-11ea-908b-7518207189ad.JPG)
  ![zha cluster 1](https://user-images.githubusercontent.com/44187409/77226005-8332b580-6b6c-11ea-8a51-03e128548433.JPG)
  
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `zhaquirks/ikea/blinds.py`
  Content:
  ```
  1 """Device handler for IKEA of Sweden TRADFRI Fyrtur blinds."""
  2 from zigpy.profiles import zha
  3 from zigpy.quirks import CustomDevice
  4 from zigpy.zcl.clusters.closures import WindowCovering
  5 from zigpy.zcl.clusters.general import (
  6     Basic,
  7     Groups,
  8     Identify,
  9     Ota,
  10     PollControl,
  11     PowerConfiguration,
  12     Scenes,
  13 )
  14 from zigpy.zcl.clusters.lightlink import LightLink
  15 
  16 from . import IKEA
  17 from .. import DoublingPowerConfigurationCluster
  18 from ..const import (
  19     DEVICE_TYPE,
  20     ENDPOINTS,
  21     INPUT_CLUSTERS,
  22     MODELS_INFO,
  23     OUTPUT_CLUSTERS,
  24     PROFILE_ID,
  25 )
  26 
  27 IKEA_CLUSTER_ID = 0xFC7C  # decimal = 64636
  28 
  29 
  30 class IkeaTradfriRollerBlinds(CustomDevice):
  31     """Custom device representing IKEA of Sweden TRADFRI Fyrtur blinds."""
  32 
  33     signature = {
  34         # <SimpleDescriptor endpoint=1 profile=260 device_type=2080
  35         # device_version=1
  36         # input_clusters=[0, 1, 3, 4, 5, 32, 258, 4096]
  37         # output_clusters=[25, 4096]>
  38         MODELS_INFO: [
  39             (IKEA, "FYRTUR block-out roller blind"),
  40             (IKEA, "KADRILJ roller blind"),
  41         ],
  42         ENDPOINTS: {
  43             1: {
  44                 PROFILE_ID: zha.PROFILE_ID,
  45                 DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE,
  46                 INPUT_CLUSTERS: [
  47                     Basic.cluster_id,
  48                     PowerConfiguration.cluster_id,
  49                     Identify.cluster_id,
  50                     Groups.cluster_id,
  51                     Scenes.cluster_id,
  52                     PollControl.cluster_id,
  53                     WindowCovering.cluster_id,
  54                     LightLink.cluster_id,
  55                 ],
  56                 OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id],
  57             }
  58         },
  59     }
  60 
  61     replacement = {
  62         "endpoints": {
  63             1: {
  64                 "profile_id": zha.PROFILE_ID,
  65                 "device_type": zha.DeviceType.WINDOW_COVERING_DEVICE,
  66                 "input_clusters": [
  67                     Basic.cluster_id,
  68                     DoublingPowerConfigurationCluster,
  69                     Identify.cluster_id,
  70                     Groups.cluster_id,
  71                     Scenes.cluster_id,
  72                     PollControl.cluster_id,
  73                     WindowCovering.cluster_id,
  74                     LightLink.cluster_id,
  75                 ],
  76                 "output_clusters": [Ota.cluster_id, LightLink.cluster_id],
  77             }
  78         }
  79     }
  80
  ```
  
  Path: `zhaquirks/ikea/opencloseremote.py`
  Content:
  ```
  1 """Device handler for IKEA of Sweden TRADFRI remote control."""
  2 from zigpy.profiles import zha
  3 from zigpy.quirks import CustomDevice
  4 from zigpy.zcl.clusters.closures import WindowCovering
  5 from zigpy.zcl.clusters.general import (
  6     Alarms,
  7     Basic,
  8     Groups,
  9     Identify,
  10     LevelControl,
  11     OnOff,
  12     Ota,
  13     PollControl,
  14     PowerConfiguration,
  15 )
  16 from zigpy.zcl.clusters.lightlink import LightLink
  17 
  18 from . import IKEA
  19 from .. import DoublingPowerConfigurationCluster
  20 from ..const import (
  21     DEVICE_TYPE,
  22     ENDPOINTS,
  23     INPUT_CLUSTERS,
  24     MODELS_INFO,
  25     OUTPUT_CLUSTERS,
  26     PROFILE_ID,
  27 )
  28 
  29 IKEA_CLUSTER_ID = 0xFC7C  # decimal = 64636
  30 
  31 
  32 class IkeaTradfriOpenCloseRemote(CustomDevice):
  33     """Custom device representing IKEA of Sweden TRADFRI remote control."""
  34 
  35     signature = {
  36         MODELS_INFO: [("\x02KE", "TRADFRI open/close remote")],
  37         ENDPOINTS: {
  38             1: {
  39                 PROFILE_ID: zha.PROFILE_ID,
  40                 DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_CONTROLLER,
  41                 INPUT_CLUSTERS: [
  42                     Basic.cluster_id,
  43                     PowerConfiguration.cluster_id,
  44                     Identify.cluster_id,
  45                     Alarms.cluster_id,
  46                     PollControl.cluster_id,
  47                     LightLink.cluster_id,
  48                     IKEA_CLUSTER_ID,
  49                 ],
  50                 OUTPUT_CLUSTERS: [
  51                     Identify.cluster_id,
  52                     Groups.cluster_id,
  53                     OnOff.cluster_id,
  54                     LevelControl.cluster_id,
  55                     Ota.cluster_id,
  56                     WindowCovering.cluster_id,
  57                     LightLink.cluster_id,
  58                 ],
  59             }
  60         },
  61     }
  62 
  63     replacement = {
  64         MODELS_INFO: [(IKEA, "TRADFRI open/close remote")],
  65         ENDPOINTS: {
  66             1: {
  67                 PROFILE_ID: zha.PROFILE_ID,
  68                 DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_CONTROLLER,
  69                 INPUT_CLUSTERS: [
  70                     Basic.cluster_id,
  71                     DoublingPowerConfigurationCluster,
  72                     Identify.cluster_id,
  73                     Alarms.cluster_id,
  74                     PollControl.cluster_id,
  75                     LightLink.cluster_id,
  76                     IKEA_CLUSTER_ID,
  77                 ],
  78                 OUTPUT_CLUSTERS: [
  79                     Identify.cluster_id,
  80                     Groups.cluster_id,
  81                     OnOff.cluster_id,
  82                     LevelControl.cluster_id,
  83                     Ota.cluster_id,
  84                     WindowCovering.cluster_id,
  85                     LightLink.cluster_id,
  86                 ],
  87             }
  88         },
  89     }
  90
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/zhaquirks/ikea/blinds.py b/zhaquirks/ikea/blinds.py
  --- a/zhaquirks/ikea/blinds.py
  +++ b/zhaquirks/ikea/blinds.py
  @@ -31,9 +31,9 @@
       """Custom device representing IKEA of Sweden TRADFRI Fyrtur blinds."""
   
       signature = {
  -        # <SimpleDescriptor endpoint=1 profile=260 device_type=2080
  +        # <SimpleDescriptor endpoint=1 profile=260 device_type=514
           # device_version=1
  -        # input_clusters=[0, 1, 3, 4, 5, 32, 258, 4096]
  +        # input_clusters=[0, 1, 3, 4, 5, 32, 258, 4096, 64636]
           # output_clusters=[25, 4096]>
           MODELS_INFO: [
               (IKEA, "FYRTUR block-out roller blind"),
  @@ -52,6 +52,7 @@
                       PollControl.cluster_id,
                       WindowCovering.cluster_id,
                       LightLink.cluster_id,
  +                    IKEA_CLUSTER_ID,
                   ],
                   OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id],
               }
  @@ -59,11 +60,11 @@
       }
   
       replacement = {
  -        "endpoints": {
  +        ENDPOINTS: {
               1: {
  -                "profile_id": zha.PROFILE_ID,
  -                "device_type": zha.DeviceType.WINDOW_COVERING_DEVICE,
  -                "input_clusters": [
  +                PROFILE_ID: zha.PROFILE_ID,
  +                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE,
  +                INPUT_CLUSTERS: [
                       Basic.cluster_id,
                       DoublingPowerConfigurationCluster,
                       Identify.cluster_id,
  @@ -72,8 +73,9 @@
                       PollControl.cluster_id,
                       WindowCovering.cluster_id,
                       LightLink.cluster_id,
  +                    IKEA_CLUSTER_ID,
                   ],
  -                "output_clusters": [Ota.cluster_id, LightLink.cluster_id],
  +                OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id],
               }
           }
       }
  diff --git a/zhaquirks/ikea/opencloseremote.py b/zhaquirks/ikea/opencloseremote.py
  --- a/zhaquirks/ikea/opencloseremote.py
  +++ b/zhaquirks/ikea/opencloseremote.py
  @@ -33,7 +33,14 @@
       """Custom device representing IKEA of Sweden TRADFRI remote control."""
   
       signature = {
  -        MODELS_INFO: [("\x02KE", "TRADFRI open/close remote")],
  +        # <SimpleDescriptor endpoint=1 profile=260 device_type=515
  +        # device_version=1
  +        # input_clusters=[0, 1, 3, 9, 32, 4096, 64636]
  +        # output_clusters=[3, 4, 6, 8, 25, 258, 4096]>
  +        MODELS_INFO: [
  +            ("\x02KE", "TRADFRI open/close remote"),
  +            (IKEA, "TRADFRI open/close remote"),
  +        ],
           ENDPOINTS: {
               1: {
                   PROFILE_ID: zha.PROFILE_ID,
  
verification_info: {"golden_diff": "diff --git a/zhaquirks/ikea/blinds.py b/zhaquirks/ikea/blinds.py\n--- a/zhaquirks/ikea/blinds.py\n+++ b/zhaquirks/ikea/blinds.py\n@@ -31,9 +31,9 @@\n     \"\"\"Custom device representing IKEA of Sweden TRADFRI Fyrtur blinds.\"\"\"\n \n     signature = {\n-        # <SimpleDescriptor endpoint=1 profile=260 device_type=2080\n+        # <SimpleDescriptor endpoint=1 profile=260 device_type=514\n         # device_version=1\n-        # input_clusters=[0, 1, 3, 4, 5, 32, 258, 4096]\n+        # input_clusters=[0, 1, 3, 4, 5, 32, 258, 4096, 64636]\n         # output_clusters=[25, 4096]>\n         MODELS_INFO: [\n             (IKEA, \"FYRTUR block-out roller blind\"),\n@@ -52,6 +52,7 @@\n                     PollControl.cluster_id,\n                     WindowCovering.cluster_id,\n                     LightLink.cluster_id,\n+                    IKEA_CLUSTER_ID,\n                 ],\n                 OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id],\n             }\n@@ -59,11 +60,11 @@\n     }\n \n     replacement = {\n-        \"endpoints\": {\n+        ENDPOINTS: {\n             1: {\n-                \"profile_id\": zha.PROFILE_ID,\n-                \"device_type\": zha.DeviceType.WINDOW_COVERING_DEVICE,\n-                \"input_clusters\": [\n+                PROFILE_ID: zha.PROFILE_ID,\n+                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE,\n+                INPUT_CLUSTERS: [\n                     Basic.cluster_id,\n                     DoublingPowerConfigurationCluster,\n                     Identify.cluster_id,\n@@ -72,8 +73,9 @@\n                     PollControl.cluster_id,\n                     WindowCovering.cluster_id,\n                     LightLink.cluster_id,\n+                    IKEA_CLUSTER_ID,\n                 ],\n-                \"output_clusters\": [Ota.cluster_id, LightLink.cluster_id],\n+                OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id],\n             }\n         }\n     }\ndiff --git a/zhaquirks/ikea/opencloseremote.py b/zhaquirks/ikea/opencloseremote.py\n--- a/zhaquirks/ikea/opencloseremote.py\n+++ b/zhaquirks/ikea/opencloseremote.py\n@@ -33,7 +33,14 @@\n     \"\"\"Custom device representing IKEA of Sweden TRADFRI remote control.\"\"\"\n \n     signature = {\n-        MODELS_INFO: [(\"\\x02KE\", \"TRADFRI open/close remote\")],\n+        # <SimpleDescriptor endpoint=1 profile=260 device_type=515\n+        # device_version=1\n+        # input_clusters=[0, 1, 3, 9, 32, 4096, 64636]\n+        # output_clusters=[3, 4, 6, 8, 25, 258, 4096]>\n+        MODELS_INFO: [\n+            (\"\\x02KE\", \"TRADFRI open/close remote\"),\n+            (IKEA, \"TRADFRI open/close remote\"),\n+        ],\n         ENDPOINTS: {\n             1: {\n                 PROFILE_ID: zha.PROFILE_ID,\n", "issue": "[BUG]Ikea FYRTUR blind and remote reporting wrong battery or no battery\nFirst \r\n\r\nBlind:\r\n\r\nNever updates the battery automatically.\r\n\r\nHowever if you do a zigbee get cluster attribute for battery percentage remaining it does return a correct value.\r\n\r\nRemote:\r\n\r\ndoes update battery on its own.\r\n\r\nBoth:\r\n\r\nboth values are displayed correctly in the get attribute box but the sensor for the batteries figures are always half what it shows.\r\n![zha cluster 2](https://user-images.githubusercontent.com/44187409/77225998-78782080-6b6c-11ea-908b-7518207189ad.JPG)\r\n![zha cluster 1](https://user-images.githubusercontent.com/44187409/77226005-8332b580-6b6c-11ea-8a51-03e128548433.JPG)\r\n\r\n\n", "before_files": [{"content": "\"\"\"Device handler for IKEA of Sweden TRADFRI Fyrtur blinds.\"\"\"\nfrom zigpy.profiles import zha\nfrom zigpy.quirks import CustomDevice\nfrom zigpy.zcl.clusters.closures import WindowCovering\nfrom zigpy.zcl.clusters.general import (\n    Basic,\n    Groups,\n    Identify,\n    Ota,\n    PollControl,\n    PowerConfiguration,\n    Scenes,\n)\nfrom zigpy.zcl.clusters.lightlink import LightLink\n\nfrom . import IKEA\nfrom .. import DoublingPowerConfigurationCluster\nfrom ..const import (\n    DEVICE_TYPE,\n    ENDPOINTS,\n    INPUT_CLUSTERS,\n    MODELS_INFO,\n    OUTPUT_CLUSTERS,\n    PROFILE_ID,\n)\n\nIKEA_CLUSTER_ID = 0xFC7C  # decimal = 64636\n\n\nclass IkeaTradfriRollerBlinds(CustomDevice):\n    \"\"\"Custom device representing IKEA of Sweden TRADFRI Fyrtur blinds.\"\"\"\n\n    signature = {\n        # <SimpleDescriptor endpoint=1 profile=260 device_type=2080\n        # device_version=1\n        # input_clusters=[0, 1, 3, 4, 5, 32, 258, 4096]\n        # output_clusters=[25, 4096]>\n        MODELS_INFO: [\n            (IKEA, \"FYRTUR block-out roller blind\"),\n            (IKEA, \"KADRILJ roller blind\"),\n        ],\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    PowerConfiguration.cluster_id,\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    Scenes.cluster_id,\n                    PollControl.cluster_id,\n                    WindowCovering.cluster_id,\n                    LightLink.cluster_id,\n                ],\n                OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id],\n            }\n        },\n    }\n\n    replacement = {\n        \"endpoints\": {\n            1: {\n                \"profile_id\": zha.PROFILE_ID,\n                \"device_type\": zha.DeviceType.WINDOW_COVERING_DEVICE,\n                \"input_clusters\": [\n                    Basic.cluster_id,\n                    DoublingPowerConfigurationCluster,\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    Scenes.cluster_id,\n                    PollControl.cluster_id,\n                    WindowCovering.cluster_id,\n                    LightLink.cluster_id,\n                ],\n                \"output_clusters\": [Ota.cluster_id, LightLink.cluster_id],\n            }\n        }\n    }\n", "path": "zhaquirks/ikea/blinds.py"}, {"content": "\"\"\"Device handler for IKEA of Sweden TRADFRI remote control.\"\"\"\nfrom zigpy.profiles import zha\nfrom zigpy.quirks import CustomDevice\nfrom zigpy.zcl.clusters.closures import WindowCovering\nfrom zigpy.zcl.clusters.general import (\n    Alarms,\n    Basic,\n    Groups,\n    Identify,\n    LevelControl,\n    OnOff,\n    Ota,\n    PollControl,\n    PowerConfiguration,\n)\nfrom zigpy.zcl.clusters.lightlink import LightLink\n\nfrom . import IKEA\nfrom .. import DoublingPowerConfigurationCluster\nfrom ..const import (\n    DEVICE_TYPE,\n    ENDPOINTS,\n    INPUT_CLUSTERS,\n    MODELS_INFO,\n    OUTPUT_CLUSTERS,\n    PROFILE_ID,\n)\n\nIKEA_CLUSTER_ID = 0xFC7C  # decimal = 64636\n\n\nclass IkeaTradfriOpenCloseRemote(CustomDevice):\n    \"\"\"Custom device representing IKEA of Sweden TRADFRI remote control.\"\"\"\n\n    signature = {\n        MODELS_INFO: [(\"\\x02KE\", \"TRADFRI open/close remote\")],\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_CONTROLLER,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    PowerConfiguration.cluster_id,\n                    Identify.cluster_id,\n                    Alarms.cluster_id,\n                    PollControl.cluster_id,\n                    LightLink.cluster_id,\n                    IKEA_CLUSTER_ID,\n                ],\n                OUTPUT_CLUSTERS: [\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    OnOff.cluster_id,\n                    LevelControl.cluster_id,\n                    Ota.cluster_id,\n                    WindowCovering.cluster_id,\n                    LightLink.cluster_id,\n                ],\n            }\n        },\n    }\n\n    replacement = {\n        MODELS_INFO: [(IKEA, \"TRADFRI open/close remote\")],\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_CONTROLLER,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    DoublingPowerConfigurationCluster,\n                    Identify.cluster_id,\n                    Alarms.cluster_id,\n                    PollControl.cluster_id,\n                    LightLink.cluster_id,\n                    IKEA_CLUSTER_ID,\n                ],\n                OUTPUT_CLUSTERS: [\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    OnOff.cluster_id,\n                    LevelControl.cluster_id,\n                    Ota.cluster_id,\n                    WindowCovering.cluster_id,\n                    LightLink.cluster_id,\n                ],\n            }\n        },\n    }\n", "path": "zhaquirks/ikea/opencloseremote.py"}], "after_files": [{"content": "\"\"\"Device handler for IKEA of Sweden TRADFRI Fyrtur blinds.\"\"\"\nfrom zigpy.profiles import zha\nfrom zigpy.quirks import CustomDevice\nfrom zigpy.zcl.clusters.closures import WindowCovering\nfrom zigpy.zcl.clusters.general import (\n    Basic,\n    Groups,\n    Identify,\n    Ota,\n    PollControl,\n    PowerConfiguration,\n    Scenes,\n)\nfrom zigpy.zcl.clusters.lightlink import LightLink\n\nfrom . import IKEA\nfrom .. import DoublingPowerConfigurationCluster\nfrom ..const import (\n    DEVICE_TYPE,\n    ENDPOINTS,\n    INPUT_CLUSTERS,\n    MODELS_INFO,\n    OUTPUT_CLUSTERS,\n    PROFILE_ID,\n)\n\nIKEA_CLUSTER_ID = 0xFC7C  # decimal = 64636\n\n\nclass IkeaTradfriRollerBlinds(CustomDevice):\n    \"\"\"Custom device representing IKEA of Sweden TRADFRI Fyrtur blinds.\"\"\"\n\n    signature = {\n        # <SimpleDescriptor endpoint=1 profile=260 device_type=514\n        # device_version=1\n        # input_clusters=[0, 1, 3, 4, 5, 32, 258, 4096, 64636]\n        # output_clusters=[25, 4096]>\n        MODELS_INFO: [\n            (IKEA, \"FYRTUR block-out roller blind\"),\n            (IKEA, \"KADRILJ roller blind\"),\n        ],\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    PowerConfiguration.cluster_id,\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    Scenes.cluster_id,\n                    PollControl.cluster_id,\n                    WindowCovering.cluster_id,\n                    LightLink.cluster_id,\n                    IKEA_CLUSTER_ID,\n                ],\n                OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id],\n            }\n        },\n    }\n\n    replacement = {\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    DoublingPowerConfigurationCluster,\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    Scenes.cluster_id,\n                    PollControl.cluster_id,\n                    WindowCovering.cluster_id,\n                    LightLink.cluster_id,\n                    IKEA_CLUSTER_ID,\n                ],\n                OUTPUT_CLUSTERS: [Ota.cluster_id, LightLink.cluster_id],\n            }\n        }\n    }\n", "path": "zhaquirks/ikea/blinds.py"}, {"content": "\"\"\"Device handler for IKEA of Sweden TRADFRI remote control.\"\"\"\nfrom zigpy.profiles import zha\nfrom zigpy.quirks import CustomDevice\nfrom zigpy.zcl.clusters.closures import WindowCovering\nfrom zigpy.zcl.clusters.general import (\n    Alarms,\n    Basic,\n    Groups,\n    Identify,\n    LevelControl,\n    OnOff,\n    Ota,\n    PollControl,\n    PowerConfiguration,\n)\nfrom zigpy.zcl.clusters.lightlink import LightLink\n\nfrom . import IKEA\nfrom .. import DoublingPowerConfigurationCluster\nfrom ..const import (\n    DEVICE_TYPE,\n    ENDPOINTS,\n    INPUT_CLUSTERS,\n    MODELS_INFO,\n    OUTPUT_CLUSTERS,\n    PROFILE_ID,\n)\n\nIKEA_CLUSTER_ID = 0xFC7C  # decimal = 64636\n\n\nclass IkeaTradfriOpenCloseRemote(CustomDevice):\n    \"\"\"Custom device representing IKEA of Sweden TRADFRI remote control.\"\"\"\n\n    signature = {\n        # <SimpleDescriptor endpoint=1 profile=260 device_type=515\n        # device_version=1\n        # input_clusters=[0, 1, 3, 9, 32, 4096, 64636]\n        # output_clusters=[3, 4, 6, 8, 25, 258, 4096]>\n        MODELS_INFO: [\n            (\"\\x02KE\", \"TRADFRI open/close remote\"),\n            (IKEA, \"TRADFRI open/close remote\"),\n        ],\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_CONTROLLER,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    PowerConfiguration.cluster_id,\n                    Identify.cluster_id,\n                    Alarms.cluster_id,\n                    PollControl.cluster_id,\n                    LightLink.cluster_id,\n                    IKEA_CLUSTER_ID,\n                ],\n                OUTPUT_CLUSTERS: [\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    OnOff.cluster_id,\n                    LevelControl.cluster_id,\n                    Ota.cluster_id,\n                    WindowCovering.cluster_id,\n                    LightLink.cluster_id,\n                ],\n            }\n        },\n    }\n\n    replacement = {\n        MODELS_INFO: [(IKEA, \"TRADFRI open/close remote\")],\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_CONTROLLER,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    DoublingPowerConfigurationCluster,\n                    Identify.cluster_id,\n                    Alarms.cluster_id,\n                    PollControl.cluster_id,\n                    LightLink.cluster_id,\n                    IKEA_CLUSTER_ID,\n                ],\n                OUTPUT_CLUSTERS: [\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    OnOff.cluster_id,\n                    LevelControl.cluster_id,\n                    Ota.cluster_id,\n                    WindowCovering.cluster_id,\n                    LightLink.cluster_id,\n                ],\n            }\n        },\n    }\n", "path": "zhaquirks/ikea/opencloseremote.py"}]}