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)
Enjoy this article?
Support my open-source work via Github or follow me on Twitter for more blog posts and other interesting articles from around the web. I'd also love to hear your thoughts on this post - simply drop a comment below!