openHAB 3.0 - envoi de l'état d'un item d'un groupe via MQTT
Voici un très bref tutoriel pour mettre en place une règle sous openHAB 3.0 qui permet d’envoyer un message MQTT à chaque fois qu’un Item d’un Group est mis à jour.
Le script JS associé à cette règle est donné ci-dessous. Le code est disponible ici.
// Get native logger
var logger = Java.type("org.slf4j.LoggerFactory").getLogger("org.openhab.model.script.Rules.Experiments");
// Get hostname
var hostname = java.net.InetAddress.getLocalHost().getHostName();
// Get Rule details
var ruleUID = ctx.ruleUID;
var ruleName = rules.get(ruleUID).name;
// Get infos on the Item that caused the event
//logger.info("*** triggeringItem = "+triggeringItem);
var itemName = triggeringItem.name;
var itemState = triggeringItem.state;
// Publish to MQTT
var mqttBrokerId = "mqtt:broker:69c1409ae6";
var topic = hostname+"/"+ruleUID+"/"+itemName;
var payload = itemState;
logger.info("MQTT publish to '"+mqttBrokerId+"' on topic '"+topic+"' with payload '"+payload+"'");
actions.get("mqtt",mqttBrokerId).publishMQTT(topic,payload);
Dans le log nous voyons bien les informations journalisées.
Et nous pouvons utiliser l’explorateur MQTT de notre choix (ici MQTT.fx) pour souscrire aux différents topics et vérifier le contenu (payload) des messages envoyés depuis notre plateforme openHAB.
Remarque sur les groupes imbriqués
Il faut noter que si openHAB permet effectivement de créer des sous-groupes, c’est-à-dire de mettre des groupes dans des groupes, les événements had a member update ne concernent que les éléments inclus directement dans un groupe, et non dans les sous-groupes.
Nous avons par exemple testé cette règle sur le groupe Group, InoValley All Items
, lequel contient les sous-groupes Group, InoValley 4101
et Group, InoValley a401
, lesquels contiennent leurs Items respectifs. Et bien… la règle n’est jamais déclenchée :-(
Cela réduit donc fortement l’intérêt des sous-groupes (en tout cas pour l’utilisation que nous souhaitions en faire). Mais, comme indiqué dans la documentation d’openHAB, s’ils nous permettent de créer des sous-groupes cela ne correspond pas (pour l’instant) à la philosophie du modèle d’événements qu’ils ont développé. Et de nous conseiller de n’avoir donc qu’un seul niveau de groupes pour mettre en place des règles.
Conclusion
Je vous ai présenté de manière très synthétique comment ajouter une règle à un groupe d’Items pour récupérer depuis le script JS l’Item qui a déclenché l’événement, l’état de cet Item, puis envoyer un message MQTT contenant cet état. Pour ce tutoriel, toutes les étapes ont été réalisées directement via l’interface graphique d’OH3.
Pour toutes remarques ou suggestions, n’hésitez surtout pas à me contacter sur manuel.munier@univ-pau.fr.