-
Notifications
You must be signed in to change notification settings - Fork 710
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BUG] Philips Hue RDM001 simultaneous press not processed #3591
Comments
Seems commit d84d94f#diff-493c9c4c97806b1bcce0822f1ece0cad303ee32e4eac25b503e956ec83f3b587 introduced this issue. Version before this works fine in terms of simultaneous presses. I would dig deeper but the diff is pretty large. @fholzer if you have any tips where I should look I could dig deeper myself? |
Hey, you say you have a dual rocker and use mode 3. Dual rocker should be mode 2, see https://zigbee.blakadder.com/Philips_RDM001.html. Mode 3 is double push. Either way, I think I know what the issue is. The Button Queue doesn't support pressing multiple buttons at the same time. The main purpose of the queue is to support multi-press events, though it can also have impact on single presses. If different buttons are pressed withing the Button Queue threshold (300ms) only the last button received will be considered. I have am working on a fix, but would like to do some more testing for the different switch modes, and also for the other remotes that use this Button Queue. Could you maybe test using philips files from here: https://github.com/fholzer/zha-device-handlers/tree/fix-philips-multi-button-press |
Wow, that was fast. Thanks for looking into it. Indeed you're right, I was using enum8.undefined_0x02 for mode (not mode 3 as I had mistakenly remembered). I tested both the fork and the PR without success. Is the init.py called correctly from the custom_quicks directory or do I need to place it someplace else? If I should grab some events logs from RDM001 in mode 0x02 with simultaneous presses let me know. |
Hey you'll need both, the init and wallswitch py files from my branch. Note that i made a change to the mode parameter names, so instead of using raw integer values when changing the mode, you can now use one of these strings:
Please test, and in case you still experience issues, it would be great to get debug logs. |
This last part is working: I get SwitchMode.DoubleRocker when reading the mode. Cool improvment. I have both init and wallswitch in custom_quirks. Below the logs for a single simultaneous switch of left and right (but opposite - one from OFF to ON, the other from ON to OFF) from ZHA Debug logging. LogsLogs2024-12-08 19:09:40.021 DEBUG (MainThread) [zha.application.helpers] Global updater interval finished
2024-12-08 19:10:01.110 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x0ea6000700aa00
2024-12-08 19:10:01.112 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.device_state_changed{'status': <Status.SUCCESS: 0>, 'frame_length': 7, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_INDICATION|APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE|32: 42>), 'reserved': 0} (seq 166)
2024-12-08 19:10:01.113 DEBUG (MainThread) [zigpy_deconz.api] Sending CommandId.aps_data_indication{'flags': <DataIndicationFlags.Always_Use_NWK_Source_Addr: 1>} (seq=166)
2024-12-08 19:10:01.116 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x17a6002b002400220200000102a8e401040100fc0d001d0b107100010000300021000000affff43def01b7
2024-12-08 19:10:01.119 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.aps_data_indication{'status': <Status.SUCCESS: 0>, 'frame_length': 43, 'payload_length': 36, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE: 8>), 'dst_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0x0000), 'dst_ep': 1, 'src_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0xE4A8), 'src_ep': 1, 'profile_id': 260, 'cluster_id': 64512, 'asdu': b'\x1d\x0b\x10q\x00\x01\x00\x000\x00!\x00\x00', 'reserved1': 0, 'reserved2': 175, 'lqi': 255, 'reserved3': 244, 'reserved4': 61, 'reserved5': 239, 'reserved6': 1, 'rssi': -73} (seq 166)
2024-12-08 19:10:01.121 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 12, 8, 17, 10, 1, 121219, tzinfo=datetime.timezone.utc), priority=0, src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE4A8), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=64512, data=Serialized[b'\x1d\x0b\x10q\x00\x01\x00\x000\x00!\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-73)
2024-12-08 19:10:01.123 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Received ZCL frame: b'\x1d\x0b\x10q\x00\x01\x00\x000\x00!\x00\x00'
2024-12-08 19:10:01.124 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl<0x1D>(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=True, direction=<Direction.Server_to_Client: 1>, disable_default_response=1, reserved=0, *is_cluster=True, *is_general=False), manufacturer=4107, tsn=113, command_id=0, *direction=<Direction.Server_to_Client: 1>)
2024-12-08 19:10:01.125 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Decoded ZCL frame: PhilipsWallSwitchRemoteCluster:notification(button=1, param2=3145728, press_type=0, param4=33, param5=0)
2024-12-08 19:10:01.125 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Received command 0x00 (TSN 113): notification(button=1, param2=3145728, press_type=0, param4=33, param5=0)
2024-12-08 19:10:01.127 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request tsn: [113] command id: 0 - args: [notification(button=1, param2=3145728, press_type=0, param4=33, param5=0)]
2024-12-08 19:10:01.127 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request button id: [1], button name: [<Button id=left, trigger=turn_on, action=left>]
2024-12-08 19:10:01.128 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.121219, 'ieee': 00:17:88:01:0c:c3:de:45, 'min_update_delta': 30.0})
2024-12-08 19:10:01.131 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.121219, 'ieee': 00:17:88:01:0c:c3:de:45, 'min_update_delta': 30.0}) completed
2024-12-08 19:10:01.133 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>)
2024-12-08 19:10:01.134 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>) completed
2024-12-08 19:10:01.142 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x0ea7000700aa00
2024-12-08 19:10:01.143 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.device_state_changed{'status': <Status.SUCCESS: 0>, 'frame_length': 7, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_INDICATION|APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE|32: 42>), 'reserved': 0} (seq 167)
2024-12-08 19:10:01.144 DEBUG (MainThread) [zigpy_deconz.api] Sending CommandId.aps_data_indication{'flags': <DataIndicationFlags.Always_Use_NWK_Source_Addr: 1>} (seq=167)
2024-12-08 19:10:01.146 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x17a7002b002400220200000102a8e401040100fc0d001d0b107200020000300021000000affff43def01b7
2024-12-08 19:10:01.147 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.aps_data_indication{'status': <Status.SUCCESS: 0>, 'frame_length': 43, 'payload_length': 36, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE: 8>), 'dst_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0x0000), 'dst_ep': 1, 'src_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0xE4A8), 'src_ep': 1, 'profile_id': 260, 'cluster_id': 64512, 'asdu': b'\x1d\x0b\x10r\x00\x02\x00\x000\x00!\x00\x00', 'reserved1': 0, 'reserved2': 175, 'lqi': 255, 'reserved3': 244, 'reserved4': 61, 'reserved5': 239, 'reserved6': 1, 'rssi': -73} (seq 167)
2024-12-08 19:10:01.149 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 12, 8, 17, 10, 1, 149867, tzinfo=datetime.timezone.utc), priority=0, src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE4A8), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=64512, data=Serialized[b'\x1d\x0b\x10r\x00\x02\x00\x000\x00!\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-73)
2024-12-08 19:10:01.152 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Received ZCL frame: b'\x1d\x0b\x10r\x00\x02\x00\x000\x00!\x00\x00'
2024-12-08 19:10:01.153 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl<0x1D>(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=True, direction=<Direction.Server_to_Client: 1>, disable_default_response=1, reserved=0, *is_cluster=True, *is_general=False), manufacturer=4107, tsn=114, command_id=0, *direction=<Direction.Server_to_Client: 1>)
2024-12-08 19:10:01.155 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Decoded ZCL frame: PhilipsWallSwitchRemoteCluster:notification(button=2, param2=3145728, press_type=0, param4=33, param5=0)
2024-12-08 19:10:01.155 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Received command 0x00 (TSN 114): notification(button=2, param2=3145728, press_type=0, param4=33, param5=0)
2024-12-08 19:10:01.156 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request tsn: [114] command id: 0 - args: [notification(button=2, param2=3145728, press_type=0, param4=33, param5=0)]
2024-12-08 19:10:01.156 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request button id: [2], button name: [<Button id=right, trigger=right, action=right>]
2024-12-08 19:10:01.157 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.149867, 'ieee': 00:17:88:01:0c:c3:de:45, 'min_update_delta': 30.0})
2024-12-08 19:10:01.161 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.149867, 'ieee': 00:17:88:01:0c:c3:de:45, 'min_update_delta': 30.0}) completed
2024-12-08 19:10:01.163 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>)
2024-12-08 19:10:01.164 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>) completed
2024-12-08 19:10:01.214 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x0ea8000700aa00
2024-12-08 19:10:01.215 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.device_state_changed{'status': <Status.SUCCESS: 0>, 'frame_length': 7, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_INDICATION|APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE|32: 42>), 'reserved': 0} (seq 168)
2024-12-08 19:10:01.216 DEBUG (MainThread) [zigpy_deconz.api] Sending CommandId.aps_data_indication{'flags': <DataIndicationFlags.Always_Use_NWK_Source_Addr: 1>} (seq=168)
2024-12-08 19:10:01.220 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x17a8002b002400220200000102a8e401040100fc0d001d0b107300010000300221010000affff43def01b8
2024-12-08 19:10:01.222 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.aps_data_indication{'status': <Status.SUCCESS: 0>, 'frame_length': 43, 'payload_length': 36, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE: 8>), 'dst_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0x0000), 'dst_ep': 1, 'src_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0xE4A8), 'src_ep': 1, 'profile_id': 260, 'cluster_id': 64512, 'asdu': b'\x1d\x0b\x10s\x00\x01\x00\x000\x02!\x01\x00', 'reserved1': 0, 'reserved2': 175, 'lqi': 255, 'reserved3': 244, 'reserved4': 61, 'reserved5': 239, 'reserved6': 1, 'rssi': -72} (seq 168)
2024-12-08 19:10:01.224 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 12, 8, 17, 10, 1, 224484, tzinfo=datetime.timezone.utc), priority=0, src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE4A8), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=64512, data=Serialized[b'\x1d\x0b\x10s\x00\x01\x00\x000\x02!\x01\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-72)
2024-12-08 19:10:01.226 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Received ZCL frame: b'\x1d\x0b\x10s\x00\x01\x00\x000\x02!\x01\x00'
2024-12-08 19:10:01.226 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl<0x1D>(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=True, direction=<Direction.Server_to_Client: 1>, disable_default_response=1, reserved=0, *is_cluster=True, *is_general=False), manufacturer=4107, tsn=115, command_id=0, *direction=<Direction.Server_to_Client: 1>)
2024-12-08 19:10:01.228 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Decoded ZCL frame: PhilipsWallSwitchRemoteCluster:notification(button=1, param2=3145728, press_type=2, param4=33, param5=1)
2024-12-08 19:10:01.228 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Received command 0x00 (TSN 115): notification(button=1, param2=3145728, press_type=2, param4=33, param5=1)
2024-12-08 19:10:01.230 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request tsn: [115] command id: 0 - args: [notification(button=1, param2=3145728, press_type=2, param4=33, param5=1)]
2024-12-08 19:10:01.231 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request button id: [1], button name: [<Button id=left, trigger=turn_on, action=left>]
2024-12-08 19:10:01.231 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request button press type: [<PressType name=remote_button_short_release, action=short_release, trigger=remote_button_short_release, arg=short_release>], duration: [1]
2024-12-08 19:10:01.233 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.224484, 'ieee': 00:17:88:01:0c:c3:de:45, 'min_update_delta': 30.0})
2024-12-08 19:10:01.235 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.224484, 'ieee': 00:17:88:01:0c:c3:de:45, 'min_update_delta': 30.0}) completed
2024-12-08 19:10:01.239 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>)
2024-12-08 19:10:01.241 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>) completed
2024-12-08 19:10:01.243 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x0ea9000700aa00
2024-12-08 19:10:01.244 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.device_state_changed{'status': <Status.SUCCESS: 0>, 'frame_length': 7, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_INDICATION|APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE|32: 42>), 'reserved': 0} (seq 169)
2024-12-08 19:10:01.245 DEBUG (MainThread) [zigpy_deconz.api] Sending CommandId.aps_data_indication{'flags': <DataIndicationFlags.Always_Use_NWK_Source_Addr: 1>} (seq=169)
2024-12-08 19:10:01.247 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x17a9002b002400220200000102a8e401040100fc0d001d0b107400020000300221010000affff43def01b8
2024-12-08 19:10:01.249 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.aps_data_indication{'status': <Status.SUCCESS: 0>, 'frame_length': 43, 'payload_length': 36, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE: 8>), 'dst_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0x0000), 'dst_ep': 1, 'src_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0xE4A8), 'src_ep': 1, 'profile_id': 260, 'cluster_id': 64512, 'asdu': b'\x1d\x0b\x10t\x00\x02\x00\x000\x02!\x01\x00', 'reserved1': 0, 'reserved2': 175, 'lqi': 255, 'reserved3': 244, 'reserved4': 61, 'reserved5': 239, 'reserved6': 1, 'rssi': -72} (seq 169)
2024-12-08 19:10:01.250 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 12, 8, 17, 10, 1, 250098, tzinfo=datetime.timezone.utc), priority=0, src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xE4A8), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=64512, data=Serialized[b'\x1d\x0b\x10t\x00\x02\x00\x000\x02!\x01\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-72)
2024-12-08 19:10:01.251 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Received ZCL frame: b'\x1d\x0b\x10t\x00\x02\x00\x000\x02!\x01\x00'
2024-12-08 19:10:01.251 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl<0x1D>(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=True, direction=<Direction.Server_to_Client: 1>, disable_default_response=1, reserved=0, *is_cluster=True, *is_general=False), manufacturer=4107, tsn=116, command_id=0, *direction=<Direction.Server_to_Client: 1>)
2024-12-08 19:10:01.252 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Decoded ZCL frame: PhilipsWallSwitchRemoteCluster:notification(button=2, param2=3145728, press_type=2, param4=33, param5=1)
2024-12-08 19:10:01.253 DEBUG (MainThread) [zigpy.zcl] [0xE4A8:1:0xfc00] Received command 0x00 (TSN 116): notification(button=2, param2=3145728, press_type=2, param4=33, param5=1)
2024-12-08 19:10:01.253 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request tsn: [116] command id: 0 - args: [notification(button=2, param2=3145728, press_type=2, param4=33, param5=1)]
2024-12-08 19:10:01.253 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request button id: [2], button name: [<Button id=right, trigger=right, action=right>]
2024-12-08 19:10:01.253 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - handle_cluster_request button press type: [<PressType name=remote_button_short_release, action=short_release, trigger=remote_button_short_release, arg=short_release>], duration: [1]
2024-12-08 19:10:01.254 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.250098, 'ieee': 00:17:88:01:0c:c3:de:45, 'min_update_delta': 30.0})
2024-12-08 19:10:01.256 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.250098, 'ieee': 00:17:88:01:0c:c3:de:45, 'min_update_delta': 30.0}) completed
2024-12-08 19:10:01.258 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>)
2024-12-08 19:10:01.258 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>) completed
2024-12-08 19:10:01.555 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - send_press_event click_count: [1]
2024-12-08 19:10:01.555 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - send_press_event evaluated press_type: [<PressType name=remote_button_short_press, action=press, trigger=remote_button_short_press, arg=press>]
2024-12-08 19:10:01.555 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - send_press_event emitting action: [right_press] event_args: {'button': 'right', 'press_type': 'press', 'command_id': 0, 'duration': 1, 'args': [2, 3145728, 0, 33, 1]}
2024-12-08 19:10:01.555 DEBUG (MainThread) [zha] Emitting event zha_event with data ZHAEvent(device_ieee=00:17:88:01:0c:c3:de:45, unique_id='00:17:88:01:0c:c3:de:45', data={'unique_id': '00:17:88:01:0c:c3:de:45:1:0xfc00', 'endpoint_id': 1, 'cluster_id': 64512, 'command': 'right_press', 'args': {'button': 'right', 'press_type': 'press', 'command_id': 0, 'duration': 1, 'args': [2, 3145728, 0, 33, 1]}, 'params': {}}, event_type='zha_event', event='zha_event') (1 listeners)
2024-12-08 19:10:01.555 DEBUG (MainThread) [zha] (ZHADeviceProxy) handling event protocol for event: ZHAEvent(device_ieee=00:17:88:01:0c:c3:de:45, unique_id='00:17:88:01:0c:c3:de:45', data={'unique_id': '00:17:88:01:0c:c3:de:45:1:0xfc00', 'endpoint_id': 1, 'cluster_id': 64512, 'command': 'right_press', 'args': {'button': 'right', 'press_type': 'press', 'command_id': 0, 'duration': 1, 'args': [2, 3145728, 0, 33, 1]}, 'params': {}}, event_type='zha_event', event='zha_event')
2024-12-08 19:10:01.556 DEBUG (MainThread) [zhaquirks.philips] PhilipsWallSwitchRemoteCluster - send_press_event emitting simulated action: [right_short_release]
2024-12-08 19:10:01.556 DEBUG (MainThread) [zha] Emitting event zha_event with data ZHAEvent(device_ieee=00:17:88:01:0c:c3:de:45, unique_id='00:17:88:01:0c:c3:de:45', data={'unique_id': '00:17:88:01:0c:c3:de:45:1:0xfc00', 'endpoint_id': 1, 'cluster_id': 64512, 'command': 'right_short_release', 'args': {'button': 'right', 'press_type': 'short_release', 'command_id': 0, 'duration': 1, 'args': [2, 3145728, 2, 33, 1]}, 'params': {}}, event_type='zha_event', event='zha_event') (1 listeners)
2024-12-08 19:10:01.556 DEBUG (MainThread) [zha] (ZHADeviceProxy) handling event protocol for event: ZHAEvent(device_ieee=00:17:88:01:0c:c3:de:45, unique_id='00:17:88:01:0c:c3:de:45', data={'unique_id': '00:17:88:01:0c:c3:de:45:1:0xfc00', 'endpoint_id': 1, 'cluster_id': 64512, 'command': 'right_short_release', 'args': {'button': 'right', 'press_type': 'short_release', 'command_id': 0, 'duration': 1, 'args': [2, 3145728, 2, 33, 1]}, 'params': {}}, event_type='zha_event', event='zha_event')
2024-12-08 19:10:01.566 DEBUG (MainThread) [zha.application.platforms] 84:fd:27:ff:fe:54:4d:32-1: setting transitioning flag to True
2024-12-08 19:10:01.567 DEBUG (MainThread) [zigpy.util] Tries remaining: 3
2024-12-08 19:10:01.568 DEBUG (MainThread) [zigpy.zcl] [0xB470:1:0x0006] Sending request header: ZCLHeader(frame_control=FrameControl<0x01>(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direction=<Direction.Client_to_Server: 0>, disable_default_response=0, reserved=0, *is_cluster=True, *is_general=False), tsn=9, command_id=0, *direction=<Direction.Client_to_Server: 0>)
2024-12-08 19:10:01.571 DEBUG (MainThread) [zigpy.zcl] [0xB470:1:0x0006] Sending request: off()
2024-12-08 19:10:01.572 DEBUG (MainThread) [zigpy_deconz.zigbee.application] Sending packet: ZigbeePacket(timestamp=datetime.datetime(2024, 12, 8, 17, 10, 1, 572734, tzinfo=datetime.timezone.utc), priority=<PacketPriority.NORMAL: 0>, src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xB470), dst_ep=1, source_route=None, extended_timeout=False, tsn=9, profile_id=260, cluster_id=6, data=Serialized[b'\x01\t\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2024-12-08 19:10:01.574 DEBUG (MainThread) [zigpy_deconz.api] Sending CommandId.aps_data_request{'request_id': 75, 'flags': <DeconzSendDataFlags.NONE: 0>, 'dst': DeconzAddressEndpoint(address_mode=<AddressMode.NWK: 2>, address=0xB470, endpoint=1), 'profile_id': 260, 'cluster_id': 6, 'src_ep': 1, 'asdu': b'\x01\t\x00', 'tx_options': <DeconzTransmitOptions.USE_NWK_KEY_SECURITY: 2>, 'radius': 0, 'relays': None} (seq=170)
2024-12-08 19:10:01.585 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x12aa0009000200224b
2024-12-08 19:10:01.586 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.aps_data_request{'status': <Status.SUCCESS: 0>, 'frame_length': 9, 'payload_length': 2, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE: 8>), 'request_id': 75} (seq 170)
2024-12-08 19:10:01.587 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x0eab000700a600
2024-12-08 19:10:01.587 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.device_state_changed{'status': <Status.SUCCESS: 0>, 'frame_length': 7, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_CONFIRM|APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE|32: 41>), 'reserved': 0} (seq 171)
2024-12-08 19:10:01.588 DEBUG (MainThread) [zigpy_deconz.api] Sending CommandId.aps_data_confirm{} (seq=171)
2024-12-08 19:10:01.593 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x04ab0013000c00224b0270b401010000000000
2024-12-08 19:10:01.595 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.aps_data_confirm{'status': <Status.SUCCESS: 0>, 'frame_length': 19, 'payload_length': 12, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE: 8>), 'request_id': 75, 'dst_addr': DeconzAddressEndpoint(address_mode=<AddressMode.NWK: 2>, address=0xB470, endpoint=1), 'src_ep': 1, 'confirm_status': <TXStatus.SUCCESS: 0>, 'reserved1': 0, 'reserved2': 0, 'reserved3': 0, 'reserved4': 0} (seq 171)
2024-12-08 19:10:01.668 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x0eac000700aa00
2024-12-08 19:10:01.669 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.device_state_changed{'status': <Status.SUCCESS: 0>, 'frame_length': 7, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_INDICATION|APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE|32: 42>), 'reserved': 0} (seq 172)
2024-12-08 19:10:01.671 DEBUG (MainThread) [zigpy_deconz.api] Sending CommandId.aps_data_indication{'flags': <DataIndicationFlags.Always_Use_NWK_Source_Addr: 1>} (seq=172)
2024-12-08 19:10:01.675 DEBUG (MainThread) [zigpy_deconz.uart] Frame received: 0x17ac0023001c0022020000010270b40104010600050008090b000000affff43def01c2
2024-12-08 19:10:01.679 DEBUG (MainThread) [zigpy_deconz.api] Received command CommandId.aps_data_indication{'status': <Status.SUCCESS: 0>, 'frame_length': 35, 'payload_length': 28, 'device_state': DeviceState(network_state=<NetworkState2.CONNECTED: 2>, device_state=<DeviceStateFlags.APSDE_DATA_REQUEST_FREE_SLOTS_AVAILABLE: 8>), 'dst_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0x0000), 'dst_ep': 1, 'src_addr': DeconzAddress(address_mode=<AddressMode.NWK: 2>, address=0xB470), 'src_ep': 1, 'profile_id': 260, 'cluster_id': 6, 'asdu': b'\x08\t\x0b\x00\x00', 'reserved1': 0, 'reserved2': 175, 'lqi': 255, 'reserved3': 244, 'reserved4': 61, 'reserved5': 239, 'reserved6': 1, 'rssi': -62} (seq 172)
2024-12-08 19:10:01.682 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(timestamp=datetime.datetime(2024, 12, 8, 17, 10, 1, 682003, tzinfo=datetime.timezone.utc), priority=0, src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xB470), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=6, data=Serialized[b'\x08\t\x0b\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=255, rssi=-62)
2024-12-08 19:10:01.685 DEBUG (MainThread) [zigpy.zcl] [0xB470:1:0x0006] Received ZCL frame: b'\x08\t\x0b\x00\x00'
2024-12-08 19:10:01.688 DEBUG (MainThread) [zigpy.zcl] [0xB470:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl<0x08>(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Server_to_Client: 1>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=9, command_id=11, *direction=<Direction.Server_to_Client: 1>)
2024-12-08 19:10:01.690 DEBUG (MainThread) [zigpy.zcl] [0xB470:1:0x0006] Decoded ZCL frame: OnOff:Default_Response(command_id=0, status=<Status.SUCCESS: 0>)
2024-12-08 19:10:01.692 DEBUG (MainThread) [zha.application.platforms] 84:fd:27:ff:fe:54:4d:32-1: starting transitioning timer for 1.25
2024-12-08 19:10:01.693 DEBUG (MainThread) [zha.application.platforms] 84:fd:27:ff:fe:54:4d:32-1: turned off: Default_Response(command_id=0, status=<Status.SUCCESS: 0>)
2024-12-08 19:10:01.693 DEBUG (MainThread) [zha] Emitting event state_changed with data EntityStateChangedEvent(event_type='entity', event='state_changed', platform=<Platform.LIGHT: 'light'>, unique_id='84:fd:27:ff:fe:54:4d:32-1', device_ieee=84:fd:27:ff:fe:54:4d:32, endpoint_id=1, group_id=None) (1 listeners)
2024-12-08 19:10:01.694 DEBUG (MainThread) [homeassistant.components.zha.entity] light.kitchen_wall_counter: Handling event from entity: EntityStateChangedEvent(event_type='entity', event='state_changed', platform=<Platform.LIGHT: 'light'>, unique_id='84:fd:27:ff:fe:54:4d:32-1', device_ieee=84:fd:27:ff:fe:54:4d:32, endpoint_id=1, group_id=None)
2024-12-08 19:10:01.698 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.682003, 'ieee': 84:fd:27:ff:fe:54:4d:32, 'min_update_delta': 30.0})
2024-12-08 19:10:01.699 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f4e6258a0>, 'UPDATE devices_v13\n SET last_seen=:ts\n WHERE ieee=:ieee AND :ts - last_seen > :min_update_delta', {'ts': 1733677801.682003, 'ieee': 84:fd:27:ff:fe:54:4d:32, 'min_update_delta': 30.0}) completed
2024-12-08 19:10:01.704 DEBUG (Thread-7) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>)
2024-12-08 19:10:01.704 DEBUG (Thread-7) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f4e6258a0>) completed
2024-12-08 19:10:02.143 DEBUG (MainThread) [zha.decorators] [<Task pending name='device-availability-checker_DeviceAvailabilityChecker' coro=<periodic.<locals>.scheduler.<locals>.wrapper() running at /usr/local/lib/python3.13/site-packages/zha/decorators.py:78> cb=[set.remove()]>] executing periodic task [zha.application.helpers::DeviceAvailabilityChecker.check_device_availability] |
Are you sure you also replaced your |
Right. What I found while initially working on these changes is that it doesn't work putting these in the custom quirks folder. Not entirely sure why. I usually put these files into python's site-packages folder. (Not directly, but into the proper path inside the zha-device-handlers directory inside site-packages) |
Test confirms issue is fixed in your fork @fholzer Many thanks. |
Bug description
After updating to HA 2024.11 the associated ZHA quirk for Philips Hue Wall Switch RDM001 set in mode 3 (dual rocker) no longer processes simultaneous switching of both switches. When switching both only one of the switches is processed and the second never appears in HA logbook.
After rolling back init.py and rdm001.py as a custom quirk from commit c9c9e37 the behavior now works as before again: switching both switches at the same time will trigger events for left (unnamed) and right switch.
Steps to reproduce
Switch both switches in mode 3.
Only one events goes through.
Expected behavior
Both events go through.
Screenshots/Video
Screenshots/Video
[Paste/upload your media here]
Device signature
Device signature
[Paste the device signature here]
Diagnostic information
Diagnostic information
[Paste the diagnostic information here]
Logs
Logs
Additional information
No response
The text was updated successfully, but these errors were encountered: