Share Z-wave dongle over IP (USB over IP using ser2net / socat ) guide

Understood - and if I had time, I would prioritise it higher, but at the moment I don’t unfortunately (I already spend many hours every day working on openHAB, answering tickets, updating the database, etc)… I have to prioritise things and I know that people always have different priorities. If someone else can help to add this, it would be good and I suspect it should not be too much work.

3 Likes

Hi All

As I cannot get a direct zwave stick connected to my OH2 box whilst also running a socat/ser2net Zwave USB stick does this allow 2 x USB sticks connected via socat/ser2net?

I already have one stick working remotely just fine, I assume all I need to do is edit socat.conf on OH2 to then have this:

OPTIONS="pty,link=/dev/ttyUSB0,raw,user=openhab,group=dialout,mode=777 tcp:192.168.0.12:3333"
OPTIONS="pty,link=/dev/ttyUSB1,raw,user=openhab,group=dialout,mode=777 tcp:192.168.0.11:3334"

AND

On my other sharing machine (192.168.0.11) in this instance, edit ser2net.conf with this:

3334:raw:0:/dev/ttyACM0:115200 8DATABITS NONE 1STOPBIT

With the final step being:

Add an additional Zwave Controller manually, configure the serial port for the z-wave controller thing (node1) for /dev/ttyUSB1

No, it’s not that easy to do it. :frowning: You have to start multiple socat instances.
As the solution above uses init files, you have to copy /etc/init.d/socat to, let’s say /etc/init.d/socat2, then do a

sudo chmod +x /etc/init.d/socat2
sudo update-rc.d socat2 defaults

and of course:

sudo cp /etc/defaults/socat.conf /etc/defaults/socat2.conf

then change settings in /etc/defaults/socat2 to the second server and the settings in /etc/defaults/socat to the first server. Please ensure that /etc/init.d/socat2 will use /etc/defaults/socat2 as defaults. (line 19 in /etc/init.d/socat2)

OPTIONS is a var that is set via /etc/defaults/socat.conf, so the two lines will result in only one active setting (the second one).

There is a very smart way to do this via systemd, but for now I don’t know how to start socat via systemd correctly.

Thanks Udo, hmmm. I dont think ill risk my working setup right now using 1 stick. Its a shame 2 sticks dont function correctly using OH2.

Well, no risk, no fun :wink:

I did a quick research, And I think socat should work as systemd Service this way:

  1. a special systemd unit file, named socat@.service (that’s part of its magic)
[Unit]
Description=Socat Service
After=network.target

[Service]
Type=simple
User=root
EnvironmentFile=/etc/socat/%i.cfg
PIDFile=/var/run/socat/%i.pid
ExecStart=/usr/bin/socat -d -d -d -lf /var/log/socat/%i.log pty,link=${DEVICE},raw,user=${USER},group=dialout,mode=777 tcp:${IP}:${PORT},forever,interval=10,fork
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
  1. some cfg files, located in /etc/socat/ (we have to create this directory)

usb0.cfg:

# EnvironmentFile for socat

USER=openhab
DEVICE=/dev/ttyUSB0
IP=192.168.0.12
PORT=3333

usb1.cfg:

# EnvironmentFile for socat

USER=openhab
DEVICE=/dev/ttyUSB1
IP=192.168.0.11
PORT=3334
  1. Some symbolic links:
sudo ln -s /etc/systemd/system/socat@.service /etc/systemd/system/socat@usb0.service
sudo ln -s /etc/systemd/system/socat@.service /etc/systemd/system/socat@usb1.service
  1. enable systemd service:
sudo systemctl daemon-reload
sudo systemctl enable socat@usb0.service
sudo systemctl enable socat@usb1.service
sudo systemctl start socat@usb0.service
sudo systemctl start socat@usb1.service

But be warned, I did not test this yet. :slight_smile:

You can get real advantages when using many instances of a daemon (I’m running 5 squeezelight clients on one computer this way, and it’s really cool only to use one systemd unit file :wink:

Just some other tips:
My configuration only worked when i added echo=0 to the configuration.

So from

pty,link=/dev/ttyUSB0,raw,user=openhab,group=dialout,mode=777 tcp:172.16.11.5:3333

to

pty,link=/dev/ttyUSB0,raw,echo=0,user=openhab,group=dialout,mode=777 cp:172.16.11.5:3333

Also with the newer versions of ser2net, you can make multiple connections to one serial port by adding max-connections=N to the configuration. For the dutchies this might be handy when using a DSMR data logger and a seperate OpenHAB instance.

Just for reference, my ser2net line is

3333:raw:0:/dev/ttyUSB-P1:115200 8DATABITS NONE 1STOPBIT max-connections=3

Ser2net is downloadable from https://sourceforge.net/projects/ser2net/

I’d like to now this is strictly a limitation of socat and is completely outside of OH itself. OH has no problem working with multiple USB devices.

Not with multiple usb z wave sticks it doesnt. At least not on my setup ysing 2 x aeotec gen 5 sticks

It is supposed to. You create two zwave controller Things each connected to a different /dev/tty.

What specific problem are you experiencing?

If the problem is getting a device to appear as a /dev/tty remotely using socat/ser2net, then the problem is outside of OH.

I tested it with two socats as described in the other tutorial and it worked fine

Hi Rich

See my post here:

I couldnt get 2 x ZWave sticks working. One connected via socat works just fine, when I connect a local controller it wouldnt discover it. When I added it manually I had all sorts of issues as described in the thread.

All the problems read like they are a problem with the controller, not the fact that it happens to be the second controller. Do you see the same errors when adding that controller by itself?

One controller works fine, either via socat or via the USB port.

Its the second controller because when its inserted/removed those errors come up and also the second controller fails to display a new item in the inbox after a successful pair.

This must be specific to your setup, but is not true for OH. I am even using 3 x Aeotec Gen5 Sticks parallel in my production environment for more than 1,5 years without any problems.

Id love to be able to fix it but I didnt get any guidance. What version of the Zwave binding

At the moment I am running OH Snapshot 2.4 1407 with Z-Wave Binding 2.4.0.20181031 but it worked ever since May 2017 for me with the Z-Wave dev version (which became part of the Snapshots later, I think shortly after 2.3 release?). Which one do you use?

I use this version

2.4.0-SNAPSHOT Build #1341

251 │ Active   │  80 │ 2.4.0.201809081506     │ ZWave Binding

This might be one day too old… :frowning:
Chris merged to dev version on September 9th in the 2.4 master branch…

1 Like

Oh. How do I obtain that newer version?

Just install a more recent snapshot.
However, the switch to the recent Z-Wave version requires to delete and rediscover all Z-Wave things (leave them included, but delete just the things in OH). More Details in this thread: