IKEA Tradfri on/off buttons send no commands to HA via ZHA, and now won't pair with a Tradfri gateway

Hello, I’m using Home Assistant with ZHA on a Raspberry Pi 4+SSD with a Sonoff Zigbee 3.0 USB Plus. Home Assistant seems to have broken my Ikea on/off switches!

Home Assistant 2022.11.3
Supervisor 2022.10.2
Operating System 9.3
Frontend 20221108.0
ZNP = Texas Instruments Z-Stack ZNP protocol: CC253x, CC26x2, CC13x2
Raspberry Pi 4b

I have two IKEA Tradfri Zigbee motion sensors already paired to Home Assistant ZHA and working. I have ~50 other Tradfri devices paired with a Tradfri gateway in my home.

I have two IKEA Tradfri E1743 on/off dimmer switches, and have paired them (many times today) with HA via the ZHA Zigbee integration using a Sonoff USB 3 Plus dongle connected via a 1m long USB cable.

Initially, one of the buttons paired and sent events to Home Assistant, but then I removed it via the Devices > Zigbee UI and now it also will not send events any more.

After the first failures I updated the firmware on the Sonoff Zigbee dongle, but I’ve not noticed any difference.

The other button appeared to pair successfully, but has never sent events to Home Assistant according to the Log Book. I have tried both switches with brand-new batteries with the same results.

I have tried to remove the switches from Home Assistant ZHA and pair them with the Tradfri gateway, and now neither button will pair, failing with a message that says “Oops, sorry we couldn’t add remote!”. (So, now my remotes on/off switches appear to be broken!)

Is there anything that I can do to get the buttons to a state that they will pair properly with Tradfrie again or ensure that they can be paired properly with ZHA?

I have attached the log output from the Zigbee “add device” log UI:

Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=7, profile_id=0, cluster_id=32822, data=Serialized[b'\x07\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
[0x0000:zdo] ZDO request ZDOCmd.Mgmt_Permit_Joining_rsp: [<Status.SUCCESS: 0>]
[0x0000:zdo] No handler for ZDO request:ZDOCmd.Mgmt_Permit_Joining_rsp([<Status.SUCCESS: 0>])
Device 0xb0d9 (cc:86:ec:ff:fe:9c:e3:17) left the network
Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x1F61), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.Broadcast: 15>, address=<BroadcastAddress.ALL_ROUTERS_AND_COORDINATOR: 65532>), dst_ep=0, source_route=None, extended_timeout=False, tsn=129, profile_id=0, cluster_id=19, data=Serialized[b'\x81a\x1f\x17\xe3\x9c\xfe\xff\xec\x86\xcc\x80'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
New device 0x1f61 (cc:86:ec:ff:fe:9c:e3:17) joined the network
[0x1f61] Scheduling initialization
Received frame on uninitialized device <Device model=None manuf=None nwk=0x1F61 ieee=cc:86:ec:ff:fe:9c:e3:17 is_initialized=False> from ep 0 to ep 0, cluster 19: b'\x81a\x1f\x17\xe3\x9c\xfe\xff\xec\x86\xcc\x80'
[0x1f61:zdo] ZDO request ZDOCmd.Device_annce: [0x1F61, cc:86:ec:ff:fe:9c:e3:17, 128]
Tries remaining: 3
[0x1f61] Requesting 'Node Descriptor'
Tries remaining: 2
[0x1f61] Extending timeout for 0x3f request
Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x1F61), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=63, profile_id=0, cluster_id=32770, data=Serialized[b'?\x00a\x1f\x02@\x80|\x11RR\x00\x00,R\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
Received frame on uninitialized device <Device model=None manuf=None nwk=0x1F61 ieee=cc:86:ec:ff:fe:9c:e3:17 is_initialized=False> from ep 0 to ep 0, cluster 32770: b'?\x00a\x1f\x02@\x80|\x11RR\x00\x00,R\x00\x00'
[0x1f61] Got 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)
[0x1f61] Discovering endpoints
Tries remaining: 3
[0x1f61] Extending timeout for 0x40 request
Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x1F61), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=64, profile_id=0, cluster_id=32773, data=Serialized[b'@\x00a\x1f\x01\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
Received frame on uninitialized device <Device model=None manuf=None nwk=0x1F61 ieee=cc:86:ec:ff:fe:9c:e3:17 is_initialized=False> from ep 0 to ep 0, cluster 32773: b'@\x00a\x1f\x01\x01'
[0x1f61] Discovered endpoints: [1]
[0x1f61] Initializing endpoints [<Endpoint id=1 in=[] out=[] status=<Status.NEW: 0>>]
[0x1f61:1] Discovering endpoint information
Tries remaining: 3
[0x1f61] Extending timeout for 0x41 request
Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x1F61), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=65, profile_id=0, cluster_id=32772, data=Serialized[b'A\x00a\x1f$\x01\x04\x01 \x08\x01\x07\x00\x00\x01\x00\x03\x00\t\x00 \x00\x00\x10|\xfc\x07\x03\x00\x04\x00\x06\x00\x08\x00\x19\x00\x02\x01\x00\x10'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
Received frame on uninitialized device <Device model=None manuf=None nwk=0x1F61 ieee=cc:86:ec:ff:fe:9c:e3:17 is_initialized=False> from ep 0 to ep 0, cluster 32772: b'A\x00a\x1f$\x01\x04\x01 \x08\x01\x07\x00\x00\x01\x00\x03\x00\t\x00 \x00\x00\x10|\xfc\x07\x03\x00\x04\x00\x06\x00\x08\x00\x19\x00\x02\x01\x00\x10'
[0x1f61:1] Discovered endpoint information: SizePrefixedSimpleDescriptor(endpoint=1, profile=260, device_type=2080, device_version=1, input_clusters=[0, 1, 3, 9, 32, 4096, 64636], output_clusters=[3, 4, 6, 8, 25, 258, 4096])
[0x1F61:1:0x0000] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=66, command_id=<GeneralCommand.Read_Attributes: 0>, *direction=<Direction.Server_to_Client: 0>, *is_reply=False)
[0x1F61:1:0x0000] Sending request: Read_Attributes(attribute_ids=[4, 5])
[0x1f61] Extending timeout for 0x42 request
Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x1F61), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=0, profile_id=260, cluster_id=0, data=Serialized[b'\x18B\x01\x04\x00\x00B\x0eIKEA of Sweden\x05\x00\x00B\x15TRADFRI on/off switch'], tx_options=<TransmitOptions.NONE: 0>, radius=29, non_member_radius=0, lqi=142, rssi=None)
[0x1F61:1:0x0000] Received ZCL frame: b'\x18B\x01\x04\x00\x00B\x0eIKEA of Sweden\x05\x00\x00B\x15TRADFRI on/off switch'
[0x1F61:1:0x0000] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=66, command_id=1, *direction=<Direction.Client_to_Server: 1>, *is_reply=True)
[0x1F61:1:0x0000] Decoded ZCL frame: Basic:Read_Attributes_rsp(status_records=[ReadAttributeRecord(attrid=0x0004, status=<Status.SUCCESS: 0>, value=TypeValue(type=CharacterString, value='IKEA of Sweden')), ReadAttributeRecord(attrid=0x0005, status=<Status.SUCCESS: 0>, value=TypeValue(type=CharacterString, value='TRADFRI on/off switch'))])
[0x1f61] Read model 'TRADFRI on/off switch' and manufacturer 'IKEA of Sweden' from <Endpoint id=1 in=[basic:0x0000, power:0x0001, identify:0x0003, alarms:0x0009, poll_control:0x0020, lightlink:0x1000, manufacturer_specific:0xFC7C] out=[identify:0x0003, groups:0x0004, on_off:0x0006, level:0x0008, ota:0x0019, window_covering:0x0102, lightlink:0x1000] status=<Status.ZDO_INIT: 1>>
[0x1f61] Discovered basic device information for <Device model='TRADFRI on/off switch' manuf='IKEA of Sweden' nwk=0x1F61 ieee=cc:86:ec:ff:fe:9c:e3:17 is_initialized=True>
Device is initialized <Device model='TRADFRI on/off switch' manuf='IKEA of Sweden' nwk=0x1F61 ieee=cc:86:ec:ff:fe:9c:e3:17 is_initialized=True>
Checking quirks for IKEA of Sweden TRADFRI on/off switch (cc:86:ec:ff:fe:9c:e3:17)
Considering <class 'zhaquirks.ikea.twobtnremote.IkeaTradfriRemote2BtnZLL'>
Fail because profile_id mismatch on at least one endpoint
Considering <class 'zhaquirks.ikea.twobtnremote.IkeaTradfriRemote2Btn'>
Found custom device replacement for cc:86:ec:ff:fe:9c:e3:17: <class 'zhaquirks.ikea.twobtnremote.IkeaTradfriRemote2Btn'>
'button' component -> 'ZHAIdentifyButton' using ['identify']
'sensor' component -> 'Battery' using ['power']
'sensor' component -> 'RSSISensor' using ['basic']
'sensor' component -> 'LQISensor' using ['basic']
device - 0x1F61:cc:86:ec:ff:fe:9c:e3:17 entering async_device_initialized - is_new_join: True
device - 0x1F61:cc:86:ec:ff:fe:9c:e3:17 has joined the ZHA zigbee network
[0x1F61](TRADFRI on/off switch): started configuration
[0x1F61:ZDO](TRADFRI on/off switch): 'async_configure' stage succeeded
Error handling '_save_attribute' event with (cc:86:ec:ff:fe:9c:e3:17, 1, 0, 4, 'IKEA of Sweden') params: FOREIGN KEY constraint failed
[0x1F61:1:0x0000]: Configuring cluster attribute reporting
[0x1F61:1:0x0000]: finished channel configuration
[0x1F61:1:0x0001]: Performing cluster binding
[0x1f61] Extending timeout for 0x43 request
[0x1F61:1:0x0003]: Configuring cluster attribute reporting
[0x1F61:1:0x0003]: finished channel configuration
[0x1F61:1:0x1000] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=True, *is_general=False, *is_reply=False), tsn=68, command_id=65, *direction=<Direction.Server_to_Client: 0>, *is_reply=False)
[0x1F61:1:0x1000] Sending request: get_group_identifiers(start_index=0)
[0x1f61] Extending timeout for 0x44 request
[0x1F61:1:0x0020]: Performing cluster binding
[0x1f61] Extending timeout for 0x45 request
[0x1F61:1:0x0102]: Performing cluster binding
[0x1f61] Extending timeout for 0x46 request
[0x1F61:1:0x0008]: Performing cluster binding
[0x1f61] Extending timeout for 0x47 request
[0x1F61:1:0x0006]: Performing cluster binding
[0x1f61] Extending timeout for 0x48 request
[0x1F61:1:0x0019]: finished channel configuration
Error handling '_save_attribute' event with (cc:86:ec:ff:fe:9c:e3:17, 1, 0, 5, 'TRADFRI on/off switch') params: FOREIGN KEY constraint failed
Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x1F61), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=0, profile_id=260, cluster_id=4096, data=Serialized[b'\x19DA\x01\x00\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=29, non_member_radius=0, lqi=142, rssi=None)
[0x1F61:1:0x1000] Received ZCL frame: b'\x19DA\x01\x00\x00'
[0x1F61:1:0x1000] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, *is_cluster=True, *is_general=False, *is_reply=True), tsn=68, command_id=65, *direction=<Direction.Client_to_Server: 1>, *is_reply=True)
[0x1F61:1:0x1000] Decoded ZCL frame: LightLinkCluster:get_group_identifiers_rsp(total=1, start_index=0, group_info_records=[])
[0x0000:2] Cannot add 0x0000 group, no groups cluster
[0x0000:1] Cannot add 0x0000 group, no groups cluster
Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x1F61), src_ep=0, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=67, profile_id=0, cluster_id=32801, data=Serialized[b'C\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
[0x1F61:1:0x0001]: bound 'power' cluster: Status.SUCCESS
[0x1F61:1:0x0001]: Configuring cluster attribute reporting
[0x1F61:1:0x0001] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=73, command_id=<GeneralCommand.Configure_Reporting: 6>, *direction=<Direction.Server_to_Client: 0>, *is_reply=False)
[0x1F61:1:0x0001] Sending request: Configure_Reporting(config_records=[AttributeReportingConfig(direction=0, attrid=0x0020, datatype=32, min_interval=3600, max_interval=10800, reportable_change=1), AttributeReportingConfig(direction=0, attrid=0x0021, datatype=32, min_interval=3600, max_interval=10800, reportable_change=1)])
[0x1f61] Extending timeout for 0x49 request
Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x1F61), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=0, profile_id=260, cluster_id=1, data=Serialized[b'\x08I\x07\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=29, non_member_radius=0, lqi=116, rssi=None)
[0x1F61:1:0x0001] Received ZCL frame: b'\x08I\x07\x00'
[0x1F61:1:0x0001] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=73, command_id=7, *direction=<Direction.Client_to_Server: 1>, *is_reply=True)
[0x1F61:1:0x0001] Decoded ZCL frame: PowerConfiguration1CRCluster:Configure_Reporting_rsp(status_records=[ConfigureReportingResponseRecord(status=<Status.SUCCESS: 0>)])
[0x1F61:1:0x0001]: Successfully configured reporting for '{'battery_voltage': (3600, 10800, 1), 'battery_percentage_remaining': (3600, 10800, 1)}' on 'power' cluster: [ConfigureReportingResponseRecord(status=<Status.SUCCESS: 0>)]
[0x1F61:1:0x0001]: finished channel configuration
[0x6E47](TRADFRI on/off switch): Device seen - marking the device available and resetting counter
[0x6E47](TRADFRI on/off switch): Update device availability -  device available: True - new availability: True - changed: False
[0xEE98](TRADFRI motion sensor): Device seen - marking the device available and resetting counter
[0xEE98](TRADFRI motion sensor): Update device availability -  device available: True - new availability: True - changed: False
[0x1F61:1:0x0020]: Failed to bind 'poll_control' cluster: 
[0x1F61:1:0x0020]: Configuring cluster attribute reporting
[0x1F61:1:0x0020]: Performing channel specific configuration
[0x1F61:1:0x0020] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=74, command_id=<GeneralCommand.Write_Attributes: 2>, *direction=<Direction.Server_to_Client: 0>, *is_reply=False)
[0x1F61:1:0x0020] Sending request: Write_Attributes(attributes=[Attribute(attrid=0x0000, value=TypeValue(type=uint32_t, value=13200))])
[0x1f61] Extending timeout for 0x4a request
[0x1F61:1:0x0102]: Failed to bind 'window_covering' cluster: 
[0x1F61:1:0x0102]: finished channel configuration
[0x1F61:1:0x0008]: Failed to bind 'level' cluster: 
[0x1F61:1:0x0008]: finished channel configuration
[0x1F61:1:0x0006]: Failed to bind 'on_off' cluster: 
[0x1F61:1:0x0006]: finished channel configuration
[0x1F61:1:0x0020]: Couldn't set check-in interval: Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>
[0x1F61:1:0x0020]: finished channel configuration
[0x1F61:1:0x0000]: 'async_configure' stage succeeded
[0x1F61:1:0x0001]: 'async_configure' stage succeeded
[0x1F61:1:0x0003]: 'async_configure' stage succeeded
[0x1F61:1:0x1000]: 'async_configure' stage succeeded
[0x1F61:1:0x0020]: 'async_configure' stage succeeded
[0x1F61:1:0x0102]: 'async_configure' stage succeeded
[0x1F61:1:0x0008]: 'async_configure' stage succeeded
[0x1F61:1:0x0006]: 'async_configure' stage succeeded
[0x1F61:1:0x0019]: 'async_configure' stage succeeded
[0x1F61](TRADFRI on/off switch): completed configuration
[0x1F61:1:0x0003] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=True, *is_general=False, *is_reply=False), tsn=75, command_id=64, *direction=<Direction.Server_to_Client: 0>, *is_reply=False)
[0x1F61:1:0x0003] Sending request: trigger_effect(effect_id=<EffectIdentifier.Okay: 2>, effect_variant=<EffectVariant.Default: 0>)
[0x1f61] Extending timeout for 0x4b request
[0xAC43](TRADFRI motion sensor): Device seen - marking the device available and resetting counter
[0xAC43](TRADFRI motion sensor): Update device availability -  device available: True - new availability: True - changed: False
[0x1F61:1:0x0003]: command failed: 'trigger_effect' args: '()' kwargs '{'effect_id': <EffectIdentifier.Okay: 2>, 'effect_variant': <EffectVariant.Default: 0>}' exception: 'Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>'
[0x1F61](TRADFRI on/off switch): started initialization
[0x1F61:ZDO](TRADFRI on/off switch): 'async_initialize' stage succeeded
[0x1F61:1:0x0000]: initializing channel: from_cache: False
[0x1F61:1:0x0000]: finished channel initialization
[0x1F61:1:0x0001]: initializing channel: from_cache: False
[0x1F61:1:0x0001]: initializing uncached channel attributes: ['battery_voltage', 'battery_percentage_remaining'] - from cache[False]
[0x1F61:1:0x0001]: Reading attributes in chunks: ['battery_voltage', 'battery_percentage_remaining']
[0x1F61:1:0x0001] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=76, command_id=<GeneralCommand.Read_Attributes: 0>, *direction=<Direction.Server_to_Client: 0>, *is_reply=False)
[0x1F61:1:0x0001] Sending request: Read_Attributes(attribute_ids=[32, 33])
[0x1f61] Extending timeout for 0x4c request
[0x1F61:1:0x0003]: initializing channel: from_cache: False
[0x1F61:1:0x0003]: finished channel initialization
[0x1F61:1:0x1000]: initializing channel: from_cache: False
[0x1F61:1:0x1000]: finished channel initialization
[0x1F61:1:0x0020]: initializing channel: from_cache: False
[0x1F61:1:0x0020]: finished channel initialization
[0x1F61:1:0x0102]: initializing channel: from_cache: False
[0x1F61:1:0x0102]: finished channel initialization
[0x1F61:1:0x0008]: initializing channel: from_cache: False
[0x1F61:1:0x0008]: finished channel initialization
[0x1F61:1:0x0006]: initializing channel: from_cache: False
[0x1F61:1:0x0006]: finished channel initialization
[0x1F61:1:0x0019]: initializing channel: from_cache: False
[0x1F61:1:0x0019]: finished channel initialization
[0x1F61:1:0x0001]: failed to get attributes '['battery_voltage', 'battery_percentage_remaining']' on 'power' cluster: Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>
[0x1F61:1:0x0001]: async_initialize: retryable request #1 failed: Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>. Retrying in 0.9s
[0x1F61:1:0x0001]: initializing channel: from_cache: False
[0x1F61:1:0x0001]: initializing uncached channel attributes: ['battery_voltage', 'battery_percentage_remaining'] - from cache[False]
[0x1F61:1:0x0001]: Reading attributes in chunks: ['battery_voltage', 'battery_percentage_remaining']
[0x1F61:1:0x0001] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=77, command_id=<GeneralCommand.Read_Attributes: 0>, *direction=<Direction.Server_to_Client: 0>, *is_reply=False)
[0x1F61:1:0x0001] Sending request: Read_Attributes(attribute_ids=[32, 33])
[0x1f61] Extending timeout for 0x4d request
[0x1F61:1:0x0001]: failed to get attributes '['battery_voltage', 'battery_percentage_remaining']' on 'power' cluster: Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>
[0x1F61:1:0x0001]: async_initialize: retryable request #2 failed: Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>. Retrying in 0.9s
[0x1F61:1:0x0001]: initializing channel: from_cache: False
[0x1F61:1:0x0001]: initializing uncached channel attributes: ['battery_voltage', 'battery_percentage_remaining'] - from cache[False]
[0x1F61:1:0x0001]: Reading attributes in chunks: ['battery_voltage', 'battery_percentage_remaining']
[0x1F61:1:0x0001] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=78, command_id=<GeneralCommand.Read_Attributes: 0>, *direction=<Direction.Server_to_Client: 0>, *is_reply=False)
[0x1F61:1:0x0001] Sending request: Read_Attributes(attribute_ids=[32, 33])
[0x1f61] Extending timeout for 0x4e request
[0x1F61](TRADFRI on/off switch): Device seen - marking the device available and resetting counter
[0x1F61](TRADFRI on/off switch): Update device availability -  device available: True - new availability: True - changed: False
[0x1F61:1:0x0001]: failed to get attributes '['battery_voltage', 'battery_percentage_remaining']' on 'power' cluster: Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>
[0x1F61:1:0x0001]: async_initialize: retryable request #3 failed: Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>. Retrying in 3.6s
[0x1F61:1:0x0001]: initializing channel: from_cache: False
[0x1F61:1:0x0001]: initializing uncached channel attributes: ['battery_voltage', 'battery_percentage_remaining'] - from cache[False]
[0x1F61:1:0x0001]: Reading attributes in chunks: ['battery_voltage', 'battery_percentage_remaining']
[0x1F61:1:0x0001] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=79, command_id=<GeneralCommand.Read_Attributes: 0>, *direction=<Direction.Server_to_Client: 0>, *is_reply=False)
[0x1F61:1:0x0001] Sending request: Read_Attributes(attribute_ids=[32, 33])
[0x1f61] Extending timeout for 0x4f request
[0x1F61:1:0x0001]: failed to get attributes '['battery_voltage', 'battery_percentage_remaining']' on 'power' cluster: Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>
[0x1F61:1:0x0001]: async_initialize: all attempts have failed: [DeliveryError('Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>'), DeliveryError('Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>'), DeliveryError('Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>'), DeliveryError('Request failed after 5 attempts: <Status.MAC_NO_ACK: 233>')]
[0x1F61:1:0x0000]: 'async_initialize' stage succeeded
[0x1F61:1:0x0001]: 'async_initialize' stage succeeded
[0x1F61:1:0x0003]: 'async_initialize' stage succeeded
[0x1F61:1:0x1000]: 'async_initialize' stage succeeded
[0x1F61:1:0x0020]: 'async_initialize' stage succeeded
[0x1F61:1:0x0102]: 'async_initialize' stage succeeded
[0x1F61:1:0x0008]: 'async_initialize' stage succeeded
[0x1F61:1:0x0006]: 'async_initialize' stage succeeded
[0x1F61:1:0x0019]: 'async_initialize' stage succeeded
[0x1F61](TRADFRI on/off switch): power source: Battery or Unknown
[0x1F61](TRADFRI on/off switch): completed initialization
[0x6E47](TRADFRI on/off switch): Device seen - marking the device available and resetting counter
[0x6E47](TRADFRI on/off switch): Update device availability -  device available: True - new availability: True - changed: False

I’ve been able to connect one of the buttons back to the Tradfri bridge

  • Reset it (4 presses of the link button)
  • Leave for 1 hour
  • Power Off+Power On the Tradfri gateway
  • Pair the button in the usual way

I’ll see if any similar long pauses can help me connect it to ZHA.

I remember seeing some conversations on the Hubitat forum that the Ikea buttons are only kind of Zigbee, and very few people, if anyone, has been able to get them to work without the Ikea bridge.

Thanks. Maybe Home Assistant ZHA overloads the button with traffic during Configuration and it gets stuck/locked up?

Previously: my two Ikea Tradfri On/Off buttons were added to HA through Zigbee ZHA. The UI showed “Detected”, “Interview”, and “Configuration” phases. Configuration was slow, and the errors in the log in my first post were reported.

In both cases the buttons appeared to be added to HA, but no events were received (no Log Book entries when the buttons were pressed).

Here’s the happy and confusing end to my story:

  • After leaving one of the buttons for around 30 minutes, I hit the “Reconfigure” button in the Device Info panel, and during that process the Log Book started showing events being received.
  • The other non-responsive button I left with the battery out overnight, and in the morning, when I put the battery back in, the HA Log Book showed the button “just working” and receiving events. (But, with a reported battery level of 255%)

After trying about 4x IKEA Zigbee products, the issue is more likely that IKEA extended the Zigbee protocol to make it easier for non-technical users to pair switches directly with devices.

As an example - a new IKEA one button switch would not pair with HASS, but kept linking with an LED bulb 3m away! The fix was to factory reset the LED bulb, repair it with HASS, re-interview it with HASS, then try the IKEA button again.

The 5-button circular remotes work (some eat CR2032 - re-interview in their final location?), and the cheap mains plugs seem decent repeaters. Beyond that, battery out, WAIT, re-pair, re-interview, hope!

The new range of IKEA kit (not TRADFRI) is going to be interesting, but TBH, I’m holding back until Thread kit appears.

A bit more experience with ZHA:
My IKEA Tradfri controls (switches and motion sensors) almost always lock up and stop sending events any time I hit the “Reconfigure” button in the Home Assistant Settings > Devices > [Device] > Device Info page. Taking the battery out of the controller for a few minutes is enough to bring it back to life, and really there was no need for me to hit Reconfigure except for testing :smiley:

Pairing a bunch of IKEA Tradfri lightbulbs and a Tradfri LED driver with ZHA was very smooth (unlike the switches). The bulbs were just detected and worked.

I did manage to setup a Zigbee binding between a bulb and a controller, and tested that it worked even with ZHA and Home Assistant turned off, which was interesting to get working!

Because I had not invested any effort in setting up a big Zigbee network I followed a guide to setup Zigbee2mqtt to give that a go. The whole collection of kit was detected and configured much more smoothly and quickly than ZHA, although the integration with Home Assistant is not as seamless. Also Zigbee2mqtt exposes extra detail like the light level in the motion sensor, and has better documentation about the devices and if/how they support direct bindings.

I think I’ll stick with Zigbee2mqtt for now for a few sensors and switches, and keep my Tradfri gateway running most of the kit that I have. And maybe I’ll need some extra Zigbee router devices on the home assistant network. :thinking:

I use ZHA, so your more positive experience with Z2M is interesting, thanks.

I’ve not seen ZHA lockup a TRADFRI device, but 7/8ths of Reconfigure attempts do indeed fail for me too.

More mains-powered router devices definitely improved battery life, however some kit seems to need to be paired where it is to be used (i.e not next to HASS). This suggests ZHA may be bad at updating the Zigbee mesh (what Z-Wave would call a network heal) - perhaps Z2M works better.

Since short I migrated to HA (2023.5.4). For Zigbee I am using the deconz integration. In my zigbee collection I have among others a TRADFRI on/off switch and TRÅDFRI control outlet and I want to report they are working flawlessly in HA.

Just offering an update… I have been using Zigbee2MQTT since the beginning and it’s progressively gotten slower and slower to respond - I have a video of the early days where I press a Tradfri button and the Tradfri bulb comes on almost immediately but now it’s a very noticeable delay.
With the recent, albeit temporary, changeover with MQTT, I thought I’d try switching back to ZHA to see how things were going. Good news is that the buttons do report and show up in the entities list. There’s a battery field that populates but shows 180% and the logging updates with single, double, and long button presses, but they aren’t actionable in any way. I spun up a rule to try and get them to work and could not get it to fire with any of the options available for them.
I guess I’ll be sticking with Zigbee2MQTT for awhile…

New to Home Assistant I just want to share how I was able to add Trådfri LED E14 470lm bulb to HA without IKEA gateway. When looking for tip from others I saw one post about quickly switch on / switch of the bulb six times while HA was in paring mode.
And that what I ended up doing, it took more than six on/off but eventually the bulb started to dim down and then it appear in HA.
Are using
HA version 2024.9.1
Zigbee Integration
Conbee II stick
Raspberry Pi 5