ZWave2MQTT : Une passerelle IoT OpenSource pour vos objets ZWave
Je viens de mettre à jour ma passerelle Opensource ZWave2MQTT permettant de récolter des messages d'objets connectés en ZWave au travers d'un bus de message MQTT.
Le fonctionnement de cette passerelle est très simple :
- Elle écoute les messages du réseau ZWave au travers d'un dongle Zwave USB.
- Elle transforme chaque message reçu en structure JSON qu'elle publie ensuite sur un bus MQTT (ex: Mosquitto) pour les rendre disponibles à un consommateur (ex: Node-Red).
Vous pouvez retrouver la description complète de ce schéma d'architecture dans un précédent article : Les 5 ingrédients pour fabriquer sa propre box domotique OpenSource
Zwave2MQTT utilise la librairie Node node-openzwave-shared pour permettre la connexion et l'écoute du réseau.
Cette librairie est ni plus ni moins qu'un wrapper Node de la librairie C++ OpenZwave.
A contrario des anciennes librairies node-zwave, le binding du wrapper avec la librairie native est désormais dynamique.
L'installation de ZWave2MQTT sur un Raspberry Pi se fait en 3 étapes :
1. Node & Bus MQTT
Assurez-vous d'avoir Node et NPM d'installés ainsi qu'un bus MQTT comme Mosquitto par exemple.
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -
$ sudo apt-get install -y nodejs
$ sudo apt-get install -y mosquitto
2. Installez la librairie OpenZwave
$ sudo apt-get install libudev-dev
$ cd ~
$ wget https://old.openzwave.com/downloads/openzwave-1.4.1.tar.gz
$ tar zxvf openzwave-*.gz
$ cd openzwave-* && make && sudo make install
Faites en sorte que la librairie OpenZwave installée dans "/usr/local/lib" puisse être détectée sur votre environnement :
export LD_LIBRARY_PATH=/usr/local/lib
sudo sed -i '$a LD_LIBRARY_PATH=/usr/local/lib' /etc/environment
3. Installez la passerelle Zwave2MQTT
$ cd ~
$ git clone https://github.com/ltoinel/ZWave2MQTT.git
$ cd ZWave2MQTT
$ npm install
Configurez les différentes options disponibles :
$ vi config.js
Les deux options importantes à modifier sont :
- L'adresse IP de votre passerelle MQTT : "config.mqtt.uri"
- Le pointeur vers votre dongle ZWave : "config.device"
4.Démarrez ensuite la passerelle
$ ./start.sh
initialising OpenZWave addon (/opt/zwave2mqtt/node_modules/openzwave-shared/lib/../build/Release/openzwave_shared.node)
Initialising OpenZWave 1.4.2723 binary addon for Node.JS.
OpenZWave Security API is ENABLED
ZWave device db : /usr/local/etc/openzwave
User settings path : /opt/zwave2mqtt/node_modules/openzwave-shared/build/Release/../../
Option Overrides : --SaveConfig false --Logging false --ConsoleOutput true --SuppressRefresh false
-> Starting zwave2mqtt v1.1.0
Connecting to the MQTT Server : mqtt://192.168.1.2
Connected to the MQTT broker
{"name":"zwave2mqtt","hostname":"domogeeek","pid":1340,"level":30,"msg":"Scanning homeid=0x184ced3...","time":"2017-09-10T14:36:00.557Z","v":0}
{"name":"zwave2mqtt","hostname":"domogeeek","pid":1340,"level":30,"msg":"Scan complete, hit ^C to finish.","time":"2017-09-10T14:36:25.163Z","v":0}
Vous pouvez utiliser le script "pm2.sh" pour rendre le processus persistant après un redémarrage. Pour cela installez "pm2" sur votre Raspberry.
sudo npm install pm2 -g
./pm2.sh
pm2 startup
pm2 save
Une fois la passerelle démarrée, vous trouverez autant de topics MQTT que de type de messages ZWave reçus. Sur chacun des topic créés, vous retrouverez l'ensemble des messages capturés encodés en JSON.
Si vous rencontrez des difficultés de fonctionnement, l'activation des logs de la librairie se fait depuis le fichier config.js au travers du paramètre "config.logging".
Pour analyser le contenu des queues MQTT, vous pouvez utiliser un client MQTT graphique comme MQTT-Spy
Enfin, si vous souhaitez récupérer les messages ZWave depuis Node-Red, il vous suffira d'utiliser le client MQTT de Node-Red et de le connecter à votre serveur MQTT en utilisant '#' comme nom de topic :
Les messages publiés sur le bus MQTT sont au format suivant :
{"source":"zwave[7]","label":"Power","value":"2618.972","action":"ValueChanged","timestamp":1505055671661}
- Source : identifiant de l'objet ZWave ayant émis le message.
- Label : Type de message reçu
- Value : Valeur du message
- Action : Type d'action
- Timestamp : Date de réception du message
Vous voilà avec une passerelle ZWave opérationnelle vous permettant d'exploiter tous les messages émis par votre réseau d'objets connectés ZWave avec un couplage lâche entre le connecteur et le consommateur du message.