prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  [Device Support Request] Add support for updated Legrand Dimmer switch w/o neutral
  **Is your feature request related to a problem? Please describe.**
  
  I've updated the firmware of my Legrand Dimmer switch w/o neutral for which support was added in https://github.com/zigpy/zha-device-handlers/issues/299
  
  Before OTA upgrade:
  - app_version: 0
  - hw_version: 1
  - stack_version: 64
  - sw_build_id: 01a (26)
  - zcl_version: 2
  - Firmware: 0x03401a00
  
  After OTA upgrade (2020-06-08):
  - app_version: 0
  - hw_version: 6
  - stack_version: 66
  - sw_build_id: 02b (43)
  - zcl_version: 2
  - Firmware: 0x002b4203
  
  And now it reports a new `GreenPowerProxy` endpoint with id 242:
  
  ```
  {
    "node_descriptor": "<NodeDescriptor byte1=17 byte2=64 mac_capability_flags=142 manufacturer_code=4129 maximum_buffer_size=89 maximum_incoming_transfer_size=63 server_mask=10752 maximum_outgoing_transfer_size=63 descriptor_capability_field=0>",
    "endpoints": {
      "1": {
        "profile_id": 260,
        "device_type": "0x0100",
        "in_clusters": [
          "0x0000",
          "0x0003",
          "0x0004",
          "0x0005",
          "0x0006",
          "0x0008",
          "0x000f",
          "0xfc01"
        ],
        "out_clusters": [
          "0x0000",
          "0x0019",
          "0xfc01"
        ]
      },
      "242": {
        "profile_id": 41440,
        "device_type": "0x0061",
        "in_clusters": [],
        "out_clusters": [
          "0x0021"
        ]
      }
    },
    "manufacturer": " Legrand",
    "model": " Dimmer switch w/o neutral",
    "class": "zigpy.device.Device"
  }
  ```
  
  
  The issue is that prevents the quirk from matching:
  
  ```
  2020-06-17 06:45:05 DEBUG (MainThread) [zigpy.quirks.registry] Checking quirks for  Legrand  Dimmer switch w/o neutral (00:04:74:00:00:8b:0e:a2)
  2020-06-17 06:45:05 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.legrand.dimmer.DimmerWithoutNeutral'>
  2020-06-17 06:45:05 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1} {1, 242}
  ```
  
  **Describe the solution you'd like**
  
  Could the quirk be updated to also support new firmwares?
  
  **Device signature - this can be acquired by removing the device from ZHA and pairing it again from the add devices screen. Be sure to add the entire content of the log panel after pairing the device to a code block below this line.**
  
  TODO
  
  **Additional context**
  
  ![image](https://user-images.githubusercontent.com/318490/84860402-3ed18b80-b06f-11ea-84e0-79d3e70f140b.png)
  
  --- 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/legrand/dimmer.py`
  Content:
  ```
  1 """Device handler for Legrand Dimmer switch w/o neutral."""
  2 from zigpy.profiles import zha
  3 from zigpy.quirks import CustomCluster, CustomDevice
  4 import zigpy.types as t
  5 from zigpy.zcl.clusters.general import (
  6     Basic,
  7     BinaryInput,
  8     Groups,
  9     Identify,
  10     LevelControl,
  11     OnOff,
  12     Ota,
  13     Scenes,
  14 )
  15 from zigpy.zcl.clusters.manufacturer_specific import ManufacturerSpecificCluster
  16 
  17 from . import LEGRAND
  18 from ..const import (
  19     DEVICE_TYPE,
  20     ENDPOINTS,
  21     INPUT_CLUSTERS,
  22     MODELS_INFO,
  23     OUTPUT_CLUSTERS,
  24     PROFILE_ID,
  25 )
  26 
  27 MANUFACTURER_SPECIFIC_CLUSTER_ID = 0xFC01  # decimal = 64513
  28 
  29 
  30 class LegrandCluster(CustomCluster, ManufacturerSpecificCluster):
  31     """LegrandCluster."""
  32 
  33     cluster_id = MANUFACTURER_SPECIFIC_CLUSTER_ID
  34     name = "LegrandCluster"
  35     ep_attribute = "legrand_cluster"
  36     attributes = {
  37         0x0000: ("dimmer", t.data16),
  38         0x0001: ("led_dark", t.Bool),
  39         0x0002: ("led_on", t.Bool),
  40     }
  41     server_commands = {}
  42     client_commands = {}
  43 
  44 
  45 class DimmerWithoutNeutral(CustomDevice):
  46     """Dimmer switch w/o neutral."""
  47 
  48     signature = {
  49         #  <SimpleDescriptor endpoint=1 profile=260 device_type=256
  50         # device_version=1
  51         # input_clusters=[0, 3, 4, 8, 6, 5, 15, 64513]
  52         # output_clusters=[0, 64513, 25]>
  53         MODELS_INFO: [(f" {LEGRAND}", " Dimmer switch w/o neutral")],
  54         ENDPOINTS: {
  55             1: {
  56                 PROFILE_ID: zha.PROFILE_ID,
  57                 DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
  58                 INPUT_CLUSTERS: [
  59                     Basic.cluster_id,
  60                     Identify.cluster_id,
  61                     Groups.cluster_id,
  62                     OnOff.cluster_id,
  63                     LevelControl.cluster_id,
  64                     Scenes.cluster_id,
  65                     BinaryInput.cluster_id,
  66                     MANUFACTURER_SPECIFIC_CLUSTER_ID,
  67                 ],
  68                 OUTPUT_CLUSTERS: [
  69                     Basic.cluster_id,
  70                     MANUFACTURER_SPECIFIC_CLUSTER_ID,
  71                     Ota.cluster_id,
  72                 ],
  73             }
  74         },
  75     }
  76 
  77     replacement = {
  78         ENDPOINTS: {
  79             1: {
  80                 PROFILE_ID: zha.PROFILE_ID,
  81                 DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
  82                 INPUT_CLUSTERS: [
  83                     Basic.cluster_id,
  84                     Identify.cluster_id,
  85                     Groups.cluster_id,
  86                     OnOff.cluster_id,
  87                     LevelControl.cluster_id,
  88                     Scenes.cluster_id,
  89                     BinaryInput.cluster_id,
  90                     LegrandCluster,
  91                 ],
  92                 OUTPUT_CLUSTERS: [Basic.cluster_id, LegrandCluster, Ota.cluster_id],
  93             }
  94         }
  95     }
  96
  ```
  --- 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/legrand/dimmer.py b/zhaquirks/legrand/dimmer.py
  --- a/zhaquirks/legrand/dimmer.py
  +++ b/zhaquirks/legrand/dimmer.py
  @@ -93,3 +93,42 @@
               }
           }
       }
  +
  +
  +class DimmerWithoutNeutral2(DimmerWithoutNeutral):
  +    """Dimmer switch w/o neutral 2."""
  +
  +    signature = {
  +        #  <SimpleDescriptor endpoint=1 profile=260 device_type=256
  +        # device_version=1
  +        # input_clusters=[0, 3, 4, 8, 6, 5, 15, 64513]
  +        # output_clusters=[0, 64513, 25]>
  +        MODELS_INFO: [(f" {LEGRAND}", " Dimmer switch w/o neutral")],
  +        ENDPOINTS: {
  +            1: {
  +                PROFILE_ID: zha.PROFILE_ID,
  +                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
  +                INPUT_CLUSTERS: [
  +                    Basic.cluster_id,
  +                    Identify.cluster_id,
  +                    Groups.cluster_id,
  +                    OnOff.cluster_id,
  +                    LevelControl.cluster_id,
  +                    Scenes.cluster_id,
  +                    BinaryInput.cluster_id,
  +                    MANUFACTURER_SPECIFIC_CLUSTER_ID,
  +                ],
  +                OUTPUT_CLUSTERS: [
  +                    Basic.cluster_id,
  +                    MANUFACTURER_SPECIFIC_CLUSTER_ID,
  +                    Ota.cluster_id,
  +                ],
  +            },
  +            242: {
  +                PROFILE_ID: 41440,
  +                DEVICE_TYPE: 0x0061,
  +                INPUT_CLUSTERS: [],
  +                OUTPUT_CLUSTERS: [0x0021],
  +            },
  +        },
  +    }
  
verification_info: {"golden_diff": "diff --git a/zhaquirks/legrand/dimmer.py b/zhaquirks/legrand/dimmer.py\n--- a/zhaquirks/legrand/dimmer.py\n+++ b/zhaquirks/legrand/dimmer.py\n@@ -93,3 +93,42 @@\n             }\n         }\n     }\n+\n+\n+class DimmerWithoutNeutral2(DimmerWithoutNeutral):\n+    \"\"\"Dimmer switch w/o neutral 2.\"\"\"\n+\n+    signature = {\n+        #  <SimpleDescriptor endpoint=1 profile=260 device_type=256\n+        # device_version=1\n+        # input_clusters=[0, 3, 4, 8, 6, 5, 15, 64513]\n+        # output_clusters=[0, 64513, 25]>\n+        MODELS_INFO: [(f\" {LEGRAND}\", \" Dimmer switch w/o neutral\")],\n+        ENDPOINTS: {\n+            1: {\n+                PROFILE_ID: zha.PROFILE_ID,\n+                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,\n+                INPUT_CLUSTERS: [\n+                    Basic.cluster_id,\n+                    Identify.cluster_id,\n+                    Groups.cluster_id,\n+                    OnOff.cluster_id,\n+                    LevelControl.cluster_id,\n+                    Scenes.cluster_id,\n+                    BinaryInput.cluster_id,\n+                    MANUFACTURER_SPECIFIC_CLUSTER_ID,\n+                ],\n+                OUTPUT_CLUSTERS: [\n+                    Basic.cluster_id,\n+                    MANUFACTURER_SPECIFIC_CLUSTER_ID,\n+                    Ota.cluster_id,\n+                ],\n+            },\n+            242: {\n+                PROFILE_ID: 41440,\n+                DEVICE_TYPE: 0x0061,\n+                INPUT_CLUSTERS: [],\n+                OUTPUT_CLUSTERS: [0x0021],\n+            },\n+        },\n+    }\n", "issue": "[Device Support Request] Add support for updated Legrand Dimmer switch w/o neutral\n**Is your feature request related to a problem? Please describe.**\r\n\r\nI've updated the firmware of my Legrand Dimmer switch w/o neutral for which support was added in https://github.com/zigpy/zha-device-handlers/issues/299\r\n\r\nBefore OTA upgrade:\r\n- app_version: 0\r\n- hw_version: 1\r\n- stack_version: 64\r\n- sw_build_id: 01a (26)\r\n- zcl_version: 2\r\n- Firmware: 0x03401a00\r\n\r\nAfter OTA upgrade (2020-06-08):\r\n- app_version: 0\r\n- hw_version: 6\r\n- stack_version: 66\r\n- sw_build_id: 02b (43)\r\n- zcl_version: 2\r\n- Firmware: 0x002b4203\r\n\r\nAnd now it reports a new `GreenPowerProxy` endpoint with id 242:\r\n\r\n```\r\n{\r\n  \"node_descriptor\": \"<NodeDescriptor byte1=17 byte2=64 mac_capability_flags=142 manufacturer_code=4129 maximum_buffer_size=89 maximum_incoming_transfer_size=63 server_mask=10752 maximum_outgoing_transfer_size=63 descriptor_capability_field=0>\",\r\n  \"endpoints\": {\r\n    \"1\": {\r\n      \"profile_id\": 260,\r\n      \"device_type\": \"0x0100\",\r\n      \"in_clusters\": [\r\n        \"0x0000\",\r\n        \"0x0003\",\r\n        \"0x0004\",\r\n        \"0x0005\",\r\n        \"0x0006\",\r\n        \"0x0008\",\r\n        \"0x000f\",\r\n        \"0xfc01\"\r\n      ],\r\n      \"out_clusters\": [\r\n        \"0x0000\",\r\n        \"0x0019\",\r\n        \"0xfc01\"\r\n      ]\r\n    },\r\n    \"242\": {\r\n      \"profile_id\": 41440,\r\n      \"device_type\": \"0x0061\",\r\n      \"in_clusters\": [],\r\n      \"out_clusters\": [\r\n        \"0x0021\"\r\n      ]\r\n    }\r\n  },\r\n  \"manufacturer\": \" Legrand\",\r\n  \"model\": \" Dimmer switch w/o neutral\",\r\n  \"class\": \"zigpy.device.Device\"\r\n}\r\n```\r\n\r\n\r\nThe issue is that prevents the quirk from matching:\r\n\r\n```\r\n2020-06-17 06:45:05 DEBUG (MainThread) [zigpy.quirks.registry] Checking quirks for  Legrand  Dimmer switch w/o neutral (00:04:74:00:00:8b:0e:a2)\r\n2020-06-17 06:45:05 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'zhaquirks.legrand.dimmer.DimmerWithoutNeutral'>\r\n2020-06-17 06:45:05 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1} {1, 242}\r\n```\r\n\r\n**Describe the solution you'd like**\r\n\r\nCould the quirk be updated to also support new firmwares?\r\n\r\n**Device signature - this can be acquired by removing the device from ZHA and pairing it again from the add devices screen. Be sure to add the entire content of the log panel after pairing the device to a code block below this line.**\r\n\r\nTODO\r\n\r\n**Additional context**\r\n\r\n![image](https://user-images.githubusercontent.com/318490/84860402-3ed18b80-b06f-11ea-84e0-79d3e70f140b.png)\n", "before_files": [{"content": "\"\"\"Device handler for Legrand Dimmer switch w/o neutral.\"\"\"\nfrom zigpy.profiles import zha\nfrom zigpy.quirks import CustomCluster, CustomDevice\nimport zigpy.types as t\nfrom zigpy.zcl.clusters.general import (\n    Basic,\n    BinaryInput,\n    Groups,\n    Identify,\n    LevelControl,\n    OnOff,\n    Ota,\n    Scenes,\n)\nfrom zigpy.zcl.clusters.manufacturer_specific import ManufacturerSpecificCluster\n\nfrom . import LEGRAND\nfrom ..const import (\n    DEVICE_TYPE,\n    ENDPOINTS,\n    INPUT_CLUSTERS,\n    MODELS_INFO,\n    OUTPUT_CLUSTERS,\n    PROFILE_ID,\n)\n\nMANUFACTURER_SPECIFIC_CLUSTER_ID = 0xFC01  # decimal = 64513\n\n\nclass LegrandCluster(CustomCluster, ManufacturerSpecificCluster):\n    \"\"\"LegrandCluster.\"\"\"\n\n    cluster_id = MANUFACTURER_SPECIFIC_CLUSTER_ID\n    name = \"LegrandCluster\"\n    ep_attribute = \"legrand_cluster\"\n    attributes = {\n        0x0000: (\"dimmer\", t.data16),\n        0x0001: (\"led_dark\", t.Bool),\n        0x0002: (\"led_on\", t.Bool),\n    }\n    server_commands = {}\n    client_commands = {}\n\n\nclass DimmerWithoutNeutral(CustomDevice):\n    \"\"\"Dimmer switch w/o neutral.\"\"\"\n\n    signature = {\n        #  <SimpleDescriptor endpoint=1 profile=260 device_type=256\n        # device_version=1\n        # input_clusters=[0, 3, 4, 8, 6, 5, 15, 64513]\n        # output_clusters=[0, 64513, 25]>\n        MODELS_INFO: [(f\" {LEGRAND}\", \" Dimmer switch w/o neutral\")],\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    OnOff.cluster_id,\n                    LevelControl.cluster_id,\n                    Scenes.cluster_id,\n                    BinaryInput.cluster_id,\n                    MANUFACTURER_SPECIFIC_CLUSTER_ID,\n                ],\n                OUTPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    MANUFACTURER_SPECIFIC_CLUSTER_ID,\n                    Ota.cluster_id,\n                ],\n            }\n        },\n    }\n\n    replacement = {\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    OnOff.cluster_id,\n                    LevelControl.cluster_id,\n                    Scenes.cluster_id,\n                    BinaryInput.cluster_id,\n                    LegrandCluster,\n                ],\n                OUTPUT_CLUSTERS: [Basic.cluster_id, LegrandCluster, Ota.cluster_id],\n            }\n        }\n    }\n", "path": "zhaquirks/legrand/dimmer.py"}], "after_files": [{"content": "\"\"\"Device handler for Legrand Dimmer switch w/o neutral.\"\"\"\nfrom zigpy.profiles import zha\nfrom zigpy.quirks import CustomCluster, CustomDevice\nimport zigpy.types as t\nfrom zigpy.zcl.clusters.general import (\n    Basic,\n    BinaryInput,\n    Groups,\n    Identify,\n    LevelControl,\n    OnOff,\n    Ota,\n    Scenes,\n)\nfrom zigpy.zcl.clusters.manufacturer_specific import ManufacturerSpecificCluster\n\nfrom . import LEGRAND\nfrom ..const import (\n    DEVICE_TYPE,\n    ENDPOINTS,\n    INPUT_CLUSTERS,\n    MODELS_INFO,\n    OUTPUT_CLUSTERS,\n    PROFILE_ID,\n)\n\nMANUFACTURER_SPECIFIC_CLUSTER_ID = 0xFC01  # decimal = 64513\n\n\nclass LegrandCluster(CustomCluster, ManufacturerSpecificCluster):\n    \"\"\"LegrandCluster.\"\"\"\n\n    cluster_id = MANUFACTURER_SPECIFIC_CLUSTER_ID\n    name = \"LegrandCluster\"\n    ep_attribute = \"legrand_cluster\"\n    attributes = {\n        0x0000: (\"dimmer\", t.data16),\n        0x0001: (\"led_dark\", t.Bool),\n        0x0002: (\"led_on\", t.Bool),\n    }\n    server_commands = {}\n    client_commands = {}\n\n\nclass DimmerWithoutNeutral(CustomDevice):\n    \"\"\"Dimmer switch w/o neutral.\"\"\"\n\n    signature = {\n        #  <SimpleDescriptor endpoint=1 profile=260 device_type=256\n        # device_version=1\n        # input_clusters=[0, 3, 4, 8, 6, 5, 15, 64513]\n        # output_clusters=[0, 64513, 25]>\n        MODELS_INFO: [(f\" {LEGRAND}\", \" Dimmer switch w/o neutral\")],\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    OnOff.cluster_id,\n                    LevelControl.cluster_id,\n                    Scenes.cluster_id,\n                    BinaryInput.cluster_id,\n                    MANUFACTURER_SPECIFIC_CLUSTER_ID,\n                ],\n                OUTPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    MANUFACTURER_SPECIFIC_CLUSTER_ID,\n                    Ota.cluster_id,\n                ],\n            }\n        },\n    }\n\n    replacement = {\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    OnOff.cluster_id,\n                    LevelControl.cluster_id,\n                    Scenes.cluster_id,\n                    BinaryInput.cluster_id,\n                    LegrandCluster,\n                ],\n                OUTPUT_CLUSTERS: [Basic.cluster_id, LegrandCluster, Ota.cluster_id],\n            }\n        }\n    }\n\n\nclass DimmerWithoutNeutral2(DimmerWithoutNeutral):\n    \"\"\"Dimmer switch w/o neutral 2.\"\"\"\n\n    signature = {\n        #  <SimpleDescriptor endpoint=1 profile=260 device_type=256\n        # device_version=1\n        # input_clusters=[0, 3, 4, 8, 6, 5, 15, 64513]\n        # output_clusters=[0, 64513, 25]>\n        MODELS_INFO: [(f\" {LEGRAND}\", \" Dimmer switch w/o neutral\")],\n        ENDPOINTS: {\n            1: {\n                PROFILE_ID: zha.PROFILE_ID,\n                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,\n                INPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    Identify.cluster_id,\n                    Groups.cluster_id,\n                    OnOff.cluster_id,\n                    LevelControl.cluster_id,\n                    Scenes.cluster_id,\n                    BinaryInput.cluster_id,\n                    MANUFACTURER_SPECIFIC_CLUSTER_ID,\n                ],\n                OUTPUT_CLUSTERS: [\n                    Basic.cluster_id,\n                    MANUFACTURER_SPECIFIC_CLUSTER_ID,\n                    Ota.cluster_id,\n                ],\n            },\n            242: {\n                PROFILE_ID: 41440,\n                DEVICE_TYPE: 0x0061,\n                INPUT_CLUSTERS: [],\n                OUTPUT_CLUSTERS: [0x0021],\n            },\n        },\n    }\n", "path": "zhaquirks/legrand/dimmer.py"}]}