Can´t start OpenThread Border Router add-on

I have Nabu_Casa_SkyConnect_v1 install on * Home Assistant OS * 2025.9.4
But OTBR will not start…
(I have test USB SkyConnect on other test HASS, and is working.)

Have done fresh install of SkyConnect and fw with thread.
I have addon “UniFi Network Application” and Dezonz as well.
I have test different port as 9080&9081

Help, what is the problem
Logg say

-----------------------------------------------------------
 Add-on: OpenThread Border Router
 OpenThread Border Router add-on
-----------------------------------------------------------
 Add-on version: 2.13.0
 You are running the latest version of this add-on.
 System: Home Assistant OS 16.2  (amd64 / generic-x86-64)
 Home Assistant Core: 2025.9.4
 Home Assistant Supervisor: 2025.09.0
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service banner successfully started
s6-rc: info: service universal-silabs-flasher: starting
[19:11:54] INFO: Flashing firmware is disabled
s6-rc: info: service universal-silabs-flasher successfully started
s6-rc: info: service otbr-agent: starting
[19:11:55] INFO: Setup OTBR firewall...
[19:11:55] WARNING: Custom OpenThread REST API port is not supported. Using 8081.
[19:11:55] INFO: Starting otbr-agent...
[NOTE]-AGENT---: Running 0.3.0-b067e5ac-dirty
[NOTE]-AGENT---: Thread version: 1.3.0
[NOTE]-AGENT---: Thread interface: wpan0
[NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyUSB0?uart-baudrate=460800&uart-flow-control
[NOTE]-AGENT---: Radio URL: trel://enp3s0
[NOTE]-ILS-----: Infra link selected: enp3s0
49d.17:12:15.296 [C] P-SpinelDrive-: Software reset co-processor successfully
00:00:00.033 [N] RoutingManager: BR ULA prefix: fd23:6f:9534::/48 (loaded)
00:00:00.033 [N] RoutingManager: Local on-link prefix: fdde:ad00:beef:cafe::/64
[ERR ]-REST----: InitializeListenFd error bind : Address already in use
[EMERG]-REST----: FAILED /usr/src/ot-br-posix/src/rest/rest_web_server.cpp:173 - otbr rest server init error
[19:11:55] WARNING: otbr-agent exited with code 255 (by signal 0).
Chain OTBR_FORWARD_INGRESS (0 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere             PKTTYPE = unicast
DROP       all  --  anywhere             anywhere             match-set otbr-ingress-deny-src src
ACCEPT     all  --  anywhere             anywhere             match-set otbr-ingress-allow-dst dst
DROP       all  --  anywhere             anywhere             PKTTYPE = unicast
ACCEPT     all  --  anywhere             anywhere            
otbr-ingress-deny-src
otbr-ingress-deny-src-swap
otbr-ingress-allow-dst
otbr-ingress-allow-dst-swap
Chain OTBR_FORWARD_EGRESS (0 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
[19:11:55] INFO: OTBR firewall teardown completed.
s6-svlisten1: fatal: /run/s6-rc/servicedirs/otbr-agent failed permanently or its supervisor died
s6-rc: warning: unable to start service otbr-agent: command exited 1
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service universal-silabs-flasher: stopping
s6-rc: info: service mdns: stopping
/run/s6/basedir/scripts/rc.init: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information.
/run/s6/basedir/scripts/rc.init: fatal: stopping the container.
Default: mDNSResponder (Engineering Build) (Jan 14 2025 21:04:03) stopping
s6-rc: info: service universal-silabs-flasher successfully stopped
s6-rc: info: service banner: stopping
s6-rc: info: service banner successfully stopped
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
[19:11:55] INFO: mDNS ended with exit code 4 (signal 0)...
s6-rc: info: service mdns successfully stopped

Maybe show the configuration, above seems the cause.

That is only a warning and
I have test different port as 9080&9081


I have test to stop addon deconz
Then is possible to start OpenThread Border Router✅
But i have change port, or is not possibel to change port on OpenThread Border Router

I’m kinda working from memory, but I think the port config is used only to enable the OTBR’s Webserver port 8080, not so much to change the port number. Anyway according to the WARNING

it is using 8081 anyway, so I guess changing the port number is not actually supported.

Yes. I guess that is the problem.
I docker is possibel to set the port with env
OTBR_REST_PORT: 8081
OTBR_WEB_PORT: 8080

But not sure how to do that in addon.
Or is not possibel to. run deconz & openthread parallel??

For what its worth…
what I think is happening is that HA is setting up a run script for the AddOn to run an otbr-agent (which handles the API) and there appears to be a parameter setting called --rest-listen-port for the otbr-agent that can set the port to a different value (take a look here). But HA is not making use of this parameter from the AddOn’s run script and as the error shows, it only uses 8081. My only recommendation is to post an issue to the AddOn’s GitHub and see what the developer’s say, but I see you already have done this… so maybe include this parameter and run script to the issue and see what they say.

Thanks.
I have test this, and in not working. (Current version: 2.13.0)
I have chose other port that is not use by other app.


➜ ~ netstat -tulnp | grep -E “8090|8091”
(empty)


Log whit this port setting.

-----------------------------------------------------------
 Add-on: OpenThread Border Router
 OpenThread Border Router add-on
-----------------------------------------------------------
 Add-on version: 2.13.0
 You are running the latest version of this add-on.
 System: Home Assistant OS 16.2  (amd64 / generic-x86-64)
 Home Assistant Core: 2025.9.4
 Home Assistant Supervisor: 2025.09.0
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service banner successfully started
s6-rc: info: service universal-silabs-flasher: starting
[08:04:11] INFO: Flashing firmware is disabled
s6-rc: info: service universal-silabs-flasher successfully started
s6-rc: info: service otbr-agent: starting
[08:04:12] INFO: Setup OTBR firewall...
[08:04:12] WARNING: Custom OpenThread REST API port is not supported. Using 8081.
[08:04:12] INFO: Starting otbr-agent...
[NOTE]-AGENT---: Running 0.3.0-b067e5ac-dirty
[NOTE]-AGENT---: Thread version: 1.3.0
[NOTE]-AGENT---: Thread interface: wpan0
[NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyUSB0?uart-baudrate=460800&uart-flow-control
[NOTE]-AGENT---: Radio URL: trel://enp3s0
[NOTE]-ILS-----: Infra link selected: enp3s0
51d.06:04:30.273 [C] P-SpinelDrive-: Software reset co-processor successfully
00:00:00.049 [N] RoutingManager: BR ULA prefix: fd23:6f:9534::/48 (loaded)
00:00:00.049 [N] RoutingManager: Local on-link prefix: fdd0:cd17:492d:a4d0::/64
[ERR ]-REST----: InitializeListenFd error bind : Address already in use
[EMERG]-REST----: FAILED /usr/src/ot-br-posix/src/rest/rest_web_server.cpp:173 - otbr rest server init error
[08:04:12] WARNING: otbr-agent exited with code 255 (by signal 0).
Chain OTBR_FORWARD_INGRESS (0 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere             PKTTYPE = unicast
DROP       all  --  anywhere             anywhere             match-set otbr-ingress-deny-src src
ACCEPT     all  --  anywhere             anywhere             match-set otbr-ingress-allow-dst dst
DROP       all  --  anywhere             anywhere             PKTTYPE = unicast
ACCEPT     all  --  anywhere             anywhere            
otbr-ingress-deny-src
otbr-ingress-deny-src-swap
otbr-ingress-allow-dst
otbr-ingress-allow-dst-swap
Chain OTBR_FORWARD_EGRESS (0 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
[08:04:12] INFO: OTBR firewall teardown completed.
s6-svlisten1: fatal: /run/s6-rc/servicedirs/otbr-agent failed permanently or its supervisor died
s6-rc: warning: unable to start service otbr-agent: command exited 1
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service universal-silabs-flasher: stopping
s6-rc: info: service mdns: stopping
/run/s6/basedir/scripts/rc.init: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information.
/run/s6/basedir/scripts/rc.init: fatal: stopping the container.
Default: mDNSResponder (Engineering Build) (Jan 14 2025 21:04:03) stopping
s6-rc: info: service universal-silabs-flasher successfully stopped
s6-rc: info: service banner: stopping
s6-rc: info: service banner successfully stopped
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
[08:04:12] INFO: mDNS ended with exit code 4 (signal 0)...
s6-rc: info: service mdns successfully stopped```

It looks like the issue is that the AddOn run script always starts otbr-agent without exposing the --rest-listen-port parameter.

scrtip…

The otbr-agent binary does support --rest-listen-port to configure which port the REST API should listen on, but the AddOn currently hardcodes port 8081 and doesn’t allow this to be changed.

Because of that, anyone who needs to run the REST API on a different port is blocked. This also explains the error we see, since the agent only binds to 8081 by default.

Suggestion:
If the AddOn exposed --rest-listen-port as a configurable option in the run script, users could override the port when needed

I am having exactly the same problem. How can I add --rest-listen-port to the run script?
But on my system the port 8081 does not seem to be in use by another service. I used netstat on HA-OS and ss on proxmox to check this. What else could cause this error message: “InitializeListenFd error bind : Address already in use” ???

Hey everyone, I had the same problem and finally found the solution (at least for me). I had n8n configured to use 8081, so my own fault. Now OTBR is working fine. After all I just sorted out one process after the other till

netstat -tulpn | grep -E ' :8081\b'

was showing no process blocking 8081 anymore. Maybe this can help anybody else? Good luck!

1 Like