I think this is a feature, Its the sequence that Ikea is using for changing color of their lamps.
Make sure the light is on → skip push left or right → go and change color on hold
A normal left and right will give us a response with bytes 00 or 01 but a hold will give a 02
Push button Right
ZCLCommandId: 0x07 >, GenericBody: 00 01 0D 00
Push button Left
ZCLCommandId: 0x07 >, GenericBody: 01 01 0D 00
Holding the left or right button gives us now a value 2 so skip this action
ZCLCommandId: 0x07 >, GenericBody: 02 00 00 00
I still don't know how we can identify a difference in the action on and hold, the structure of the responses are identical.
I will dive a bit more in the code and see what I can find.
UPDATE:
The actions on and hold sequence on are the same command with the same Zigbee Message.
#Push On
<ZigbeeDevice: a68b4df4-9c5a-4bdf-943a-f2bb1b20e9f1 [0xABE1] (Styrbar Remote)> received Zigbee message:
< ZigbeeMessageRx ||
type: 0x00,
< AddressHeader ||
src_addr: 0xABE1,
src_endpoint: 0x01,
dest_addr: 0x0000,
dest_endpoint: 0x01,
profile: 0x0104,
cluster: OnOff >,
lqi: 0xE8,
rssi: -42,
body_length: 0x0003,
< ZCLMessageBody ||
< ZCLHeader ||
frame_ctrl: 0x01,
seqno: 0x40,
ZCLCommandId: 0x01 >,
< On || >
>
>
#Hold Left of Right
<ZigbeeDevice: a68b4df4-9c5a-4bdf-943a-f2bb1b20e9f1 [0xABE1] (Styrbar Remote)> received Zigbee message:
< ZigbeeMessageRx ||
type: 0x00,
< AddressHeader ||
src_addr: 0xABE1,
src_endpoint: 0x01,
dest_addr: 0x0000,
dest_endpoint: 0x01,
profile: 0x0104,
cluster: OnOff >,
lqi: 0xFF,
rssi: -19,
body_length: 0x0003,
< ZCLMessageBody ||
< ZCLHeader ||
frame_ctrl: 0x01,
seqno: 0x70,
ZCLCommandId: 0x01 >,
< On || >
>
>
This is why I think that the DTH has no hold developed in the driver. Because this is not possible with this sequence (scene) that Ikea has build in the device.