updated Jan 2018
Compiling open-zwave for Home Assistant 0.45 on Docker
Home Assistant uses the open-zwave library to control Z-Wave home automation devices like light switches and door sensors. Unfortunately, this library’s last release (1.5) was back in August 2016 and doesn’t include configurations for many Z-Wave devices I use (like the Linear NGDZ00-4 Garage Door). I therefore needed to create a custom open-zwave fork, cherry-pick recent commits for the functionality I need, and have my fork compiled into a custom Home Assistant Docker image.
Doing this with Home Assistant 0.45 only required three quick tweaks:
Remove PyPI package
Home Assistant 0.45 now installs python_openzwave from PyPI, but we want to build it from source, so remove that from requirements_all.txt:
diff --git a/requirements_all.txt b/requirements_all.txt
index 6141e3d..2da4ce0 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -695,9 +695,6 @@ python-vlc==1.1.2
# homeassistant.components.wink
python-wink==1.2.4
-# homeassistant.components.zwave
-python_openzwave==0.4.0.31
-
# homeassistant.components.device_tracker.trackr
pytrackr==0.0.5
Add Build Script
Next, add a script to build open-zwave and the Python library:
diff --git a/virtualization/Docker/scripts/python_openzwave b/virtualization/Docker/scripts/python_openzwave
new file mode 100755
index 0000000..bd975fb
--- /dev/null
+++ b/virtualization/Docker/scripts/python_openzwave
@@ -0,0 +1,42 @@
+#!/bin/sh
+# Sets up and builds python open zwave to be used with Home Assistant.
+# Dependencies that need to be installed:
+# apt-get install cython3 libudev-dev python3-sphinx python3-setuptools
+
+# Stop on errors
+set -e
+
+cd "$(dirname "$0")/.."
+
+if [ -d build ]; then
+ rm -rf build
+fi
+
+mkdir -p build
+
+cd build
+
+git clone --branch v0.3.3 --recursive --depth 1 https://github.com/OpenZWave/python-openzwave.git
+cd python-openzwave
+
+git fetch origin
+git checkout v0.3.3
+
+git config --global remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
+git clone --recursive --depth 1 https://github.com/colinodell/open-zwave.git openzwave
+#git config --global --unset remote.origin.fetch
+
+cd openzwave
+git fetch origin
+git checkout V1.5-with-customizations
+git config --global --unset remote.origin.fetch
+cd ..
+
+pip3 install --upgrade cython==0.24.1
+PYTHON_EXEC=`which python3` make build
+PYTHON_EXEC=`which python3` make install
+mkdir -p /usr/local/share/python-openzwave
+cp -R openzwave/config /usr/local/share/python-openzwave/config
+
+rm -rf openzwave/.git
+
Run During Docker Build
Finally, add our custom build script to the docker build process:
diff --git a/virtualization/Docker/setup_docker_prereqs b/virtualization/Docker/setup_docker_prereqs
index a6bf716..0efb9bf 100755
--- a/virtualization/Docker/setup_docker_prereqs
+++ b/virtualization/Docker/setup_docker_prereqs
@@ -30,6 +30,7 @@ PACKAGES=(
# Required debian packages for building dependencies
PACKAGES_DEV=(
cmake git
+ cython3
# libcec
swig
)
@@ -50,6 +51,8 @@ if [ "$INSTALL_FFMPEG" == "yes" ]; then
virtualization/Docker/scripts/ffmpeg
fi
+virtualization/Docker/scripts/python_openzwave
+
if [ "$INSTALL_LIBCEC" == "yes" ]; then
virtualization/Docker/scripts/libcec
fi
That’s it!
(Gist mirror: https://gist.github.com/colinodell/8a72098921b484cedb3980228ab75419)