OpenThread Border Router and SONOFF MG24 with Docker compose will not start

I would like to set up an OpenThread Border Router and started with the official OpenThread Border Router Docker container:
https://openthread.io/guides/border-router/build-docker

A SONOFF Dongle Plus MG24 (https://sonoff.tech/en-eu...b-dongle-dongle-plus-mg24) with OpenThread RCP firmware flashed using https://dongle.sonoff.tech/sonoff-dongle-flasher. After reconnecting, the tool confirms that the OpenThread RCP firmware is present on the dongle.

My docker compose:

services:
  openthread-border-router:
    image: openthread/border-router:latest 
    container_name: otbr
    network_mode: host 
    privileged: true
    environment:
      OT_RCP_DEVICE: "spinel+hdlc+uart:///dev/ttyUSB3?uart-baudrate=460800&uart-flow-control=0"
      OT_INFRA_IF: "eno1"
      OT_THREAD_IF: "wpan0"
      OT_REST_LISTEN_ADDR: "0.0.0.0"
      OT_REST_LISTEN_PORT: "8081"
      OT_LOG_LEVEL: 7    
    devices:
      - /dev/ttyUSB3:/dev/ttyUSB3
      - /dev/net/tun:/dev/net/tun
    restart: unless-stopped

However, the container does not start.
Based on the Docker Compose configuration above, I see the following in the logs:

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service otbr-agent: starting
Configuring OpenThread firewall...
Configuring OpenThread NAT64...
Starting otbr-agent...
[NOTE]-AGENT---: Running 0.3.0-bfb8dd9
[NOTE]-AGENT---: Thread version: 1.4.0
[NOTE]-AGENT---: Thread interface: wpan0
[NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyUSB3?uart-baudrate=460800&uart-flow-control=0
[NOTE]-AGENT---: Radio URL: trel://eno1
[NOTE]-ILS-----: Infra link selected: eno1
[INFO]-RCP_HOS-: OpenThread log level changed to 5
50d.13:30:11.053 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:0, cmd:RESET
50d.13:30:11.053 [D] P-SpinelDrive-: Waiting response: key=0
50d.13:30:13.055 [W] P-SpinelDrive-: Wait for response timeout
50d.13:30:13.055 [I] P-SpinelDrive-: co-processor self reset successfully
50d.13:30:13.055 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:PROTOCOL_VERSION
50d.13:30:13.055 [D] P-SpinelDrive-: Waiting response: key=1
50d.13:30:15.057 [W] P-SpinelDrive-: Wait for response timeout
50d.13:30:15.057 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:PROTOCOL_VERSION
50d.13:30:15.057 [D] P-SpinelDrive-: Waiting response: key=1
50d.13:30:17.059 [W] P-SpinelDrive-: Wait for response timeout
50d.13:30:17.059 [C] Platform------: Init() at spinel_driver.cpp:87: Failure
50d.13:30:17.059 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:PROTOCOL_VERSION
50d.13:30:17.059 [D] P-SpinelDrive-: Waiting response: key=1
50d.13:30:19.061 [W] P-SpinelDrive-: Wait for response timeout

So I do see a “co-processor self reset successfully,” but eventually I still get a “[W] P-SpinelDriver-: Wait for response timeout.”

The same happens with a baud rate of 115200.

OT_RCP_DEVICE: "spinel+hdlc+uart:///dev/ttyUSB3?uart-baudrate=115200&uart-flow-control=0"

I also tried a few other things without success, including:

  • Using /dev/usb-SONOFF_SONOFF_Dongle_Plus_MG24_6a9ecbcbf69aef118435af9061ce3355-if00-port0 instead of /dev/ttyUSB3, including via a symlink
  • Baud rate of 460800 with uart-flow-control=1 (enabled) or =0 (disabled)
  • Baud rate of 115200 with uart-flow-control=1 (enabled) or =0 (disabled)
  • Adding &no-reset to rule out a boot loop
  • Disabling ModemManager using sudo systemctl stop ModemManager and then sudo systemctl disable ModemManager

image

Can someone point me in the right direction to get this working?

Seems to be fixed by removing ‘&uart-flow-control=0’ from the OT_RCP_DEVIC env which makes it:

  OT_RCP_DEVICE: "spinel+hdlc+uart:///dev/ttyUSB3?uart-baudrate=460800"

Hey @JBS - I was able to start the OTRB container as well and it connected well via the REST API with my Home Assistant but somehow the border router is not displayed under the Thread integration.

Were you able to get this done as well?

@erickubenka Yes, I do see my Border Router in HA using the Thread integration:

The Thread Border Router Integration is needed as well, did you install that one as well?

Hi guys

Any luck with this ?

I have managed to integrate both the matter-server and the open thread border router to HA

I have “synched” the credentials on the HA companion app.
I tried to add the matter device using Android and iOS (integrations → add matter device → QR code read byt the camera)

App searchs for the device
App finds the device
App tried to find the openthrear border router, and finds it

Then it gets stuck (forever) on the “Checking connectivity to Thread network Openthread-xxxx”

Im clueless on this one :frowning:
Already enabled IPV6 on my Asus router, I have mDNS and IPV6 activated on the Cisco Mobility Express .
SSID is available on bot 2.4Ghz and 5Ghz

@cinzas In my case, the HA app is sometimes trying to connect to the wrong Thread network, no clue why, as I do have only one.

Check if your HA app is actually trying to connect to your 9b85 network?

I added a new Matter device yesterday and noticed that the HA app, at this step, once again searched for the wrong Thread network. I have no idea why or how the app ends up doing that, but after running the Thread authorization sync again, the HA app did search for the correct Thread network and adding the new Matter device worked as well.

Oh yeah, I am using the OTBR and Thread integrations. The network itself is displayed after I followed this setup guide here to create a dataset and bring it active.
https://openthread.io/guides/border-router/form-network?hl=de

But the border router itself is not displayed, it just shows the network.

Did you do the configuration of your network by your won with the ot-ctl or how did you manage that?

And is your HA instance running in a docker container as well? Is it also in network host mode?

I did create the Thread Network using the web interface of the docker container I use (GitHub - ownbee/hass-otbr-docker: Stand-alone Home Assistant OpenThread Border Router docker container.). As far as I know, the ‘original’ docker container (Docker Install  |  OpenThread) does not have that web interface, so you need to create the network using commands then.

Yes, my HA and OTBR docker containers both running in host mode.

Ah cool, so thats the container i use right now and this one was somehow autoforming the network without any further steps. And indeed it have the web interface that you mentioned.

But as I have some stability issues right now, I wanted to go with a more updated container image like the official openthread borderouter image, that you mentioned in your compose setup earlier. But somehwo I struggle to get the last things done. may it is somehow the thing that my HA instance is curently not running in host mode.
Will give that a try as well.

Thanks so far, for your input.

I guess HA running not in host mode is your issue. Maybe you can give it a try to test it with HA in host?

And agree, I do prefer the official docker container as well and will give that one another try at a later moment. However, I realy like the Topology view in the web interface which the official docker container does not have.

Ha. So there was an new version 0.2.0 released of ownbee/hass-otbr-docker image last weekend and with that version currently everything looks stable for me.

I got some log lines indicating the same issues that i had before, but this time the RCP auto recovery seems to work and everything is healty again in a few seconds.

Loglines I’m talking about.
(newest first)

2026-01-12 15:53:06.605 05:31:25.346 [N] P-RadioSpinel-: RCP recovery is done
2026-01-12 15:53:06.567 05:31:25.308 [W] P-RadioSpinel-: Trying to recover (1/2)
2026-01-12 15:53:06.567 05:31:25.308 [W] P-RadioSpinel-: RCP failure detected
2026-01-12 15:53:06.567 05:31:25.308 [W] P-RadioSpinel-: radio tx timeout

But I will just give the official docker image a chance as soon as I’m back from vacation.

Quick update,

I managed to solve it.
I connected the SonOff dongle on my desktop and made a stand alone installation of the Openthread Border Router, and it worked.

So I dig in and found the problem was on the Proxmox IPV6 configuration on my cluster.

After solving it, assigning the right IPV6 configurations to the ethernet adapters and configuring docker for it, it started working :slight_smile:

1 Like