Matter+Thread devices unavailable

After updating from 2025.12.3 to 2025.12.5. I noticed my matter+thread devices became unavailable. I tried downgrading back to 2025.12.3, but that didn’t fix anything. I also tried upgrading to 2026.1.0 and that also didn’t fix anything.

I’m running Home Assistant in Docker Compose with python-matter-server and openthread/border-router. I have a Connect ZBT-1 plugged into my desktop computer. Everything has been running smoothly for a few months (since installing Home Assistant), but today I noticed things are broken. (I’m not sure if the breakage started right after updating… that could be a red herring.)

When I go to /config/thread in the Home Assistant web UI, I see this.

When I access the matter-server webpage at http://localhost:5580, I see this. All my matter+thread devices say “OFFLINE”. However, my matter+wifi devices are fully operational.

Python Matter Server
FabricId: 1
Compressed FabricId: 6979770292376974000
SDK Wheels Version: 2025.7.0
Schema Version: 11
Node count: 18

Nodes
Node 1 OFFLINE
Eve Systems | Eve Energy 20EBU4101
Node 2 OFFLINE
Eve Systems | Eve Energy 20EBU4101
Node 3
Meross | MTS300

Here’s my Docker Compose file.

name: homeassistant
services:
  homeassistant:
    container_name: homeassistant
    image: ${HOME_ASSISTANT_IMAGE}
    restart: unless-stopped
    network_mode: host
    privileged: true
    volumes:
      - /tank/homeassistant/config:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro

  matter-server:
    container_name: matter-server
    image: ${MATTER_SERVER_IMAGE}
    restart: unless-stopped
    network_mode: host
    security_opt:
      - apparmor=unconfined
    volumes:
      - /tank/homeassistant/matter-data:/data

  otbr:
    container_name: otbr
    image: ${OTBR_IMAGE}
    restart: unless-stopped
    network_mode: host
    privileged: true
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/ttyUSB0
      - /dev/net/tun
    environment:
      - OT_RCP_DEVICE=spinel+hdlc+uart:///dev/ttyUSB0?uart-baudrate=460800
      - OT_INFRA_IF=enp129s0
      - OT_THREAD_IF=wpan0
      - OT_LOG_LEVEL=7
    volumes:
      - /tank/homeassistant/otbr-data:/data

I’m using an .env file with Docker Compose as well, here it is.

HOME_ASSISTANT_IMAGE=ghcr.io/home-assistant/home-assistant:2026.1.0
MATTER_SERVER_IMAGE=ghcr.io/matter-js/python-matter-server:8.1.2
OTBR_IMAGE=openthread/border-router:latest

Here are the Docker compose logs.

homeassistant  | 2026-01-08T06:46:48.693987573Z s6-rc: info: service s6rc-oneshot-runner: starting
homeassistant  | 2026-01-08T06:46:48.695419469Z s6-rc: info: service s6rc-oneshot-runner successfully started
homeassistant  | 2026-01-08T06:46:48.695609649Z s6-rc: info: service fix-attrs: starting
homeassistant  | 2026-01-08T06:46:48.697015573Z s6-rc: info: service fix-attrs successfully started
otbr           | 2026-01-08T06:46:48.682103764Z s6-rc: info: service s6rc-oneshot-runner: starting
otbr           | 2026-01-08T06:46:48.683674028Z s6-rc: info: service s6rc-oneshot-runner successfully started
homeassistant  | 2026-01-08T06:46:48.697208583Z s6-rc: info: service legacy-cont-init: starting
matter-server  | 2026-01-08T06:46:49.445986657Z 2026-01-08 06:46:49.445 (MainThread) INFO [matter_server.server.stack] Initializing CHIP/Matter Logging...
matter-server  | 2026-01-08T06:46:49.446037361Z 2026-01-08 06:46:49.445 (MainThread) INFO [matter_server.server.stack] Initializing CHIP/Matter Controller Stack...
matter-server  | 2026-01-08T06:46:49.456708536Z [1767854809.456385][1:1] CHIP:CTL: Setting attestation nonce to random value
homeassistant  | 2026-01-08T06:46:48.698540656Z s6-rc: info: service legacy-cont-init successfully started
matter-server  | 2026-01-08T06:46:49.456750773Z [1767854809.456488][1:1] CHIP:CTL: Setting CSR nonce to random value
homeassistant  | 2026-01-08T06:46:48.698548012Z s6-rc: info: service legacy-services: starting
homeassistant  | 2026-01-08T06:46:48.701039000Z services-up: info: copying legacy longrun home-assistant (no readiness notification)
homeassistant  | 2026-01-08T06:46:48.754645778Z s6-rc: info: service legacy-services successfully started
matter-server  | 2026-01-08T06:46:49.457480159Z [1767854809.457237][1:1] CHIP:DL: ChipLinuxStorage::Init: Using KVS config file: /tmp/chip_kvs
matter-server  | 2026-01-08T06:46:49.457504626Z [1767854809.457361][1:1] CHIP:DL: ChipLinuxStorage::Init: Using KVS config file: /data/chip_factory.ini
matter-server  | 2026-01-08T06:46:49.457511878Z [1767854809.457433][1:1] CHIP:DL: ChipLinuxStorage::Init: Using KVS config file: /data/chip_config.ini
matter-server  | 2026-01-08T06:46:49.457516751Z [1767854809.457445][1:1] CHIP:DL: ChipLinuxStorage::Init: Using KVS config file: /data/chip_counters.ini
matter-server  | 2026-01-08T06:46:49.470836586Z [1767854809.470520][1:1] CHIP:DL: Wrote settings to /data/chip_counters.ini
matter-server  | 2026-01-08T06:46:49.470870133Z [1767854809.470529][1:1] CHIP:DL: NVS set: chip-counters/reboot-count = 35 (0x23)
matter-server  | 2026-01-08T06:46:49.470894832Z [1767854809.470794][1:1] CHIP:DL: Got Ethernet interface: enp129s0
matter-server  | 2026-01-08T06:46:49.471052971Z [1767854809.470928][1:1] CHIP:DL: Found the primary Ethernet interface:enp129s0
matter-server  | 2026-01-08T06:46:49.471241760Z [1767854809.471122][1:1] CHIP:DL: Failed to get WiFi interface
matter-server  | 2026-01-08T06:46:49.471246869Z [1767854809.471125][1:1] CHIP:DL: Failed to reset WiFi statistic counts
matter-server  | 2026-01-08T06:46:49.471247931Z [1767854809.471126][1:1] CHIP:PAF: WiFiPAF: WiFiPAFLayer::Init()
matter-server  | 2026-01-08T06:46:49.471451125Z 2026-01-08 06:46:49.471 (MainThread) INFO [chip.storage] Initializing persistent storage from file: /data/chip.json
matter-server  | 2026-01-08T06:46:49.471456817Z 2026-01-08 06:46:49.471 (MainThread) INFO [chip.storage] Loading configuration from /data/chip.json...
matter-server  | 2026-01-08T06:46:49.535862023Z 2026-01-08 06:46:49.535 (MainThread) INFO [chip.CertificateAuthority] Loading certificate authorities from storage...
matter-server  | 2026-01-08T06:46:49.535887837Z 2026-01-08 06:46:49.535 (MainThread) INFO [chip.CertificateAuthority] New CertificateAuthority at index 1
matter-server  | 2026-01-08T06:46:49.536845266Z 2026-01-08 06:46:49.536 (MainThread) INFO [chip.CertificateAuthority] Loading fabric admins from storage...
matter-server  | 2026-01-08T06:46:49.536850868Z 2026-01-08 06:46:49.536 (MainThread) INFO [chip.FabricAdmin] New FabricAdmin: FabricId: 0x0000000000000001, VendorId = 0xFFF1
matter-server  | 2026-01-08T06:46:49.537018231Z 2026-01-08 06:46:49.536 (MainThread) INFO [matter_server.server.stack] CHIP Controller Stack initialized.
matter-server  | 2026-01-08T06:46:49.537023432Z 2026-01-08 06:46:49.536 (MainThread) INFO [matter_server.server.server] Matter Server initialized
matter-server  | 2026-01-08T06:46:49.537024689Z 2026-01-08 06:46:49.536 (MainThread) INFO [matter_server.server.server] Using 'None' as primary interface (for link-local addresses)
matter-server  | 2026-01-08T06:46:49.537318105Z 2026-01-08 06:46:49.537 (MainThread) INFO [matter_server.server.server] Starting the Matter Server...
otbr           | 2026-01-08T06:46:48.683762855Z s6-rc: info: service fix-attrs: starting
otbr           | 2026-01-08T06:46:48.687183466Z s6-rc: info: service fix-attrs successfully started
otbr           | 2026-01-08T06:46:48.687499442Z s6-rc: info: service legacy-cont-init: starting
otbr           | 2026-01-08T06:46:48.689547887Z s6-rc: info: service legacy-cont-init successfully started
otbr           | 2026-01-08T06:46:48.689708104Z s6-rc: info: service otbr-agent: starting
otbr           | 2026-01-08T06:46:48.691878693Z Configuring OpenThread firewall...
otbr           | 2026-01-08T06:46:48.697950420Z Configuring OpenThread NAT64...
otbr           | 2026-01-08T06:46:48.700526448Z Starting otbr-agent...
otbr           | 2026-01-08T06:46:48.702034243Z [NOTE]-AGENT---: Running 0.3.0-cf9da12
otbr           | 2026-01-08T06:46:48.702039744Z [NOTE]-AGENT---: Thread version: 1.4.0
otbr           | 2026-01-08T06:46:48.702041373Z [NOTE]-AGENT---: Thread interface: wpan0
otbr           | 2026-01-08T06:46:48.702042514Z [NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyUSB0?uart-baudrate=460800
otbr           | 2026-01-08T06:46:48.702043741Z [NOTE]-AGENT---: Radio URL: trel://enp129s0
otbr           | 2026-01-08T06:46:48.702057518Z [NOTE]-ILS-----: Infra link selected: enp129s0
otbr           | 2026-01-08T06:46:48.702063216Z [INFO]-RCP_HOS-: OpenThread log level changed to 5
otbr           | 2026-01-08T06:46:48.703306684Z 49d.22:14:03.569 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:0, cmd:RESET
otbr           | 2026-01-08T06:46:48.703313338Z 49d.22:14:03.569 [D] P-SpinelDrive-: Waiting response: key=0
otbr           | 2026-01-08T06:46:48.705954731Z 49d.22:14:03.572 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:0, cmd:PROP_VALUE_IS, key:LAST_STATUS, status:RESET_POWER_ON
matter-server  | 2026-01-08T06:46:49.539020566Z 2026-01-08 06:46:49.538 (MainThread) INFO [matter_server.server.helpers.paa_certificates] Skip fetching certificates (already fetched within the last 24h).
matter-server  | 2026-01-08T06:46:49.539028043Z 2026-01-08 06:46:49.538 (MainThread) INFO [chip.FabricAdmin] Allocating new controller with CaIndex: 1, FabricId: 0x0000000000000001, NodeId: 0x000000000001B669, CatTags: []
matter-server  | 2026-01-08T06:46:49.558037136Z 2026-01-08 06:46:49.557 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000065: Network is unreachable
matter-server  | 2026-01-08T06:46:49.558213288Z 2026-01-08 06:46:49.558 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000065: Network is unreachable
matter-server  | 2026-01-08T06:46:49.558545042Z 2026-01-08 06:46:49.558 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000065: Network is unreachable
matter-server  | 2026-01-08T06:46:49.558782458Z 2026-01-08 06:46:49.558 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000065: Network is unreachable
matter-server  | 2026-01-08T06:46:49.558803206Z 2026-01-08 06:46:49.558 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/inet/UDPEndPointImplSockets.cpp:417: OS Error 0x02000065: Network is unreachable
matter-server  | 2026-01-08T06:46:49.559175542Z 2026-01-08 06:46:49.559 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/lib/dnssd/minimal_mdns/Server.cpp:344: CHIP Error 0x00000046: No endpoint was available to send the message
matter-server  | 2026-01-08T06:46:49.559176684Z 2026-01-08 06:46:49.559 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/lib/dnssd/minimal_mdns/Server.cpp:344: CHIP Error 0x00000046: No endpoint was available to send the message
matter-server  | 2026-01-08T06:46:49.559177599Z 2026-01-08 06:46:49.559 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/lib/dnssd/minimal_mdns/Server.cpp:344: CHIP Error 0x00000046: No endpoint was available to send the message
matter-server  | 2026-01-08T06:46:49.559316248Z 2026-01-08 06:46:49.559 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/lib/dnssd/minimal_mdns/Server.cpp:344: CHIP Error 0x00000046: No endpoint was available to send the message
matter-server  | 2026-01-08T06:46:49.559317419Z 2026-01-08 06:46:49.559 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/lib/dnssd/minimal_mdns/Server.cpp:344: CHIP Error 0x00000046: No endpoint was available to send the message
matter-server  | 2026-01-08T06:46:49.559318495Z 2026-01-08 06:46:49.559 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/lib/dnssd/minimal_mdns/Server.cpp:344: CHIP Error 0x00000046: No endpoint was available to send the message
matter-server  | 2026-01-08T06:46:49.559484532Z 2026-01-08 06:46:49.559 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/lib/dnssd/minimal_mdns/Server.cpp:344: CHIP Error 0x00000046: No endpoint was available to send the message
matter-server  | 2026-01-08T06:46:49.559485639Z 2026-01-08 06:46:49.559 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/lib/dnssd/minimal_mdns/Server.cpp:344: CHIP Error 0x00000046: No endpoint was available to send the message
matter-server  | 2026-01-08T06:46:49.559486578Z 2026-01-08 06:46:49.559 (Dummy-2) CHIP_ERROR [chip.native.DIS] Failed to advertise records: src/lib/dnssd/minimal_mdns/Server.cpp:344: CHIP Error 0x00000046: No endpoint was available to send the message
otbr           | 2026-01-08T06:46:48.705959284Z 49d.22:14:03.572 [I] P-SpinelDrive-: co-processor reset: RESET_POWER_ON
otbr           | 2026-01-08T06:46:48.705960813Z 49d.22:14:03.572 [C] P-SpinelDrive-: Software reset co-processor successfully
otbr           | 2026-01-08T06:46:48.705962139Z 49d.22:14:03.572 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:PROTOCOL_VERSION
otbr           | 2026-01-08T06:46:48.705963333Z 49d.22:14:03.572 [D] P-SpinelDrive-: Waiting response: key=1
otbr           | 2026-01-08T06:46:48.708756282Z 49d.22:14:03.575 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_IS, key:PROTOCOL_VERSION, major:4, minor:3
otbr           | 2026-01-08T06:46:48.708771039Z 49d.22:14:03.575 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:NCP_VERSION
otbr           | 2026-01-08T06:46:48.708772686Z 49d.22:14:03.575 [D] P-SpinelDrive-: Waiting response: key=2
matter-server  | 2026-01-08T06:46:49.569136361Z 2026-01-08 06:46:49.569 (MainThread) INFO [matter_server.server.vendor_info] Loading vendor info from storage.
otbr           | 2026-01-08T06:46:48.713127027Z 49d.22:14:03.579 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_IS, key:NCP_VERSION, version:SL-OPENTHREAD/2.4.4.0_GitHub-7074a43e4; EFR32; Oct 21 2024 14:40:57
otbr           | 2026-01-08T06:46:48.713135335Z 49d.22:14:03.579 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:CAPS
otbr           | 2026-01-08T06:46:48.713136733Z 49d.22:14:03.579 [D] P-SpinelDrive-: Waiting response: key=5
otbr           | 2026-01-08T06:46:48.715893501Z 49d.22:14:03.582 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_IS, key:CAPS, caps:COUNTERS UNSOL_UPDATE_FILTER 802_15_4_2450MHZ_OQPSK CONFIG_RADIO MAC_RAW RCP_API_VERSION RCP_MIN_HOST_API_VERSION RCP_RESET_TO_BOOTLOADER OPENTHREAD_LOG_METADATA 
otbr           | 2026-01-08T06:46:48.718817536Z 49d.22:14:03.585 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:HWADDR
otbr           | 2026-01-08T06:46:48.718824287Z 49d.22:14:03.585 [D] P-RadioSpinel-: Wait response: tid=1 key=8
otbr           | 2026-01-08T06:46:48.721812815Z 49d.22:14:03.588 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_IS, key:HWADDR, eui64:04e3e5fffe8ea1af
otbr           | 2026-01-08T06:46:48.721816982Z 49d.22:14:03.588 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:2, cmd:PROP_VALUE_GET, key:RCP_API_VERSION
otbr           | 2026-01-08T06:46:48.721818351Z 49d.22:14:03.588 [D] P-RadioSpinel-: Wait response: tid=2 key=176
otbr           | 2026-01-08T06:46:48.724515689Z 49d.22:14:03.591 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:2, cmd:PROP_VALUE_IS, key:RCP_API_VERSION, version:9
otbr           | 2026-01-08T06:46:48.724523248Z 49d.22:14:03.591 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:3, cmd:PROP_VALUE_GET, key:RCP_MIN_HOST_API_VERSION
otbr           | 2026-01-08T06:46:48.724524692Z 49d.22:14:03.591 [D] P-RadioSpinel-: Wait response: tid=3 key=177
otbr           | 2026-01-08T06:46:48.727305994Z 49d.22:14:03.593 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:3, cmd:PROP_VALUE_IS, key:RCP_MIN_HOST_API_VERSION, min-host-version:4
otbr           | 2026-01-08T06:46:48.727311629Z 49d.22:14:03.593 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:4, cmd:PROP_VALUE_GET, key:RADIO_CAPS
matter-server  | 2026-01-08T06:46:49.571143585Z 2026-01-08 06:46:49.570 (MainThread) INFO [matter_server.server.vendor_info] Loaded 384 vendors from storage.
otbr           | 2026-01-08T06:46:48.727313069Z 49d.22:14:03.593 [D] P-RadioSpinel-: Wait response: tid=4 key=4619
matter-server  | 2026-01-08T06:46:49.571149554Z 2026-01-08 06:46:49.571 (MainThread) INFO [matter_server.server.vendor_info] Fetching the latest vendor info from DCL.
matter-server  | 2026-01-08T06:46:50.083762427Z 2026-01-08 06:46:50.083 (MainThread) INFO [matter_server.server.vendor_info] Fetched 383 vendors from DCL.
matter-server  | 2026-01-08T06:46:50.084055061Z 2026-01-08 06:46:50.083 (MainThread) INFO [matter_server.server.vendor_info] Saving vendor info to storage.
matter-server  | 2026-01-08T06:46:50.093010327Z 2026-01-08 06:46:50.092 (MainThread) INFO [matter_server.server.device_controller] Loaded 18 nodes from stored configuration
matter-server  | 2026-01-08T06:46:50.096400075Z 2026-01-08 06:46:50.096 (MainThread) INFO [matter_server.server.server] Matter Server successfully initialized.
matter-server  | 2026-01-08T06:46:50.649992976Z 2026-01-08 06:46:50.649 (MainThread) INFO [matter_server.server.device_controller.mdns] <Node:3> Discovered on mDNS
matter-server  | 2026-01-08T06:46:50.650019904Z 2026-01-08 06:46:50.649 (MainThread) INFO [matter_server.server.device_controller] <Node:3> Setting-up node...
matter-server  | 2026-01-08T06:46:50.657794151Z 2026-01-08 06:46:50.657 (MainThread) INFO [matter_server.server.device_controller.mdns] <Node:16> Discovered on mDNS
matter-server  | 2026-01-08T06:46:50.657962481Z 2026-01-08 06:46:50.657 (MainThread) INFO [matter_server.server.device_controller] <Node:16> Setting-up node...
matter-server  | 2026-01-08T06:46:51.327876750Z 2026-01-08 06:46:51.327 (MainThread) INFO [matter_server.server.device_controller.mdns] <Node:16> Discovered on mDNS
matter-server  | 2026-01-08T06:46:53.441913741Z 2026-01-08 06:46:53.441 (MainThread) INFO [matter_server.server.device_controller] <Node:16> Setting up attributes and events subscription.
matter-server  | 2026-01-08T06:46:53.445092102Z 2026-01-08 06:46:53.444 (MainThread) INFO [matter_server.server.device_controller] <Node:3> Setting up attributes and events subscription.
matter-server  | 2026-01-08T06:46:54.558087691Z 2026-01-08 06:46:54.557 (MainThread) INFO [matter_server.server.device_controller] <Node:16> Subscription succeeded with report interval [1, 60]
otbr           | 2026-01-08T06:46:48.730196824Z 49d.22:14:03.596 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:4, cmd:PROP_VALUE_IS, key:RADIO_CAPS, caps:255
matter-server  | 2026-01-08T06:46:54.566781948Z 2026-01-08 06:46:54.566 (MainThread) INFO [matter_server.server.device_controller] <Node:3> Subscription succeeded with report interval [1, 60]
otbr           | 2026-01-08T06:46:48.732516255Z 49d.22:14:03.599 [D] P-Trel--------: platformTrelInit(aTrelUrl:"trel://enp129s0")
otbr           | 2026-01-08T06:46:48.732522465Z 49d.22:14:03.599 [D] P-Trel--------: otSysTrelInit(aInterfaceName:"enp129s0")
otbr           | 2026-01-08T06:46:48.732968082Z 49d.22:14:03.599 [I] P-Netif-------: Sent request#1 to set addr_gen_mode to 1
otbr           | 2026-01-08T06:46:48.732974004Z 49d.22:14:03.599 [I] P-Resolver----: Got nameserver #0: 192.168.50.1
otbr           | 2026-01-08T06:46:48.732975123Z 00:00:00.000 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:5, cmd:PROP_VALUE_GET, key:PHY_CHAN_SUPPORTED
otbr           | 2026-01-08T06:46:48.732981808Z 00:00:00.000 [D] P-RadioSpinel-: Wait response: tid=5 key=34
otbr           | 2026-01-08T06:46:48.736134189Z 00:00:00.003 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:5, cmd:PROP_VALUE_IS, key:PHY_CHAN_SUPPORTED, channelMask:0x07fff800
otbr           | 2026-01-08T06:46:48.736142235Z 00:00:00.003 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:6, cmd:PROP_VALUE_SET, key:PHY_ENABLED, enabled:1
otbr           | 2026-01-08T06:46:48.736143784Z 00:00:00.003 [D] P-RadioSpinel-: Wait response: tid=6 key=32
otbr           | 2026-01-08T06:46:48.738802043Z 00:00:00.006 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:6, cmd:PROP_VALUE_IS, key:PHY_ENABLED, enabled:1
otbr           | 2026-01-08T06:46:48.738809356Z 00:00:00.006 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:7, cmd:PROP_VALUE_SET, key:MAC_15_4_PANID, panid:0xffff
otbr           | 2026-01-08T06:46:48.738810859Z 00:00:00.006 [D] P-RadioSpinel-: Wait response: tid=7 key=54
otbr           | 2026-01-08T06:46:48.741469719Z 00:00:00.008 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:7, cmd:PROP_VALUE_IS, key:MAC_15_4_PANID, panid:0xffff
otbr           | 2026-01-08T06:46:48.741473920Z 00:00:00.009 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:8, cmd:PROP_VALUE_SET, key:MAC_15_4_SADDR, saddr:0x0000
otbr           | 2026-01-08T06:46:48.741475063Z 00:00:00.009 [D] P-RadioSpinel-: Wait response: tid=8 key=53
otbr           | 2026-01-08T06:46:48.744232858Z 00:00:00.011 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:8, cmd:PROP_VALUE_IS, key:MAC_15_4_SADDR, saddr:0x0000
otbr           | 2026-01-08T06:46:48.744240559Z 00:00:00.011 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:9, cmd:PROP_VALUE_GET, key:PHY_RX_SENSITIVITY
otbr           | 2026-01-08T06:46:48.744242006Z 00:00:00.011 [D] P-RadioSpinel-: Wait response: tid=9 key=39
otbr           | 2026-01-08T06:46:48.746724837Z 00:00:00.014 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:9, cmd:PROP_VALUE_IS, key:PHY_RX_SENSITIVITY, sensitivity:-100
otbr           | 2026-01-08T06:46:48.746730465Z 00:00:00.014 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:10, cmd:PROP_VALUE_SET, key:RCP_MAC_KEY, keyIdMode:8, keyId:1, prevKey:***, currKey:***, nextKey:***
otbr           | 2026-01-08T06:46:48.746731949Z 00:00:00.014 [D] P-RadioSpinel-: Wait response: tid=10 key=2048
otbr           | 2026-01-08T06:46:48.750628905Z 00:00:00.018 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:10, cmd:PROP_VALUE_IS, key:LAST_STATUS, status:OK
otbr           | 2026-01-08T06:46:48.750636080Z 00:00:00.018 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:11, cmd:PROP_VALUE_SET, key:MAC_15_4_LADDR, laddr:ae9e4802266a9d28
otbr           | 2026-01-08T06:46:48.750637523Z 00:00:00.018 [D] P-RadioSpinel-: Wait response: tid=11 key=52
otbr           | 2026-01-08T06:46:48.753574509Z 00:00:00.020 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:11, cmd:PROP_VALUE_IS, key:MAC_15_4_LADDR, laddr:ae9e4802266a9d28
otbr           | 2026-01-08T06:46:48.753582498Z 00:00:00.021 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:12, cmd:PROP_VALUE_SET, key:MAC_15_4_SADDR, saddr:0xfffe
otbr           | 2026-01-08T06:46:48.753583894Z 00:00:00.021 [D] P-RadioSpinel-: Wait response: tid=12 key=53
otbr           | 2026-01-08T06:46:48.756233990Z 00:00:00.023 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:12, cmd:PROP_VALUE_IS, key:MAC_15_4_SADDR, saddr:0xfffe
otbr           | 2026-01-08T06:46:48.756244956Z 00:00:00.023 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:13, cmd:PROP_VALUE_SET, key:MAC_SRC_MATCH_SHORT_ADDRESSES, saddr:none
otbr           | 2026-01-08T06:46:48.756246542Z 00:00:00.023 [D] P-RadioSpinel-: Wait response: tid=13 key=4868
otbr           | 2026-01-08T06:46:48.758857615Z 00:00:00.026 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:13, cmd:PROP_VALUE_IS, key:LAST_STATUS, status:OK
otbr           | 2026-01-08T06:46:48.758863386Z 00:00:00.026 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:14, cmd:PROP_VALUE_SET, key:MAC_SRC_MATCH_EXTENDED_ADDRESSES, extaddr:none
otbr           | 2026-01-08T06:46:48.758864892Z 00:00:00.026 [D] P-RadioSpinel-: Wait response: tid=14 key=4869
otbr           | 2026-01-08T06:46:48.761625931Z 00:00:00.029 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:14, cmd:PROP_VALUE_IS, key:LAST_STATUS, status:OK
otbr           | 2026-01-08T06:46:48.761630890Z 00:00:00.029 [I] CslTxScheduler: Set frame request ahead: 7605 usec
otbr           | 2026-01-08T06:46:48.761632119Z 00:00:00.029 [I] ChildSupervsn-: Timeout: 0 -> 190
otbr           | 2026-01-08T06:46:48.761633226Z 00:00:00.029 [D] P-Trel--------: PrepareSocket()
otbr           | 2026-01-08T06:46:48.761633997Z 00:00:00.029 [I] TrelInterface-: Enabled interface, local port:52528
otbr           | 2026-01-08T06:46:48.762168124Z 00:00:00.029 [I] InfraIf-------: Init infra netif 2
otbr           | 2026-01-08T06:46:48.762170263Z 00:00:00.029 [N] BorderRouting-: No valid /48 BR ULA prefix found in settings, generating new one
otbr           | 2026-01-08T06:46:48.764166568Z 00:00:00.031 [I] Settings------: Saved BrUlaPrefix fdf4:cdec:6c1f::/48
otbr           | 2026-01-08T06:46:48.764175837Z 00:00:00.031 [N] BorderRouting-: BR ULA prefix: fdf4:cdec:6c1f::/48 (generated)
otbr           | 2026-01-08T06:46:48.764177147Z 00:00:00.031 [I] BorderRouting-: Generated local OMR prefix: fdf4:cdec:6c1f:1::/64
otbr           | 2026-01-08T06:46:48.764177961Z 00:00:00.031 [I] BorderRouting-: Generated local NAT64 prefix: fdf4:cdec:6c1f:2:0:0::/96
otbr           | 2026-01-08T06:46:48.764178786Z 00:00:00.031 [N] BorderRouting-: Local on-link prefix: fdde:ad00:beef:cafe::/64
otbr           | 2026-01-08T06:46:48.764179532Z 00:00:00.031 [I] InfraIf-------: State changed: NOT RUNNING -> RUNNING
otbr           | 2026-01-08T06:46:48.764180501Z 00:00:00.031 [I] P-MdnsSocket--: Successfully opened IPv4 socket
otbr           | 2026-01-08T06:46:48.764237242Z 00:00:00.031 [I] P-MdnsSocket--: Successfully opened IPv6 socket
otbr           | 2026-01-08T06:46:48.764659700Z 00:00:00.032 [I] P-MdnsSocket--: Enabled
otbr           | 2026-01-08T06:46:48.764664933Z 00:00:00.032 [I] MulticastDns--: Auto-enabling on infra-if-index 2
otbr           | 2026-01-08T06:46:48.766458725Z 00:00:00.033 [I] Settings------: Saved BorderAgentId {id:c9ea416ae381e6b86f9640be0f4196ca}
otbr           | 2026-01-08T06:46:48.766464803Z 00:00:00.033 [I] BorderRouting-: Enabling
otbr           | 2026-01-08T06:46:48.766466141Z 00:00:00.033 [I] Nat64---------: IPv4 CIDR for NAT64: 192.168.255.0/24 (254 addresses)
otbr           | 2026-01-08T06:46:48.766538207Z [INFO]-HELPER--: Set state callback: OK
otbr           | 2026-01-08T06:46:48.766542331Z 00:00:00.034 [I] Nat64---------: State: Disabled -> NotRunning
otbr           | 2026-01-08T06:46:48.766549033Z 00:00:00.034 [I] BbrLocal------: Add Domain Prefix: ::/0, NotFound
otbr           | 2026-01-08T06:46:48.766551864Z 00:00:00.034 [I] BbrLocal------: Add BBR Service: seqno (20), delay (5s), timeout (3600s), InvalidState
otbr           | 2026-01-08T06:46:48.766552835Z [WARN]-UTILS---: /usr/src/ot-br-posix/src/rest/network_diag_handler.cpp:1300 lacking some attributes for deviceId ae9e4802266a9d28
otbr           | 2026-01-08T06:46:48.766553740Z [WARN]-UTILS---: /usr/src/ot-br-posix/src/rest/network_diag_handler.cpp:1244 cannot get LeaderData while detached
otbr           | 2026-01-08T06:46:48.766554578Z [WARN]-UTILS---: /usr/src/ot-br-posix/src/rest/rest_devices_coll.cpp:232 - AddItem - ae9e4802266a9d28
otbr           | 2026-01-08T06:46:48.766555341Z [INFO]-APP-----: Radio Co-processor version: SL-OPENTHREAD/2.4.4.0_GitHub-7074a43e4; EFR32; Oct 21 2024 14:40:57
otbr           | 2026-01-08T06:46:48.766556105Z 00:00:00.034 [I] Notifier------: StateChanged (0x42038210) [MLAddr NetData PanId NetName ExtPanId BbrState Nat64]
otbr           | 2026-01-08T06:46:48.766559222Z 00:00:00.034 [I] BbrLeader-----: PBBR state: None
otbr           | 2026-01-08T06:46:48.766774707Z 00:00:00.034 [I] Bbr-----------: Start listening on port 61631
otbr           | 2026-01-08T06:46:48.766778909Z 00:00:00.034 [I] Bbr-----------: Backbone TMF subscribes ff32:40:fdde:ad00:beef:0:0:3: OK
otbr           | 2026-01-08T06:46:48.766780210Z 00:00:00.034 [I] BbrManager----: Start Backbone TMF agent: OK
otbr           | 2026-01-08T06:46:48.766781229Z [INFO]-REST----: RestWebServer listening on 127.0.0.1:8081
otbr           | 2026-01-08T06:46:48.767670930Z 00:00:00.035 [I] Platform------: Execute command `ipset flush otbr-ingress-allow-dst-swap` = 0
otbr           | 2026-01-08T06:46:48.768492589Z 00:00:00.036 [I] Platform------: Execute command `ipset flush otbr-ingress-deny-src-swap` = 0
otbr           | 2026-01-08T06:46:48.769235695Z 00:00:00.036 [I] Platform------: Execute command `ipset add otbr-ingress-deny-src-swap fdde:ad00:beef:0::/64 -exist` = 0
otbr           | 2026-01-08T06:46:48.769937625Z 00:00:00.037 [I] Platform------: Execute command `ipset swap otbr-ingress-deny-src-swap otbr-ingress-deny-src` = 0
otbr           | 2026-01-08T06:46:48.770660852Z 00:00:00.038 [I] Platform------: Execute command `ipset swap otbr-ingress-allow-dst-swap otbr-ingress-allow-dst` = 0
otbr           | 2026-01-08T06:46:48.770667737Z 00:00:00.038 [I] P-Netif-------: NAT64 CIDR updated to 192.168.255.0/24.
otbr           | 2026-01-08T06:46:48.770671212Z 00:00:00.038 [I] P-Netif-------: Sent request#2 to delete route 192.168.255.0/24
otbr           | 2026-01-08T06:46:48.770672205Z 00:00:00.038 [I] P-Netif-------: Deleting route for NAT64
otbr           | 2026-01-08T06:46:48.770673095Z 00:00:00.038 [I] P-McastRtMgr--: Disable: OK
otbr           | 2026-01-08T06:46:48.770673865Z [DEBG]-BBA-----: BackboneAgent: HandleBackboneRouterState: state=1, mBackboneRouterState=0
otbr           | 2026-01-08T06:46:48.770674648Z 00:00:00.038 [I] RouterTable---: Route table
otbr           | 2026-01-08T06:46:48.770676932Z 00:00:00.038 [I] TrelDiscoverer: Registering service otTRELae9e4802266a9d28._trel._udp
otbr           | 2026-01-08T06:46:48.770677857Z 00:00:00.038 [I] TrelDiscoverer:     port:52528, ext-addr:ae9e4802266a9d28, ext-panid:dead00beef00cafe
otbr           | 2026-01-08T06:46:48.771000120Z 00:00:00.038 [I] MulticastDns--: Adding host address 192.168.50.17
otbr           | 2026-01-08T06:46:48.771006864Z 00:00:00.038 [I] MulticastDns--: Adding host address fe80:0:0:0:9e6b:ff:fe94:e84b
otbr           | 2026-01-08T06:46:48.771009467Z 00:00:00.038 [I] P-Netif-------: Host netif is down
otbr           | 2026-01-08T06:46:48.771379324Z 00:00:00.038 [I] P-Netif-------: Succeeded to process request#1
otbr           | 2026-01-08T06:46:48.771382558Z 00:00:00.038 [W] P-Netif-------: Failed to process request#2: No such process
otbr           | 2026-01-08T06:46:49.006426781Z s6-rc: info: service otbr-agent successfully started
otbr           | 2026-01-08T06:46:49.006585091Z s6-rc: info: service legacy-services: starting
otbr           | 2026-01-08T06:46:49.013782731Z s6-rc: info: service legacy-services successfully started
otbr           | 2026-01-08T06:46:49.541379796Z 00:00:00.808 [I] TrelDiscoverer: DNS-SD service registered successfully
otbr           | 2026-01-08T06:46:49.541793451Z 00:00:00.809 [I] TrelPeerTable-: Added peer otTRELae9e4802266a9d28, dnssd-state:resolving
otbr           | 2026-01-08T06:46:49.541831789Z 00:00:00.809 [I] TrelDiscoverer: Peer otTRELae9e4802266a9d28 is this device itself
otbr           | 2026-01-08T06:46:49.541841349Z 00:00:00.809 [I] TrelPeerTable-: Deleted peer otTRELae9e4802266a9d28, dnssd-state:resolving

Did it change address perhaps? Look in the hardware section to see if it is listed there. I recommend using the /by-id/ address instead of /ttyUSB0/, that way you will not have any issues if it changes to for example /ttyUSB1/

by using openthread/border-router image, its possible that you’re running development release that could introduce breaking change if your image somehow got updated. either pin down otbr image or use other docker image that provide version release…

More debugging info.

When I go to /config/zeroconf in the HA web UI, I do see OpenThread info.

Name: OpenThread BR (unspecified vendor) 961467f3ba2d8e06
Type: _meshcop._udp.local.
Port: 49152
IP addresses
192.168.50.17
fe80::9e6b:ff:fe94:e84b%2
Properties
id 	tu M�\�m��̇���
rv 	1
sb 	
tv 	1.4.0
xa 	�g�-�
dn 	DefaultDomain
vn 	OpenThread
mn 	BorderRouter

Another thing I noticed is that my otbr interface is down…

$ ip addr show wpan0
37: wpan0: <POINTOPOINT,MULTICAST,NOARP> mtu 1280 qdisc noop state DOWN group default qlen 500
    link/none

Hmm… maybe the Thread side of things is causing the issue here…

pin down otbr image or use other docker image that provide version release

Is it possible to use a different Docker image? I’m using that image because I followed this guide: Docker Install  |  OpenThread Unfortunately, they don’t do releases: openthread/border-router - Docker Image

However, going forward I think I may be able to pin anyway, by doing this:

image: openthread/border-router@sha256:4a909b3abfbf17bfa1f4ed7e265eab40f7412f5b9d09edf351fbce837dc6f26a

that is probably for the best. don’t forget to backup your mounted volume once it running fine

I recommend using the /by-id/ address instead of /ttyUSB0/

Hm. Actually, I think this gives me more trouble.

When I changed /dev/ttyUSB0 to /dev/serial/by-id/usb-Nabu_Casa_Home_Assistant_Connect_ZBT-1_18b324437312f011b3bb0114773d9da9-if00-port0, the wpan0 interface was no longer created on the host.

Not sure if there is any compatibility issue with symlinks and docker. :person_shrugging:

Have you tried restarting the different docker containers? Not just HA.

I have similar setup and, likewise, Thread broke today during containers update with something like that in logs.

warn
Jan  8 15:52:00 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/actions_list.cpp:98 - AddItem - d6578918-a225-4506-839a-66809d93faae

warn
Jan  8 15:51:59 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/network_diag_handler.cpp:464 - StartDiscovery - send DiagQuery to ff03::2.

warn
Jan  8 15:51:59 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/network_diag_handler.cpp:423 - HandleNetworkDiscoveryRequest - changed to state 1.

warn
Jan  8 15:51:59 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/network_diag_handler.cpp:464 - StartDiscovery - send DiagQuery to ff03::2.

warn
Jan  8 15:51:59 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/network_diag_handler.cpp:423 - HandleNetworkDiscoveryRequest - changed to state 1.

warn
Jan  8 15:51:59 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/network_diag_handler.cpp:464 - StartDiscovery - send DiagQuery to ff03::2.

warn
Jan  8 15:51:59 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/network_diag_handler.cpp:423 - HandleNetworkDiscoveryRequest - changed to state 1.

warn
Jan  8 15:51:59 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/network_diag_handler.cpp:464 - StartDiscovery - send DiagQuery to ff03::2.

warn
Jan  8 15:51:59 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/network_diag_handler.cpp:423 - HandleNetworkDiscoveryRequest - changed to state 1.

warn
Jan  8 15:51:58 e581a83241c8 otbr-agent[96]: [WARN]-UTILS---: ../../src/rest/network_diag_handler.cpp:464 - StartDiscovery - send DiagQuery to ff03::2.

Also rolled back to previous otbr (not sure what is the best but I use this one) container build and it fixed everything.

otbr:
    #image: openthread/otbr:latest
    image: openthread/otbr@sha256:4db55b28820ee3bdba3b4a6af33f86867a17fc479530b65743bf7c777bbf274c
    container_name: otbr
    restart: unless-stopped

Hmm… I wonder what the difference is between openthread/otbr and openthread/border-router. I’m using openthread/border-router because I found it here: Docker Install  |  OpenThread

I noticed the openthread/otbr is like 10 times larger. It also has otbr-web, which border-router does not have.

Unfortunately, when I switched to openthread/otbr@sha256:4db55b28820ee3bdba3b4a6af33f86867a17fc479530b65743bf7c777bbf274c, I got the following error.

$ sudo docker logs otbr
+ ip6tables -C FORWARD -o wpan0 -j OTBR_FORWARD_INGRESS                                                                                                        
ip6tables v1.6.1: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)                                                     
Perhaps ip6tables or your kernel needs to be upgraded.                                                                                                         
+ ip6tables -L OTBR_FORWARD_INGRESS                                                                                                                            
ip6tables v1.6.1: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)                                                     
Perhaps ip6tables or your kernel needs to be upgraded.                                                                                                         
+ ipset_destroy_if_exist otbr-ingress-deny-src                                                                                                                 
+ ipset list otbr-ingress-deny-src                                                                                                                             
ipset v6.34: Kernel support protocol versions 6-7 while userspace supports protocol versions 6-6                                                               
The set with the given name does not exist                                                                                                                     
+ ipset_destroy_if_exist otbr-ingress-deny-src-swap                                                                                                            
+ ipset list otbr-ingress-deny-src-swap                                                                                                                        
ipset v6.34: Kernel support protocol versions 6-7 while userspace supports protocol versions 6-6                                                               
The set with the given name does not exist
+ ipset_destroy_if_exist otbr-ingress-allow-dst
+ ipset list otbr-ingress-allow-dst
ipset v6.34: Kernel support protocol versions 6-7 while userspace supports protocol versions 6-6
The set with the given name does not exist
+ ipset_destroy_if_exist otbr-ingress-allow-dst-swap
+ ipset list otbr-ingress-allow-dst-swap
ipset v6.34: Kernel support protocol versions 6-7 while userspace supports protocol versions 6-6
The set with the given name does not exist
+ ipset create -exist otbr-ingress-deny-src hash:net family inet6
+ ipset create -exist otbr-ingress-deny-src-swap hash:net family inet6
+ ipset create -exist otbr-ingress-allow-dst hash:net family inet6
+ ipset create -exist otbr-ingress-allow-dst-swap hash:net family inet6
+ ip6tables -N OTBR_FORWARD_INGRESS
ip6tables v1.6.1: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Perhaps ip6tables or your kernel needs to be upgraded.
+ die 'Failed to start firewall service'
+ echo ' *** ERROR:  Failed to start firewall service'
 *** ERROR:  Failed to start firewall service
+ exit 1

Something else I’ve noticed is that if I update openthread/border-router@sha256:xxx to anything and the image gets recreated, then I lose my currently active dataset… which seems like a huge bug or maybe something is wrong with my setup…

Luckily, this time I saved the network TLV so I was able to restore it with:

$ sudo docker exec -it otbr bash
# ot-ctl
> dataset set active <TLV here>

At this point, I’ve given up trying to restore my original network… :sob: I’m about to start factory resetting and re-adding all my thread devices again on a new network… :sob:

Maybe I’ll just never update the openthread/border-router image??

OK. I couldn’t revive my old network. I recreated everything. :frowning:

In the openthread/border-router Docker image I ran this to recreate the network. (Form Thread Network  |  OpenThread)

$ sudo docker exec -it otbr bash
# ot-ctl
> dataset init new
Done
> dataset networkname my-new-network
Done
> dataset commit active
Done
> ifconfig up
Done
> thread start
Done

Also, very important to hopefully avoid this situation next time. I saved the output of these commands. Hopefully the contents of these commands will be enough to recover the network next time it disappears.

# ot-ctl dataset active > /data/thread/my-new-network.txt
# ot-ctl dataset active -x >> /data/thread/my-new-network.txt

active -x generates a TLV. I don’t really know what that is, but there’s a command that accepts a TLV in order to restore a network, so that’s why we’re saving it.

Also, importantly, I pinned the version of openthread/border-router in my Compose file.

image: openthread/otbr@sha256:4db55b28820ee3bdba3b4a6af33f86867a17fc479530b65743bf7c777bbf274c

In my case, it seemed like Matter was not responsible for my entities going unavailable. It seems like it was OpenThread.

Also, during debugging I discovered that border-router was not creating my wpan0 interface. I didn’t notice at first, but it’s something that you need to verify is up. You can run this command.

$ ip addr show wpan0
25: wpan0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet6 fd9d:e2ec:ff2f:371f:0:ff:fe00:fc11/64 scope global nodad deprecated 
       valid_lft forever preferred_lft 0sec
    inet6 fda9:42a4:acc9:1:620a:2ac5:d442:cd14/64 scope global nodad 
       valid_lft forever preferred_lft forever
    inet6 fd9d:e2ec:ff2f:371f:0:ff:fe00:fc38/64 scope global nodad deprecated 
       valid_lft forever preferred_lft 0sec
    inet6 fd9d:e2ec:ff2f:371f:0:ff:fe00:fc10/64 scope global nodad deprecated 
       valid_lft forever preferred_lft 0sec
    inet6 fd9d:e2ec:ff2f:371f:0:ff:fe00:400/64 scope global nodad deprecated 
       valid_lft forever preferred_lft 0sec
    inet6 fd9d:e2ec:ff2f:371f:37ac:72e1:ff65:1b53/64 scope global nodad deprecated 
       valid_lft forever preferred_lft 0sec
    inet6 fe80::5425:43b7:52c1:8226/64 scope link nodad deprecated 
       valid_lft forever preferred_lft 0sec

Next time my network disappears (it happened again yesterday), I need to run this.

# ot-ctl
> dataset set active <TLV from active -x command above>
> ifconfig up
> thread start

# Verify details with this.
> dataset active

I do not remember where I got this image from. Speaking of web - yes it has a frontend

That is the interface on the web port on the OTBR.
If you are running the OTBR as an addon in HA, then the ports are disabled by default and you need to set both to active in the configuration and then restart the addon.

thanks for the info. I run separate container

image: openthread/otbr:latest

Moreover, with macvlan so ports are not important

networks:
  e0lan:
    enable_ipv6: true
    driver: macvlan
    driver_opts:
      parent: end0

What do macvlan have to do with this?

“then the ports are disabled by default” - macvlan can’t do it even if I wanted.

That is nonsense.
You need to read up on those features.

Ports are part of the TCP/IP stack and Docker can not change that.

Haha, go on, tell me about IP stack. :smiley:

I assumed when you said " then the ports are disabled" - what you meant was they are not NATed. Or you meant different thing?

HA uses bridge type of network for add-ons. Nobody “disables” any ports like with iptables and such.

You need to read up on those features.

I meant the ports are disabled in the service, not blocked with iptables.