This short post describes how to compile Z-Connector for OpenWRT family routers.We suppose you are familiar with Linux and with OpenWRT. The following description is not a final script - you will need to edit some variables!# Compiling ipkg package of Z-Connector for OpenWRT and DD-WRT routers and their clones
#
# Be sure to enable IPKG on your router. Some routers require JFFS or external storage to be enabled
#
# Download your personal Z-Connector from www.z-wave.me web site and decopress it on your Linux (we suppose it is Ubunu)
#
# Run this script from the directory of Z-Connector (where Unix and Windows folder are located)
# Install flex utility
sudo apt-get install flex
# Install SVN OpenWRT tree
svn co svn://svn.openwrt.org/openwrt/branches/backfire
cd backfire
# Install feeds
./scripts/feeds update -a
./scripts/feeds install argtable
# copy Z-Connector to the tree
mkdir packages/z-connector
cp -R ../Unix packages/z-connector/src
mv packages/z-connector/src/Makefile_OpenWRT packages/z-connector/Makefile
(cd package/z-connector/src; make clean)
make menuconfig
# select Target System
# save the config
make package/z-connector-compile
make package/openssl-compile
make package/feeds/packages/argtable-compile
# Specify correct ARCH
ARCH=[[Arch]]
OpenWRThost=[[IP]]
# Copy to the router
scp bin/$ARCH/packages/argtable*.ipk bin/$ARCH/packages/z-connector*.ipk bin/$ARCH/packages/libopenssl*.ipk bin/$ARCH/packages/zlib*.ipk root@$OpenWRThost:/tmp
# Install on the router
ssh root@$OpenWRThost ipkg install /tmp/argtable*.ipk /tmp/z-connector*.ipk /tmp/libopenssl*.ipk /tmp/zlib*.ipk
# Now you need to copy Certificates somewhere on the router
scp -r ../Certificates root@$OpenWRThost:[[cert directory]]
# And probably load modules for your stick
ssh root@$OpenWRThost ipkg install kmod-usb-serial-pl2303
insmod pl2303
# or
ssh root@$OpenWRThost ipkg install kmod-usb-core kmod-usb-acm
insmod acm
# Then you can try to start z-connector on your roter using:
root@OpenWRT:/ # CERT_DIR=[[cert directory]]
root@OpenWRT:/ # DEVICE=[[DEVICE]]
root@OpenWRT:/ # z-connector -d $DEVICE -s z-cloud.z-wave.me --cert=$CERT_DIR/cert.pem --key=$CERT_DIR/cert.key --cacert=$CERT_DIR/cacert.pem
# Final step is to make startup script, but this depends on your router! Something like:
#!/bin/bash
# replace [[XXX]] with appropriate value
BIN_PATH=[[path to z-connector]] # path to z-connector binary: /usr/bin/, /jffs/bin, /opt/bin or some other depending on your router
CERT_DIR=[[cert directiry]] # directory where you have stored certificates
DEVICE=[[Device]] # /dev/ttyUSB0, /dev/ttyACM0, /dev/usb/tty/0 or another depending on the Z-Wave hardware and kernel version you have
while [ 1 ] do
$BIN_PATH/z-connector -d $DEVICE -s z-cloud.z-wave.me --cert=$CERT_DIR/cert.pem --key=$CERT_DIR/cert.key --cacert=$CERT_DIR/cacert.pem
sleep 1 # spare the CPU
done
Sooner or later we will make a simple script and share binary for most popular routers. Here are binaries for Asus RT-N16. Don't forget, that you will still need to copy certificates as shown above and make startup script.
Compiling Z-Connector for OpenWRT, DD-WRT routers and their clones
Anyone there can help with this to WRT350N v.2
Have updated my router with OpenWrt Backfire 10.03.1 - but don't know to do the Linux stuff...
Please try to follow the description above
You will need a Linux box to compile Z-Connector for OpenWRT. We are not sure you can do it on Windows. Basically you can even do it on a Live CD of Ubuntu if you download some additional packages like gcc.
-
- Posts: 10
- Joined: 03 May 2012 12:54
Error in the makefile
I tried compiling Z-connector and the Makefile seems to contain an error. The following line:
$(INSTALL_BIN) $(PKG_BUILD_DIR)/z-connector $(1)/bin/
should be changed to:
$(INSTALL_BIN) $(PKG_BUILD_DIR)/z-agent $(1)/bin/
I also had to select the option "[*] Build the OpenWrt based Toolchain" in the make menuconfig step, as it's impossible to compily anything without creating the right toolchain for your target architecture first.
I suppose the argtable and libopenssl-packages can also be installed from regular OpenWRT repositories (no need to compile them yourself).
$(INSTALL_BIN) $(PKG_BUILD_DIR)/z-connector $(1)/bin/
should be changed to:
$(INSTALL_BIN) $(PKG_BUILD_DIR)/z-agent $(1)/bin/
I also had to select the option "[*] Build the OpenWrt based Toolchain" in the make menuconfig step, as it's impossible to compily anything without creating the right toolchain for your target architecture first.
I suppose the argtable and libopenssl-packages can also be installed from regular OpenWRT repositories (no need to compile them yourself).
Thnks for your comments
We will fix the typo in Makefile.Yes, you need to compile the whole toolchain before.And you can also install argtable and openssl precompiled pakages. See./scripts/feeds update -a
./scripts/feeds install argtablelines above - they install argtable. OpenSSL libraries are usually pre-installed on all routers, since they are needed for HTTPS and VPN services.
./scripts/feeds install argtablelines above - they install argtable. OpenSSL libraries are usually pre-installed on all routers, since they are needed for HTTPS and VPN services.
-
- Posts: 10
- Joined: 03 May 2012 12:54
"Socket has gone" error
I attached a Z-Wave USB-stick and compiled the latest version of the z-connector (1.02) for DD-WRT, but I'm unable to set up a reliable connection to the zwave.me-server. This is the debug-output of z-agent:
Opening device...
[D] Configuring device...
[D] Creating a socket...
[D] Enabling keep-alives on the socket...
Connecting to server...
[D] Initialising OpenSSL environment...
[D] Allocating SSL context...
[D] Loading personal certificate...
[D] Loading personal certificate key...
[D] Loading CA certificate...
[D] Setting verification mode...
Establishing SSL connection...
[D] Allocating SSL session...
[D] Assigning socket...
Performing SSL handshake...
[D] Initialising SSL state...
[D] Sending handshake...
[D] Server has closed the SSL connection
[D] Shutting down SSL session...
[D] Freeing SSL session...
Establishing SSL connection...
[D] Allocating SSL session...
[D] Assigning socket...
Performing SSL handshake...
[D] Initialising SSL state...
[D] Sending handshake...
Loop started
[D] socket has data
[D] 5 bytes:
[D] 01 03 00 07 FB
[D] socket has data
[D] 5 bytes:
[D] 01 03 00 07 FB
[D] socket has data
[D] 5 bytes:
[D] 01 03 00 07 FB
[D] Server has closed the connection
[E] Socket has gone
Loop ended
[D] Shutting down SSL session...
[D] Freeing SSL session...
[D] Freeing SSL context...
Any idea what's going on here? It looks like a similar issue has already been observed and fixed) for Mac OS X...
Opening device...
[D] Configuring device...
[D] Creating a socket...
[D] Enabling keep-alives on the socket...
Connecting to server...
[D] Initialising OpenSSL environment...
[D] Allocating SSL context...
[D] Loading personal certificate...
[D] Loading personal certificate key...
[D] Loading CA certificate...
[D] Setting verification mode...
Establishing SSL connection...
[D] Allocating SSL session...
[D] Assigning socket...
Performing SSL handshake...
[D] Initialising SSL state...
[D] Sending handshake...
[D] Server has closed the SSL connection
[D] Shutting down SSL session...
[D] Freeing SSL session...
Establishing SSL connection...
[D] Allocating SSL session...
[D] Assigning socket...
Performing SSL handshake...
[D] Initialising SSL state...
[D] Sending handshake...
Loop started
[D] socket has data
[D] 5 bytes:
[D] 01 03 00 07 FB
[D] socket has data
[D] 5 bytes:
[D] 01 03 00 07 FB
[D] socket has data
[D] 5 bytes:
[D] 01 03 00 07 FB
[D] Server has closed the connection
[E] Socket has gone
Loop ended
[D] Shutting down SSL session...
[D] Freeing SSL session...
[D] Freeing SSL context...
Any idea what's going on here? It looks like a similar issue has already been observed and fixed) for Mac OS X...
Make sure the port is correct
There are two possibilities:
1) The port is a wrong one. Check Run_Z-Agent.sh file to set the correct port
2) You are using not the latest version of Z-Connector. We have updated Z-Connector two days ago fixing this issue for Mac OS X.
It might also be possible that this fix breakes correct work of Z-Connector on DD-WRT. This is to be checked. Please try with the latest version (download again - unfortunately the version number was nt changed - we will fix this next time. If it will not help, we will provide you with previous version to make tests.
1) The port is a wrong one. Check Run_Z-Agent.sh file to set the correct port
2) You are using not the latest version of Z-Connector. We have updated Z-Connector two days ago fixing this issue for Mac OS X.
It might also be possible that this fix breakes correct work of Z-Connector on DD-WRT. This is to be checked. Please try with the latest version (download again - unfortunately the version number was nt changed - we will fix this next time. If it will not help, we will provide you with previous version to make tests.
-
- Posts: 10
- Joined: 03 May 2012 12:54
Still the same error
I recompiled the last version from source and still get the same error. I used following command to run the z-agent on DD-WRT:
/mnt/bin/z-agent -s z-cloud.z-wave.me --cacert /mnt/etc/certs/cacert.pem --cert /mnt/etc/certs/cert.pem --key /mnt/etc/certs/cert.key -d /dev/tty
Meanwhile, I tried to run the Z-Connector on Windows (7) and Mac OS X (10.6). On those systems, I also get the "Socket has gone" error, so it does not seem to be related to DD-WRT.
/mnt/bin/z-agent -s z-cloud.z-wave.me --cacert /mnt/etc/certs/cacert.pem --cert /mnt/etc/certs/cert.pem --key /mnt/etc/certs/cert.key -d /dev/tty
Meanwhile, I tried to run the Z-Connector on Windows (7) and Mac OS X (10.6). On those systems, I also get the "Socket has gone" error, so it does not seem to be related to DD-WRT.
/dev/tty is not the correct port
It should be /dev/ttyUSBx. Please check the port. On Windows and Mac OS X it was well tested and proved to work, so the problem is certainly in the selected port.
-
- Posts: 10
- Joined: 03 May 2012 12:54
Fixed by loading required kernel module
Apparently the required kernel module was not yet properly loaded (I did not notice this earlier). Once I loaded it, a device file /dev/ttyUSB0 was created and now z-agent runs fine. Note I switched to OpenWRT in the mean time as my DD-WRT-installation was a bit outdated. Thanks for the detailed installation instructions!