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-port0instead 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-resetto rule out a boot loop - Disabling ModemManager using
sudo systemctl stop ModemManagerand thensudo systemctl disable ModemManager
![]()
Can someone point me in the right direction to get this working?






