Repository: zigpy/zha-device-handlers

Issue:
[Device Support Request] Ikea 5 button remote (E1810) no longer matches the existing quirks when the firmware is upgraded to 2.3.080
**Is your feature request related to a problem? Please describe.**
With the release of the 2.3.080 firmware for the Ikea E1810 5 button remote the device signature has changed so the existing quirks no longer match. Support for group binding no longer seems to work but multiple devices can be bound to the remote through Manager Clusters, so the same end result can be achieved.

**Describe the solution you'd like**
I do not know what functionality the fivebtnremotezha quirks provided, but the device seems to function without it. It certainly would not be benefiting from the battery fixes @MattWestb recently worked on.

**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.**
{
  "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.EndDevice: 2>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress: 128>, manufacturer_code=4476, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)",
  "endpoints": {
    "1": {
      "profile_id": 260,
      "device_type": "0x0820",
      "in_clusters": [
        "0x0000",
        "0x0001",
        "0x0003",
        "0x0020",
        "0x1000",
        "0xfc7c"
      ],
      "out_clusters": [
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006",
        "0x0008",
        "0x0019",
        "0x1000"
      ]
    }
  },
  "manufacturer": "IKEA of Sweden",
  "model": "TRADFRI remote control",
  "class": "zigpy.device.Device"
}

**Additional context**
Add any other context or screenshots about the feature request here.



Discussion:
Hey thanks that i have missing !!

All my 5 buttons is on the bad firmware and is not getting the new PullControlCluster so i need moving one from my IKEA GW that is still on the old working FW and upgrading it in ZHA (my IKEA GW have upgrading one E1743 to the new but one is not done and the 5 button remote after 3 days).

Perhaps its helping user with battery draining problem then getting the pull control working on the remotes (i was missing that the 5 button was not having it then hunting the battery draining problems).

All IKEA is light controllers and shall working out of the box and being bond to one light group (that looks being gone for the moment but i think IKEA must fixing that) so you is only missing the battery fix (showing half battery % and no extras) and also the device automatons is not working if you are using them.

Also need sniffing the upgraded then Z2M have reporting the scene switching is not working but perhaps  they have doing it different like in Styrbar but is not so urgent then ZHA its not possible setting up Zigbee Scenes ;-(

I making on PR with the new device signature and taking the other things later then we can see how it working with other changes IKEA have doing.
Ops one of the old version have pull control but no scene cluster and the other have scene and no pull control so its one combination of both but perhaps is the scene cluster possible to binding that was not possible before then it was not existing.

Resolving patch:
diff --git a/zhaquirks/ikea/fivebtnremotezha.py b/zhaquirks/ikea/fivebtnremotezha.py
--- a/zhaquirks/ikea/fivebtnremotezha.py
+++ b/zhaquirks/ikea/fivebtnremotezha.py
@@ -52,7 +52,7 @@
 IKEA_CLUSTER_ID = 0xFC7C  # decimal = 64636
 
 
-class IkeaTradfriRemote(CustomDevice):
+class IkeaTradfriRemote1(CustomDevice):
     """Custom device representing IKEA of Sweden TRADFRI remote control."""
 
     signature = {
@@ -174,7 +174,7 @@ class IkeaTradfriRemote(CustomDevice):
     }
 
 
-class IkeaTradfriRemote2(IkeaTradfriRemote):
+class IkeaTradfriRemote2(IkeaTradfriRemote1):
     """Custom device representing IKEA of Sweden TRADFRI 5 button remote control."""
 
     signature = {
@@ -232,4 +232,127 @@ class IkeaTradfriRemote2(IkeaTradfriRemote):
         }
     }
 
-    device_automation_triggers = IkeaTradfriRemote.device_automation_triggers.copy()
+    device_automation_triggers = IkeaTradfriRemote1.device_automation_triggers.copy()
+
+
+class IkeaTradfriRemote3(IkeaTradfriRemote1):
+    """Custom device representing IKEA of Sweden TRADFRI remote control."""
+
+    signature = {
+        # <SimpleDescriptor endpoint=1 profile=260 device_type=2080
+        # device_version=1
+        # input_clusters=[0, 1, 3, 32, 4096, 64636]
+        # output_clusters=[3, 4, 5, 6, 8, 25, 4096]>
+        MODELS_INFO: [(IKEA, "TRADFRI remote control")],
+        ENDPOINTS: {
+            1: {
+                PROFILE_ID: zha.PROFILE_ID,
+                DEVICE_TYPE: zha.DeviceType.NON_COLOR_CONTROLLER,
+                INPUT_CLUSTERS: [
+                    Basic.cluster_id,
+                    PowerConfiguration.cluster_id,
+                    Identify.cluster_id,
+                    PollControl.cluster_id,
+                    LightLink.cluster_id,
+                    IKEA_CLUSTER_ID,
+                ],
+                OUTPUT_CLUSTERS: [
+                    Identify.cluster_id,
+                    Groups.cluster_id,
+                    ScenesCluster.cluster_id,
+                    OnOff.cluster_id,
+                    LevelControl.cluster_id,
+                    Ota.cluster_id,
+                    LightLink.cluster_id,
+                ],
+            }
+        },
+    }
+
+    replacement = {
+        ENDPOINTS: {
+            1: {
+                PROFILE_ID: zha.PROFILE_ID,
+                DEVICE_TYPE: zha.DeviceType.NON_COLOR_CONTROLLER,
+                INPUT_CLUSTERS: [
+                    Basic.cluster_id,
+                    PowerConfiguration1CRCluster,
+                    Identify.cluster_id,
+                    PollControl.cluster_id,
+                    LightLinkCluster,
+                    IKEA_CLUSTER_ID,
+                ],
+                OUTPUT_CLUSTERS: [
+                    Identify.cluster_id,
+                    Groups.cluster_id,
+                    ScenesCluster,
+                    OnOff.cluster_id,
+                    LevelControl.cluster_id,
+                    Ota.cluster_id,
+                    LightLink.cluster_id,
+                ],
+            }
+        }
+    }
+
+    device_automation_triggers = {
+        (SHORT_PRESS, TURN_ON): {
+            COMMAND: COMMAND_TOGGLE,
+            CLUSTER_ID: 6,
+            ENDPOINT_ID: 1,
+        },
+        (LONG_PRESS, TURN_ON): {
+            COMMAND: COMMAND_RELEASE,
+            CLUSTER_ID: 5,
+            ENDPOINT_ID: 1,
+            ARGS: [],
+        },
+        (SHORT_PRESS, DIM_UP): {
+            COMMAND: COMMAND_STEP_ON_OFF,
+            CLUSTER_ID: 8,
+            ENDPOINT_ID: 1,
+            ARGS: [0, 43, 5],
+        },
+        (LONG_PRESS, DIM_UP): {
+            COMMAND: COMMAND_MOVE_ON_OFF,
+            CLUSTER_ID: 8,
+            ENDPOINT_ID: 1,
+            ARGS: [0, 84],
+        },
+        (SHORT_PRESS, DIM_DOWN): {
+            COMMAND: COMMAND_STEP,
+            CLUSTER_ID: 8,
+            ENDPOINT_ID: 1,
+            ARGS: [1, 43, 5],
+        },
+        (LONG_PRESS, DIM_DOWN): {
+            COMMAND: COMMAND_MOVE,
+            CLUSTER_ID: 8,
+            ENDPOINT_ID: 1,
+            ARGS: [1, 84],
+        },
+        (SHORT_PRESS, LEFT): {
+            COMMAND: COMMAND_PRESS,
+            CLUSTER_ID: 5,
+            ENDPOINT_ID: 1,
+            ARGS: [257, 13, 0],
+        },
+        (LONG_PRESS, LEFT): {
+            COMMAND: COMMAND_HOLD,
+            CLUSTER_ID: 5,
+            ENDPOINT_ID: 1,
+            ARGS: [3329, 0],
+        },
+        (SHORT_PRESS, RIGHT): {
+            COMMAND: COMMAND_PRESS,
+            CLUSTER_ID: 5,
+            ENDPOINT_ID: 1,
+            ARGS: [256, 13, 0],
+        },
+        (LONG_PRESS, RIGHT): {
+            COMMAND: COMMAND_HOLD,
+            CLUSTER_ID: 5,
+            ENDPOINT_ID: 1,
+            ARGS: [3328, 0],
+        },
+    }


Test patch: