I recently purchased a Nortek GoControl HUSBZB-1 stick for my OpenHAB home automation setup. The HUSBZB-1 is a single USB device that combines a Z-Wave controller and Zigbee coordinator. It uses a CP210x USB to Serial chip and presents two TTY endpoints, one for the Z-Wave controller and one for the Zigbee coordinator.
On a Linux system, these endpoints are usually enumerated as /dev/ttyUSB0
and /dev/ttyUSB1
(or some other pair of numbers, depending on what other USB serial devices you have connected). Personally, I prefer to have more friendly names for my /dev/tty*
devices when possible (makes it easier to identify which is which, among other reasons).
It’s pretty straight-forward to do configure your Linux box to automatically create symlinks in /dev/
with friendly names that link to the actual devices, and there are plenty of tutorials on the web on how to do this for single-endpoint devices. There’s one extra piece, however, that’s needed for the HUSBZB-1, which I only found buried deep inside forum threads here and there, so I wanted to dedicate a post just to that topic. Here’s what you need to do.
Find Serial Number
First, you need to find the serial number of your stick. You can find this in various places, including the kernel log messages. To see those messages, plug in your HUSBZB-1 stick and then check the output of dmesg
:
dmesg
You should see some output that looks very similar to this:
[390626.830239] usb 2-1.6.4: new full-speed USB device number 19 using ehci-pci [390627.040651] usb 2-1.6.4: New USB device found, idVendor=10c4, idProduct=8a2a, bcdDevice= 1.00 [390627.040654] usb 2-1.6.4: New USB device strings: Mfr=1, Product=2, SerialNumber=5 [390627.040655] usb 2-1.6.4: Product: HubZ Smart Home Controller [390627.040656] usb 2-1.6.4: Manufacturer: Silicon Labs [390627.040657] usb 2-1.6.4: SerialNumber: 613024F5 [390627.041173] cp210x 2-1.6.4:1.0: cp210x converter detected [390627.043221] usb 2-1.6.4: cp210x converter now attached to ttyUSB1 [390627.043553] cp210x 2-1.6.4:1.1: cp210x converter detected [390627.045335] usb 2-1.6.4: cp210x converter now attached to ttyUSB2
The bolded line above contains the device serial number for the stick, which you will need in the next step (for my stick, it’s 613024F5
, but be sure to use yours!). You will also need the USB Vendor ID (10c4
) and Product ID (8a2a
). These values can be seen the dmesg
output above, and should be the same for any other HUSBZB-1 stick.
Create UDEV Rules
udev is the daemon that manages the /dev/
pseudo-filesystem. Use nano
(or your favorite editor) to create the rules file in the /etc/udev/rules.d
directory:
sudo nano -w /etc/udev/rules.d/99-husbzb-1.rules
In that file, insert the following contents (remembering to use your own device’s serial number in each line):
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="8a2a", ATTRS{serial}=="613024F5", ENV{ID_USB_INTERFACE_NUM}=="00", SYMLINK+="zwave" SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="8a2a", ATTRS{serial}=="613024F5", ENV{ID_USB_INTERFACE_NUM}=="01", SYMLINK+="zigbee"
The ENV{ID_USB_INTERFACE_NUM}=="00"
and ENV{ID_USB_INTERFACE_NUM}=="01"
pieces are what was missing from most of the guides I found. This is how, within udev, you can identify the different endpoints of the HUSBZB-1. The first one (00) is the Z-Wave controller and the second (01) is the Zigbee coordinator.
Trigger the New Rule
Trigger the new udev rules (or simply unplug and re-connect the USB stick) so the symlinks get created:
sudo udevadm trigger
Validate the Symlinks
Double-check that the symlinks have been created:
ls -la /dev/zigbee /dev/zwave
The output should look something like this:
lrwxrwxrwx 1 root root 7 Nov 1 18:40 /dev/zigbee -> ttyUSB2 lrwxrwxrwx 1 root root 7 Nov 1 18:40 /dev/zwave -> ttyUSB1
There you go! Now you can do things like configure OpenHAB, et. al., to use those device names (and not get them backwards) or pass them through to your VM/container where OpenHAB or other HA software runs.