Skyconnect Silicon labs multiprotocol will not start

s6-rc: info: service mdns: starting
s6-rc: info: service s6rc-oneshot-runner: starting
[08:50:02] INFO: Starting mDNS Responder...
Default: mDNSResponder (Engineering Build) (Jan 23 2023 22:46:33) starting
s6-rc: info: service mdns successfully started
Default: mDNS_AddDNSServer: Lock not held! mDNS_busy (0) mDNS_reentrancy (0)
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
cont-init: info: running /etc/cont-init.d/check-cpcd-shm.sh
cont-init: info: /etc/cont-init.d/check-cpcd-shm.sh exited 0
cont-init: info: running /etc/cont-init.d/config.sh
[08:50:04] INFO: Generating cpcd configuration.
cont-init: info: /etc/cont-init.d/config.sh exited 0
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service banner: starting
-----------------------------------------------------------
 Add-on: Silicon Labs Multiprotocol
 Zigbee and OpenThread multiprotocol add-on
-----------------------------------------------------------
 Add-on version: 0.12.0
 You are running the latest version of this add-on.
 System: Home Assistant OS 9.5  (amd64 / qemux86-64)
 Home Assistant Core: 2023.2.2
 Home Assistant Supervisor: 2023.01.1
-----------------------------------------------------------
 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:50:11] INFO: Checking /dev/ttyUSB2 identifying SkyConnect v1.0 from Nabu Casa
[08:50:11] INFO: Starting universal-silabs-flasher with /dev/ttyUSB2 (baudrate 115200)
2023-02-07 08:50:48 core-silabs-multiprotocol universal_silabs_flasher.flash[253] INFO Extracted GBL metadata: NabuCasaMetadata(metadata_version=1, sdk_version=<AwesomeVersion SemVer '4.1.4'>, ezsp_version=None, fw_type=<FirmwareImageType.RCP_UART_802154: 'rcp-uart-802154'>)
2023-02-07 08:50:48 core-silabs-multiprotocol universal_silabs_flasher.flasher[253] INFO Probing ApplicationType.GECKO_BOOTLOADER
2023-02-07 08:50:50 core-silabs-multiprotocol universal_silabs_flasher.flasher[253] INFO Probing ApplicationType.CPC
2023-02-07 08:50:54 core-silabs-multiprotocol universal_silabs_flasher.flasher[253] INFO Probing ApplicationType.EZSP
Error: Failed to probe running application type
2023-02-07 08:50:59 core-silabs-multiprotocol concurrent.futures[253] ERROR exception calling callback for <Future at 0x7f96f6cb29a0 state=finished returned NoneType>
Traceback (most recent call last):
  File "/usr/lib/python3.9/concurrent/futures/_base.py", line 329, in _invoke_callbacks
    callback(self)
  File "/usr/lib/python3.9/asyncio/futures.py", line 398, in _call_set_state
    dest_loop.call_soon_threadsafe(_set_state, destination, source)
  File "/usr/lib/python3.9/asyncio/base_events.py", line 791, in call_soon_threadsafe
    self._check_closed()
  File "/usr/lib/python3.9/asyncio/base_events.py", line 510, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
s6-rc: warning: unable to start service universal-silabs-flasher: command exited 1
/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.
prog: fatal: stopping the container.
s6-rc: info: service mdns: stopping
s6-rc: info: service banner: stopping
Default: mDNSResponder (Engineering Build) (Jan 23 2023 22:46:33) stopping
s6-rc: info: service banner successfully stopped
s6-rc: info: service legacy-cont-init: stopping
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:50:59] INFO: mDNS ended with exit code 4 (signal 0)...
s6-rc: info: service mdns successfully stopped

Any ideas?
Thanks

I finally started playing with this myself today, and I didn’t have a problem with the multipan Add-On.
However, before I added the Add-On, I was playing with the silabs_flasher, and I didn’t have any problem with it in a python-venv, yet when I installed and ran the silabs_flasher inside the homeassistant container, I got a nearly identical failure as you.

Here it is for comparison

#silabs-flasher --device /dev/ttyUSB0 info
Manufacturer: Nabu Casa
Board name: SkyConnect v1.0
EmberZNet version: 7.1.1.0 build 273
bootloader version: 0x2101, nodePlat: 0x04, nodeMicro: 0x18, nodePhy: 0x0f
exception calling callback for <Future at 0x7f6a3644dea0 state=finished returned NoneType>
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 342, in _invoke_callbacks
    callback(self)
  File "/usr/local/lib/python3.10/asyncio/futures.py", line 399, in _call_set_state
    dest_loop.call_soon_threadsafe(_set_state, destination, source)
  File "/usr/local/lib/python3.10/asyncio/base_events.py", line 795, in call_soon_threadsafe
    self._check_closed()
  File "/usr/local/lib/python3.10/asyncio/base_events.py", line 515, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

So there maybe some problem with the silabs-flasher.
I would suggest you file an issue here:

and see what they say.

[EDIT/UPDATE] the silabs-flasher is an older flasher and doesn’t appear to work if the SkyConnect has been updated with firmware that is to be used with the Multiprotocol Add-On.

Actually , you get a lot more info even from the legacy silabs-flasher than I do, and I’m seeing the same issue as the OP:

➜  silabs-firmware git:(main) silabs-flasher --device /dev/ttyUSB0 info
Traceback (most recent call last):
  File "/usr/bin/silabs-flasher", line 224, in <module>
    main()  # pylint: disable=no-value-for-parameter
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/bin/silabs-flasher", line 27, in inner
    return asyncio.run(f(*args, **kwargs))
  File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
  File "/usr/bin/silabs-flasher", line 153, in info
    brd_manuf, brd_name, version = await ezsp.get_board_info()
AttributeError: 'NoneType' object has no attribute 'get_board_info'

So I don’t even get board info nevermind the stack running on the board or the bootloader. It’s almost like something is using the stick still even though I’ve stopped / disabled the multiprotocol add-in. Maybe it’s worth noting that I’m running the HA OS in a Proxmox instance on an Celeron N5105 box with the USB port passed through to HA OS. But the HA VM’s kernel does recognize the device so not really thinking it’s that either?

So I don’t even get board info nevermind the stack running on the board or the bootloader. It’s almost like something is using the stick still even though I’ve stopped / disabled the multiprotocol add-in. Maybe it’s worth noting that I’m running the HA OS in a Proxmox instance on an Celeron N5105 box with the USB port passed through to HA OS. But the HA VM’s kernel does recognize the device so not really thinking it’s that either?

Bingo! Disconnecting the SkyConnect dongle from the system and then re-attaching it now lets me run at least an empty update using the universal-silabs-flasher:

➜  silabs-firmware git:(main) universal-silabs-flasher --device /dev/ttyUSB0 --baudrate 115200 --bootloader-baudrate 115200 flash --allow-cross-flashing --firmware RCPMultiPAN/beta/NabuCasa_SkyConnect_RCP_v4.2.1_rcp-uart-hw-802154_115200.gbl
2023-03-14 16:32:54 a0d7b954-ssh universal_silabs_flasher.flash[1890] INFO Extracted GBL metadata: NabuCasaMetadata(metadata_version=1, sdk_version=<AwesomeVersion SemVer '4.2.1'>, ezsp_version=None, fw_type=<FirmwareImageType.RCP_UART_802154: 'rcp-uart-802154'>)
2023-03-14 16:32:54 a0d7b954-ssh universal_silabs_flasher.flasher[1890] INFO Probing ApplicationType.GECKO_BOOTLOADER
2023-03-14 16:32:56 a0d7b954-ssh universal_silabs_flasher.flasher[1890] INFO Probing ApplicationType.CPC
2023-03-14 16:32:58 a0d7b954-ssh universal_silabs_flasher.flasher[1890] INFO Detected ApplicationType.CPC, version 4.2.1
2023-03-14 16:32:58 a0d7b954-ssh universal_silabs_flasher.flash[1890] INFO Detected running firmware ApplicationType.CPC, version 4.2.1
2023-03-14 16:32:58 a0d7b954-ssh universal_silabs_flasher.flash[1890] INFO Firmware version 4.2.1 is flashed, not upgrading

My guess is that the previous firmware update left the device in a less-than-ideal state (possibly due to / exacerbated by USB forwarding via ProxMox?) and I only caught it when the Multiprotocol addon was updated since I haven’t yet connected any devices to it.

FWIW, it appears that if you’re running the multi-protocol stack, you cannot use the legacy silabs-flasher:

➜  silabs-firmware git:(main) silabs-flasher --device /dev/ttyUSB0 info
Traceback (most recent call last):
  File "/usr/bin/silabs-flasher", line 224, in <module>
    main()  # pylint: disable=no-value-for-parameter
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/bin/silabs-flasher", line 27, in inner
    return asyncio.run(f(*args, **kwargs))
  File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
  File "/usr/bin/silabs-flasher", line 153, in info
    brd_manuf, brd_name, version = await ezsp.get_board_info()
AttributeError: 'NoneType' object has no attribute 'get_board_info'

But re-running the universal flasher still succeeds to ID the device & firmware running & tell me I don’t need to upgrade as above.

HTH!

It looks like ezsp.get_board_info means the old silabs_flasher is only using EZSP to talk to the SkyConnect, so once SkyConnect has been flashed with the firmware for multiprotocol, then SkyConnect no longer uses EZSP, and that’s what is causing the old silabs_flasher to fail.

1 Like