Level Bolt locks failing commissioning on my Matter Fabric

I need help troubleshooting why my Level Bolt locks won't integrated into my Home Assistant setup.

I purchased two Level Bolt locks and previously had them integrated into my Matter network via Thread. I had to reset my Matter & Thread setup, but now I cannot get the locks to pair. I called Level for support and they weren't helpful - they basically said they don't support Home Assistant and couldn't provide me any guidance.

Here are additional details that might be helpful:

  • I am running HA on a Dell Optiplex miniPC. I do not have Bluetooth on the PC, but have an ESP32 device in the garage where the locks are located. I am using the Home Assistant Connect ZBT-2 as my Thread Boarder Router.
  • I tried to pair the locks using my iPhone (scanning the QR code and entering the code manually) and through the Bluetooth proxy via Matter WebUI. Both failed.
  • I did factory reset the locks (including removing them from the Level app) before trying to recommission them (and pulled the battery to ensure the device was awake/in pairing mode.)
  • I get an "Unable to Add Accessory" message when trying to add the locks.
  • My home network has multiple VLANs with firewall rules. However, I was on the same VLAN on my phone as my Home Assistant server.
  • I have one other device (an Eve Plug) already on my Matter network. (I ran into several failures when trying to commission it, but it eventually worked.)
  • I do not have an Apple HomePod, Apple TV, any Google devices, etc. I do not have any other Thread networks setup; the ZBT-2 is the only one.

I fed the logs into Claude, which said the lock is not advertising as a Matter commissionable device. As noted above, I factory reset the locks and pulled the battery just prior to the commissioning, so it should still have been in pairing mode. I also tried to commissioning after setting it up in the Level app (using the "integrate with other platform." The locks work fine in the Level app.)

Here is the Matter Server log from when I was trying to commission the lock (Note: node @1:2 is the Eve Plug):

2026-06-08 19:46:16.845 INFO   WebSocketC~erHandler [21] WebSocket connection established
2026-06-08 19:46:16.855 INFO   WebSocketC~erHandler WebSocket server start_listening
2026-06-08 19:46:16.855 INFO   WebSocketC~erHandler WebSocket server start_listening. Returned 1 nodes
2026-06-08 19:46:41.816 INFO   ConfigStorage        Set config key nextNodeId to 5
2026-06-08 19:46:42.206 INFO   Discovery            Initiating discovery of node with discriminator 13
2026-06-08 19:47:41.815 INFO   WebSocketC~erHandler [21] WebSocket connection closed
2026-06-08 19:47:46.991 INFO   WebSocketC~erHandler [22] WebSocket connection established
2026-06-08 19:47:47.000 INFO   WebSocketC~erHandler WebSocket server start_listening
2026-06-08 19:47:47.001 INFO   WebSocketC~erHandler WebSocket server start_listening. Returned 1 nodes
2026-06-08 19:48:15.041 INFO   WebSocketC~erHandler [22] WebSocket connection closed
2026-06-08 19:49:42.211 ERROR  WebSocketC~erHandler [21] WebSocket error response (commission_with_code) 806560861 Commission failed: discovery of node with discriminator 13 failed: No commissionable device was discovered
    at Function.nodeCommissionFailed (/opt/matterjs/node_modules/@matter-server/ws-controller/src/types/WebSocketMessageTypes.ts:100:16)
    at ControllerCommandHandler.commissionNode (/opt/matterjs/node_modules/@matter-server/ws-controller/src/controller/ControllerCommandHandler.ts:964:31)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async WebSocketControllerHandler.#handleCommissionWithCode (/opt/matterjs/node_modules/@matter-server/ws-controller/src/server/WebSocketControllerHandler.ts:699:28)
    at async WebSocketControllerHandler.#handleWebSocketRequest (/opt/matterjs/node_modules/@matter-server/ws-controller/src/server/WebSocketControllerHandler.ts:472:30)
  Caused by: [discovery] discovery of node with discriminator 13 failed: No commissionable device was discovered
    at CommissioningDiscovery.onComplete (/opt/matterjs/node_modules/@matter/node/src/behavior/system/controller/discovery/ParallelPaseDiscovery.ts:182:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
2026-06-08 19:54:46.204 INFO   ClientInteraction    Invoke » @1:2•1c7e⇵b8c0 1.onOff.off with (no payload)
2026-06-08 19:54:46.793 INFO   ClientInteraction    Invoke « @1:2•1c7e⇵b8c0 1.onOff.off status: Success (0)
2026-06-08 19:55:42.224 INFO   ClientInteraction    Invoke » @1:2•1c7e⇵b8c1 1.onOff.off with (no payload)
2026-06-08 19:55:43.787 INFO   ClientInteraction    Invoke « @1:2•1c7e⇵b8c1 1.onOff.off status: Success (0)

Here is my Open Thread Boarder Router log from the same time:

21:40:02.134 [W] P-RadioSpinel-: Handle transmit done failed: ChannelAccessFailure
21:40:02.567 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:105, chksum:8ca6, ecn:no, to:a67ad46bef84e133, sec:no, error:NoAck, prio:net, radio:all
21:40:02.567 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:40:02.567 [N] MeshForwarder-:     dst:[fe80:0:0:0:a47a:d46b:ef84:e133]:19788
21:40:03.402 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:105, chksum:757b, ecn:no, to:a67ad46bef84e133, sec:no, error:NoAck, prio:net, radio:all
21:40:03.402 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:40:03.402 [N] MeshForwarder-:     dst:[fe80:0:0:0:a47a:d46b:ef84:e133]:19788
21:40:19.484 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:426, chksum:62b0, ecn:no, to:0x0825, sec:yes, error:NoAck, prio:low, radio:all
21:40:19.484 [N] MeshForwarder-:     src:[fd9a:de03:e32c:e765:96:3672:7a3c:98bd]:64761
21:40:19.484 [N] MeshForwarder-:     dst:[fde7:217a:a3eb:1:6b8e:9285:2e02:b198]:5540
21:40:33.999 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:90, chksum:6234, ecn:no, to:9e1b0e9312382dd3, sec:no, error:NoAck, prio:net, radio:15.4
21:40:33.999 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:40:33.999 [N] MeshForwarder-:     dst:[fe80:0:0:0:9c1b:e93:1238:2dd3]:19788
21:40:34.761 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:133, chksum:fd4c, ecn:no, to:9e1b0e9312382dd3, sec:no, error:NoAck, prio:net, radio:15.4
21:40:34.762 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:40:34.762 [N] MeshForwarder-:     dst:[fe80:0:0:0:9c1b:e93:1238:2dd3]:19788
21:40:36.386 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:133, chksum:e371, ecn:no, to:9e1b0e9312382dd3, sec:no, error:NoAck, prio:net, radio:15.4
21:40:36.386 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:40:36.386 [N] MeshForwarder-:     dst:[fe80:0:0:0:9c1b:e93:1238:2dd3]:19788
21:40:37.299 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:133, chksum:f78a, ecn:no, to:9e1b0e9312382dd3, sec:no, error:NoAck, prio:net, radio:15.4
21:40:37.299 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:40:37.299 [N] MeshForwarder-:     dst:[fe80:0:0:0:9c1b:e93:1238:2dd3]:19788
21:40:37.984 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:133, chksum:2e99, ecn:no, to:9e1b0e9312382dd3, sec:no, error:NoAck, prio:net, radio:15.4
21:40:37.984 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:40:37.984 [N] MeshForwarder-:     dst:[fe80:0:0:0:9c1b:e93:1238:2dd3]:19788
21:40:39.944 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:133, chksum:3c6f, ecn:no, to:9e1b0e9312382dd3, sec:no, error:NoAck, prio:net, radio:15.4
21:40:39.944 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:40:39.944 [N] MeshForwarder-:     dst:[fe80:0:0:0:9c1b:e93:1238:2dd3]:19788
21:40:41.576 [W] SrpServer-----: Failed to handle DNS message: Drop
21:40:44.156 [W] SrpServer-----: Failed to handle DNS message: Drop
21:40:49.475 [W] SrpServer-----: Failed to handle DNS message: Drop
21:41:28.568 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:83, chksum:7599, ecn:no, to:0x0825, sec:yes, error:NoAck, prio:normal, radio:all
21:41:28.568 [N] MeshForwarder-:     src:[fdfa:8fff:b063:3cc9:531:e104:903f:50ea]:53536
21:41:28.568 [N] MeshForwarder-:     dst:[fdfa:8fff:b063:3cc9:30aa:8331:c78d:5db]:49154
21:41:29.636 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:83, chksum:7598, ecn:no, to:0x0825, sec:yes, error:NoAck, prio:normal, radio:all
21:41:29.636 [N] MeshForwarder-:     src:[fdfa:8fff:b063:3cc9:531:e104:903f:50ea]:53536
21:41:29.636 [N] MeshForwarder-:     dst:[fdfa:8fff:b063:3cc9:30aa:8331:c78d:5db]:49154
21:44:33.432 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:108, chksum:d78f, ecn:no, to:a67ad46bef84e133, sec:no, error:NoAck, prio:net, radio:all
21:44:33.432 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:44:33.432 [N] MeshForwarder-:     dst:[fe80:0:0:0:a47a:d46b:ef84:e133]:19788
21:44:35.641 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:83, chksum:7599, ecn:no, to:0x0825, sec:yes, error:NoAck, prio:normal, radio:all
21:44:35.641 [N] MeshForwarder-:     src:[fdfa:8fff:b063:3cc9:531:e104:903f:50ea]:53536
21:44:35.641 [N] MeshForwarder-:     dst:[fdfa:8fff:b063:3cc9:30aa:8331:c78d:5db]:49154
21:44:37.668 [W] P-RadioSpinel-: Handle transmit done failed: ChannelAccessFailure
21:44:38.553 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:83, chksum:557b, ecn:no, to:0x0825, sec:yes, error:NoAck, prio:normal, radio:all
21:44:38.553 [N] MeshForwarder-:     src:[fdfa:8fff:b063:3cc9:531:e104:903f:50ea]:53536
21:44:38.553 [N] MeshForwarder-:     dst:[fdfa:8fff:b063:3cc9:30aa:8331:c78d:5db]:49154
21:44:40.565 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:83, chksum:557a, ecn:no, to:0x0825, sec:yes, error:NoAck, prio:normal, radio:all
21:44:40.565 [N] MeshForwarder-:     src:[fdfa:8fff:b063:3cc9:531:e104:903f:50ea]:53536
21:44:40.565 [N] MeshForwarder-:     dst:[fdfa:8fff:b063:3cc9:30aa:8331:c78d:5db]:49154
21:44:55.458 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:133, chksum:2404, ecn:no, to:9e1b0e9312382dd3, sec:no, error:NoAck, prio:net, radio:15.4
21:44:55.458 [N] MeshForwarder-:     src:[fe80:0:0:0:8850:f4cd:ccd3:f46]:19788
21:44:55.458 [N] MeshForwarder-:     dst:[fe80:0:0:0:9c1b:e93:1238:2dd3]:19788
21:44:56.936 [W] SrpServer-----: Failed to handle DNS message: Drop
21:45:00.775 [W] SrpServer-----: Failed to handle DNS message: Drop
21:45:04.900 [W] SrpServer-----: Failed to handle DNS message: Drop
21:46:57.366 [W] P-RadioSpinel-: Handle transmit done failed: ChannelAccessFailure
21:46:57.475 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:83, chksum:7599, ecn:no, to:0x0825, sec:yes, error:NoAck, prio:normal, radio:all
21:46:57.475 [N] MeshForwarder-:     src:[fdfa:8fff:b063:3cc9:531:e104:903f:50ea]:53536
21:46:57.475 [N] MeshForwarder-:     dst:[fdfa:8fff:b063:3cc9:30aa:8331:c78d:5db]:49154
21:47:01.029 [N] MeshForwarder-: Failed to send IPv6 UDP msg, len:83, chksum:557b, ecn:no, to:0x0825, sec:yes, error:NoAck, prio:normal, radio:all
21:47:01.029 [N] MeshForwarder-:     src:[fdfa:8fff:b063:3cc9:531:e104:903f:50ea]:53536
21:47:01.029 [N] MeshForwarder-:     dst:[fdfa:8fff:b063:3cc9:30aa:8331:c78d:5db]:49154

I've searched the web, HA community discussion and Discord and cannot find any solutions. I'm at a standstill and looking for any help that can be provided.

Multiple VLANs, IPv6 and DNS - whatever could go wrong?

I suspect you have network configuration issues.

Quick update, in case anyone runs into the same issue.
I first added my locks to Apple HomeKit, then shared the device with Home Assistant. This process worked the first time around and appears to be a known way to get the Level Bolt locks into Home Assistant. As noted above, I don't have an Apple HomePod or AppleTV, but was able to add my locks to Apple Home using my iPhone 15 Pro, which apparently does have a Thread radio.