Use skyconnect zbt-1 as OpenThread Border Router on a remote host?

I have a skyconnect/zbt-1 that I have been using as a zigbee controller for a while… but because my HomeAssistant server is a VM on a server in my basement, I eventually got a Raspberry Pi to host it somewhere more central to my house, and use ser2net to expose the serial port to HA over the (wired) network.

I want to convert it to a thread controller (I will first migrate my zigbee network to a different controller), but keep it plugged into the remote pi. It looks like I’ll need to install the OpenThread Border Router on the pi, and run that directly connected to the ZBT-1, and then specify the border router’s API address when configuring Thread in HomeAssistant.

The part that isn’t clear to me is how to flash the thread firmware to the ZBT-1 if it isn’t plugged directly into the HomeAssistant OS box. Is there a simple howto for that process that I can run manually on the pi?

The official instructions seem to suggest the only way to do this is with the ZBT-1 directly plugged into the HA system (or VM) and while configuring it to run the OpenThread border router add-on in HAOS directly… but I’m honestly not sure I’d trust flashing the firmware over a forwarded USB connection to the VM - firmware flashing often makes the device temporarily show up as another ID, which would need to be forwarded separately, possibly resetting it and screwing up the firmware flash.

Also, if anyone knows, are these the best instructions for installing the OpenThread Border Router on the pi, or is there a binary distribution available that is recommended for HomeAssistant use?

I was going to recommend that you install the full-blown HA onto the Pi and use it as the OTBR. Full-blown HA has had a lot of work done (and continues as such) to get Matter and Thread working. Plus it can be used to reflash and update your ZBT-1 automatically. On the other hand, for your Zigbee, HAOS doesn’t seem to support a ser2net server, and not sure that there is an AddOn for it either. You could of course use ZigBee2MQTT on the Pi.

The only other option that comes to mind is that the HA OTBR AddOn supports connecting to a remote “network_device” (IP address and port) where the network device is “a network-based RCP”. The only network-based RCP that I have heard about that works this way is a PoE based device from SMLIGHT SLZB-06/M. I think you can bypass the powering via Ethernet and power instead via USB?

Ok, update time.

I had some time today to work on this, and I think it’s working. I need to get a matter/thread device to test now. (I am planning to try the Schlage smart deadbolt that has matter/thread support, which is the whole reason I went through this).

My process was:

  1. I had to install HAOS on a laptop in order to flash the thread firmware onto the ZBT-1. I PROBABLY could find the firmware on github somewhere and flash it manually (and probably will want to do this for future updates), but I didn’t want to spend a lot of time on that step for the initial testing. So the rest of this is AFTER flashing the thread firmware to the ZBT-1 and then plugging it into the pi.

    1. I also looked at the log files from the official HA OTBR add-on, in order to determine the connection settings to use for the standalone OTBR install on my pi.
  2. I followed these instructions to set up OTBR on the pi. Things I had to adjust/change are below

    1. The ZBT-1 is not detected on /dev/ttyACM0, so I had to edit /etc/default/otbr-agent after install to change the dev path. Instead of spinel+hdlc+uart:///dev/ttyACM0, I changed it to spinel+hdlc+uart:///dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_0c03f204748dec119f3e6ce883c5466d-if00-port0?uart-baudrate=460800&uart-flow-control. (You can find the specific path by simply looking at ls -al /dev/serial/by-id. Because I’m using the by-id path, this will be consistent even if I end up plugging other USB devices into this pi.
    2. The second piece is adding the ?uart-baudrate and uart-flow-control flags as shown above. Without these, otbr-agent didn’t want to connect to the ZBT-1. I got these from looking at the HAOS install’s OTBR logs.
  3. Once I had the above, I was able to complete the initial network setup using the ot-ctl commands under " 3. Form a Thread network" in the linked docs.

  4. Once the sudo ot-ctl state command showed that it was a leader, I went to my HA install and added the OTBR integration (not the add-on), and specified the IP address of my pi, with port 8081. http://1.2.3.4:8081 if your PI’s IP was 1.2.3.4.

  5. Then I added the Thread integration, and it auto-detected the OTBR network

  6. Then I added the Matter integration, which also auto-detected everything.

Once I get a thread device and test it, I’ll update this thread again if everything works or doesn’t work.

I didn’t want to install HAOS on the pi, because I already have HAOS on a much more reliable VM host, and don’t want to move everything to a different HA install on less reliable (and less powerful, since I’m playing with the local voice assistants too) hardware.

2 Likes

You are the GOAT. I spent SO long trying to figure out how to do this after flashing the firmware with the web flasher. Everything online is basically “InSTalL HAOS”. I will also mention, that I needed to run my own matter server container as well which wasn’t super clear. GitHub - home-assistant-libs/python-matter-server: Python server to interact with Matter

Now let’s see if I can connect this Level Bolt…