Hey all.
I’m currently stuck trying to get my Sonoff MG24 up and running as a thread router.
I’ve flashed it to the current OpenThread software and I have verified serial port connectivity, etc.
When I try to bring up the OTBR app I get the following errors:
e[34m-----------------------------------------------------------e[0m
e[34m Add-on: OpenThread Border Routere[0m
e[34m OpenThread Border Router add-one[0m
e[34m-----------------------------------------------------------e[0m
e[34m Add-on version: 2.16.4e[0m
e[32m You are running the latest version of this add-on.e[0m
e[34m System: Home Assistant OS 17.0 (amd64 / generic-x86-64)e[0m
e[34m Home Assistant Core: 2026.1.3e[0m
e[34m Home Assistant Supervisor: 2026.02.2e[0m
e[34m-----------------------------------------------------------e[0m
e[34m Please, share the above information when looking for helpe[0m
e[34m or support in, e.g., GitHub, forums or the Discord chat.e[0m
e[34m-----------------------------------------------------------e[0m
s6-rc: info: service banner successfully started
s6-rc: info: service otbr-agent: starting
[14:56:36] INFO: e[32mSetup OTBR firewall...e[0m
[14:56:36] INFO: e[32mMigrating OTBR settings if needed...e[0m
2026-02-24 14:56:36 homeassistant asyncio[237] DEBUG Using selector: EpollSelector
2026-02-24 14:56:36 homeassistant zigpy.serial[237] DEBUG Opening a serial connection to '/dev/serial/by-id/usb-SONOFF_SONOFF_Dongle_Plus_MG24_00d067da23a1ef11ba458e6661ce3355-if00-port0' (baudrate=460800, xonxoff=False, rtscts=True)
2026-02-24 14:56:36 homeassistant serialx.platforms.serial_posix[237] DEBUG Configuring serial port '/dev/serial/by-id/usb-SONOFF_SONOFF_Dongle_Plus_MG24_00d067da23a1ef11ba458e6661ce3355-if00-port0'
2026-02-24 14:56:36 homeassistant serialx.platforms.serial_posix[237] DEBUG Configuring serial port: [0, 0, 2147486896, 0, 4100, 4100, [b'\x03', b'\x1c', b'\x7f', b'\x15', b'\x04', 0, 0, b'\x00', b'\x11', b'\x13', b'\x1a', b'\x00', b'\x12', b'\x0f', b'\x17', b'\x16', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00']]
2026-02-24 14:56:36 homeassistant serialx.platforms.serial_posix[237] DEBUG Setting low latency mode: True
2026-02-24 14:56:36 homeassistant serialx.platforms.serial_posix[237] DEBUG Setting modem pins: ModemPins[dtr rts]
2026-02-24 14:56:36 homeassistant serialx.platforms.serial_posix[237] DEBUG Setting TIOCMBIS: 0x00000006
2026-02-24 14:56:36 homeassistant zigpy.serial[237] DEBUG Connection made: <serialx.platforms.serial_posix.PosixSerialTransport object at 0x7f259351c2d0>
2026-02-24 14:56:36 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=0, network_link_id=0, flag=2), command_id=<CommandID.RESET: 1>, data=b'\x02')
2026-02-24 14:56:36 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x80\x01\x02\xea\xf0~'
2026-02-24 14:56:36 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x80\x01\x02\xea\xf0~'
2026-02-24 14:56:36 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-24 14:56:38 homeassistant universal_silabs_flasher.spinel[237] DEBUG Device did not respond to reset, continuing
2026-02-24 14:56:38 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08')
2026-02-24 14:56:38 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-24 14:56:38 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-24 14:56:38 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-24 14:56:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08'), trying again in 0.10s (attempt 1 of 3)
2026-02-24 14:56:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08')
2026-02-24 14:56:40 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-24 14:56:40 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-24 14:56:40 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-24 14:56:41 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-24 14:56:42 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-24 14:56:42 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08'), trying again in 0.10s (attempt 2 of 3)
2026-02-24 14:56:42 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending frame SpinelFrame(header=SpinelHeader(transaction_id=3, network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08')
2026-02-24 14:56:42 homeassistant universal_silabs_flasher.spinel[237] DEBUG Sending data b'~\x83\x02\x08\xbc\x9a~'
2026-02-24 14:56:42 homeassistant serialx.descriptor_transport[237] DEBUG Immediately writing b'~\x83\x02\x08\xbc\x9a~'
2026-02-24 14:56:42 homeassistant serialx.descriptor_transport[237] DEBUG Sent 7 of 7 bytes
2026-02-24 14:56:43 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-24 14:56:43 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-24 14:56:43 homeassistant serialx.descriptor_transport[237] DEBUG Received b'C] Platform------: Extended Reset info: 0x301 (PIN)\x00\x02\x10\x05\x00\x00\x00\x00\x00\x00\x00r\x8b'
2026-02-24 14:56:43 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-24 14:56:43 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-24 14:56:43 homeassistant serialx.descriptor_transport[237] DEBUG Event loop woke up reader
2026-02-24 14:56:44 homeassistant universal_silabs_flasher.spinel[237] DEBUG Failed to send SpinelFrame(header=SpinelHeader(network_link_id=0, flag=2), command_id=<CommandID.PROP_VALUE_GET: 2>, data=b'\x08'), trying again in 0.10s (attempt 3 of 3)
2026-02-24 14:56:44 homeassistant serialx.descriptor_transport[237] DEBUG Closing at the request of the application
2026-02-24 14:56:44 homeassistant zigpy.serial[237] DEBUG Waiting for serial port to close
2026-02-24 14:56:44 homeassistant serialx.descriptor_transport[237] DEBUG Closing connection: None
2026-02-24 14:56:44 homeassistant serialx.descriptor_transport[237] DEBUG Closing file descriptor 7
2026-02-24 14:56:44 homeassistant serialx.descriptor_transport[237] DEBUG Calling protocol `connection_lost` with exc=None
2026-02-24 14:56:44 homeassistant zigpy.serial[237] DEBUG Connection lost: None
Traceback (most recent call last):
File "/usr/local/lib/python3.13/dist-packages/universal_silabs_flasher/spinel.py", line 260, in send_frame
return await asyncio.shield(future)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
asyncio.exceptions.CancelledError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/bin/migrate_otbr_settings.py", line 228, in <module>
asyncio.run(main())
~~~~~~~~~~~^^^^^^^^
File "/usr/lib/python3.13/asyncio/runners.py", line 195, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/usr/lib/python3.13/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/usr/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "/usr/local/bin/migrate_otbr_settings.py", line 156, in main
hwaddr = await get_adapter_hardware_addr(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
)
^
File "/usr/local/bin/migrate_otbr_settings.py", line 103, in get_adapter_hardware_addr
rsp = await protocol.send_command(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<2 lines>...
)
^
File "/usr/local/lib/python3.13/dist-packages/universal_silabs_flasher/spinel.py", line 292, in send_command
return await self.send_frame(frame, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/dist-packages/universal_silabs_flasher/spinel.py", line 259, in send_frame
async with asyncio_timeout(timeout):
~~~~~~~~~~~~~~~^^^^^^^^^
File "/usr/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
raise TimeoutError from exc_val
TimeoutError
[14:56:44] WARNING: e[33motbr-agent exited with code 1 (by signal 0).e[0m
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
[14:56:44] INFO: e[32mOTBR firewall teardown completed.e[0m
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 banner: 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.
s6-rc: info: service mdns: stopping
Default: mDNSResponder (Engineering Build) (Feb 17 2026 15:03:32) 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
[14:56:44] INFO: e[32mmDNS ended with exit code 4 (signal 0)...e[0m
s6-rc: info: service mdns successfully stopped
[15:13:41] INFO: e[32mStable mode, enabling mDNSResponder.e[0m
[15:13:41] INFO: e[32mThe otbr-web is disabled.e[0m
s6-rc: info: service mdns: starting
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service mdns successfully started
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service banner: 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
[15:13:41] INFO: e[32mStarting mDNS Responder...e[0m
Default: mDNSResponder (Engineering Build) (Feb 17 2026 15:03:32) starting
I’ve tried to turn off/on the firewall but that doesn’t seem to work. I’m installing this after failing with using my eero as a thread router but it doesn’t seem to be getting that far for that to be a conflict.
Has anyone had this same issue in not being able to have the OTBR addon cooperate with a flased MG24?