openHAB 3.0 - création d'un switch qui publie son état via des messages MQTT
Je ne suis pas un expert d’openHAB, loin de là. Fin 2020, pour les besoins d’un projet, je souhaitais utiliser openHAB pour collecter (facilement) les données remontées par des capteurs classiques et les “exporter” au travers de messages MQTT. Pourquoi une plateforme telle qu’openHAB ? Pour m’affranchir de la partie communication (et de tous les protocoles) avec les capteurs/actionneurs, et pouvoir ainsi utiliser la grande variété de matériels disponible dans le commerce. Il me suffisait de connecter openHAB à un broker MQTT et à déclencher l’envoi de message via des règles…
À cette époque c’était openHAB 2.x avec des modules MQTT en version 1 ou 2 (!) et j’avoue m’être perdu dans les différents tutoriaux… Comme je l’ai précisé au début, je ne suis pas un expert d’openHAB et j’en découvrais également l’architecture avec tous ses bindings, things, items, channels, etc. et ses interfaces Basic UI, Paper UI, HABmin, HABPanel, etc. Certains tutoriaux utilisant les GUI, d’autres les fichiers texte… Et comble de malchance, un crash en bonne et due forme de la carte SD de mon Raspberry fin décembre !
Heureusement, entre temps le Père Noël est passé par là et nous a apporté openHAB 3.0 ! Une bonne raison pour tout reprendre à zéro avec la nouvelle architecture. Dans ce tutoriel je vais vous expliquer comment créer un switch qui, à chaque fois qu’il sera actionné, publier un message MQTT avec son état on/off.
Pour information, voici ma configuration pour ce tutoriel. L’utilisation de Docker ne change rien; ça permet simplement de repartir à zéro rapidement… au cas où…
- laptop sous Ubuntu 18.04 LTS
- openHAB 3.0 installé sous Docker via le tuto openHAB - Installation through Docker
- Portainer pour gérer Docker (cf. tuto How to Install Portainer Docker UI Manager on Ubuntu 18.04)
- Eclipse Mosquitto 1.6.12 dans un conteneur Docker également (cf. tuto Running the eclipse-mosquitto MQTT Broker in a docker container)
- MQTT Explorer pour visualiser les messages MQTT
Les différentes étapes ont été réalisées via l’interface graphique d’openHAB3.
Création d’un switch
Il s’agit de créer un interrupteur on/off dans openHAB. Cet objet est “virtuel”, c’est-à-dire qu’il n’est connecté à aucun matériel physique.
- Items → Blue « + » → Add Item → Name =
TestSwitch001
, Label = « Test Switch 001 », Type =Switch
→ Create - le nouveau switch on/off est dispo dans l’interface sous l’onglet Items
Installation et configuration de MQTT dans openHAB 3.0
Je me suis basé pour cela sur le tutoriel [OH3] MQTT Setup and Configuration.
- installation du binding MQTT dans openHAB3: Settings → Bindings → Blue « + » → MQTT → Install
- connexion d’openHAB3 au broker MQTT: Settings → Things → Blue « + » → MQTT Binding → MQTT Broker
- Broker Hostname/IP =
localhost
→ Create Thing - le Bridge Thing apparaît dans la liste des Things et est ONLINE
- NB: l’id du MQTT Broker est
mqtt:broker:ccc94a5065
- Broker Hostname/IP =
Création de règles pour publier des messages MQTT quand on active le switch
Pour comprendre le fonctionnement général des règles sous openHAB je me suis inspiré du tutoriel Linking a switch to an MQTT publish. Parmi les options proposées, j’ai choisi d’utiliser un script JavaScript. Par contre, en testant mon script via Run Now (Ctrl-R) les messages n’étaient pas envoyés. Après avoir vérifié que mon broker MQTT fonctionnait bien, j’ai été amené à utiliser la syntaxe présentée dans le post mqttAction in js in OH3.
Pour résumer, voici comment créer la règle qui enverra un message MQTT ON
sur le topic testswitch001
quand le switch Test Switch 001
recevra la commande ON
:
-
Rules → Blue « + » → Name = « Test Switch 001 On »
-
When → Add Trigger → Item Event → Show non-semantic →
Test Switch 001
→ Pick → received a command ON → Done -
Then → Add Action → Run Script →
ECMAScript
actions.get("mqtt","mqtt:broker:ccc94a5065").publishMQTT("testswitch001","ON")
-
Save…
Idem pour créer la règle qui enverra un message MQTT OFF
sur le topic testswitch001
quand le switch Test Switch 001
recevra la commande OFF
.
Tests…
On utilise ensuite MQTT Explorer (par exemple) connecté sur notre broker pour voir les messages. Dans Items → Test Switch 001 on peut actionner le switch ce qui déclenche bien l’envoi de messages MQTT !
Et voilà !
Conclusion
Voilà la synthèse de mes premières expérimentations sous openHAB 3.0. Si ça peut servir à d’autres personnes, ce sera avec plaisir. Je ne suis pas un expert d’openHAB, mais cette nouvelle version 3.0 me paraît plus intuitive et… j’ai réussi à faire fonctionner MQTT ;-) Si vous avez des remarques ou des suggestions, n’hésitez pas à me contacter sur manuel.munier@univ-pau.fr.
Prochaine étape:
- reproduction de l’installation sur le Raspberry (sans Docker)
- branchement et configuration des périphériques en Z-Wave (température, luminosité, etc.)
- définition de règles/scripts pour publier en MQTT les données remontées par les capeurs