Mise en œuvre de MQTT avec WMQ 7.5
Contexte
Depuis la version 7.0.1.2, le logiciel WebSphere MQ est capable de transporter et de traiter un nouveau format de message, le format « MQTT ». Cet article présente un exemple de mise en œuvre de MQTT avec WebSphere MQ.
Il s’agit de collecter les paramètres environnementaux d’une pièce (température, humidité, luminosité), et d’envoyer ces données à des applications WebSphere MQ via MQTT.
Les données sont collectées via des capteurs pilotés par une carte Arduino.
MQTT
MQTT (MQ Telemetry Transport) est un protocole de messaging destiné aux applications (M2M).
Il est idéal pour relier des capteurs, des actionneurs, … à un centre de commande avec une bande passante faible et/ou de mauvaise qualité.
C’est un protocole de type PubSub, qui s’interface avec WebSphere MQ (MQSeries) mais également avec un certain nombre de brokers Open Source.
Il a été initialement développé par Andy Stanford-Clark (IBM) et Arlen Nipper (EuroTech), puis donné à la communauté Open Source. La spécification du protocole MQTT est disponible sur developerWorks .
Il est utilisé aussi bien pour remonter des informations de pression, débit, température, sur des pipe-lines, comme support pour la messagerie instantanée dans Facebook, ou pour monitorer à distance des pacemakers.
Il existe des clients MQTT pour différents langages et plates-formes, et en particulier : C, C++, Java, Python, Android, Mbed, Raspberry Pi et … Arduino.
Il existe également des « Advanced Clients » fournis par IBM qui apportent des fonctions supplémentaires.
Arduino
L’Arduino est une plate-forme de prototypage « open-source », c’est-à-dire que les différents éléments (schémas des cartes électroniques, typons pour graver les circuits, …) sont libres de droits.
Les cartes Arduino embarquent un microcontrôleur (par exemple un ATmega328), un peu de mémoire et beaucoup d’entrées sorties. Elles se programment avec un IDE également open-source qui s’apparente au C++.
Sur les cartes Arduino, on peut empiler des « shield », qui permettent d’ajouter des fonctions (Ethernet, Wifi, …) à une carte Arduino de base.
Plus d’information : http://www.arduino.cc/en/Guide/Introduction
Matériel utilisé
- Un serveur Intel (pour héberger le Queue Manager)
- Une carte Arduino Uno + shield Ethernet
- Un capteur humidité / température DHT22/AM2302
- Une photoresistance type CE5-09 (pour la luminosité)
On voit ci-dessus la carte Arduino (en dessous) alimentée par un câble USB (blanc), le shield Ethernet au dessus avec un câble RJ45 (jaune), en bas à droite le AM2302, et sur la plaque d’essai la LDR et sa résistance.
Logiciels utilisés
- WMQ version 7.5
- Support Pack MA01 « Q Program »
- IDE Arduino version 1.0.1
- Client MQTT pour Arduino de Nicholas O’Leary version 19.1
- Drivers pour le capteur DHT
Application et paramétrage
L’application Arduino a été développée via l’IDE fourni, en utilisant les différents exemples disponibles. Le principe est simple :
- Initialisation des paramètres (adresse IP de l’Arduino, adresse IP du serveur MQ, définition des topics PubSub, affectation des broches de l’Arduino en fonction des capteurs connectés)
- Boucle de lecture sur les capteurs, conversion des valeurs, et publication en MQTT
- vue de la fenêtre de développement dans l’IDE:
Le programme complet est en annexe.
Coté WebSphere MQ, il suffit de créer les files d’attente, et de faire pour celles-ci une souscription administrative.
Exemple pour une file :
DEFINE QLOCAL(‘THL01.Hum’) +
MAXDEPTH(50000) +
REPLACE
DEFINE SUB(‘THL01.Hum’) +
TOPICSTR(‘THL/THL01/humidite’) +
DEST(‘THL01.Hum’) +
REPLACE
Le script MQSC complet est en annexe.
Il est possible de suivre l’exécution de l’application via une console :
Consommation des messages
Les messages reçus sur le Queue Manager sont consommés avec le MA01. On utilise les commandes suivantes :
q -m LMD75 -I THL01.Hum -w 120
q -m LMD75 -I THL01.Temp -w 120
q -m LMD75 -I THL01.Lum -w 120
Résultat :
Statut du canal MQTT :
Détail d’un message MQTT avec l’explorateur WMQ
Conclusion
L’intégration de MQTT dans un environnement WebSphere MQ est relativement facile à réaliser.
Les messages récupérés par les applications sont de type PubSub (en tête RFH2), et ils peuvent être renvoyés vers un autre Queue Manager, un cluster MQ, … ou consommés par un client MQ classique.
Avec ce type d’application, il est possible de remonter facilement des paramètres environnementaux vers une infrastructure informatique « classique » (Queue Managers, serveurs, d’application, …). Il est également possible d’envoyer via MQTT des commandes à des actionneurs (relais, moteurs, vannes, …) mais il faut probablement dans ce cas ajouter une couche de sécurité à la communication.
Liens
- Le site MQTT
- Page MQTT sur Wikipedia
- RedBook IBM : Building Smarter Planet Solutions with MQTT and IBM WebSphere MQ Telemetry SG24-8054-00
Scripts
Script MQSC :
Création des files et des souscriptions administratives
Programme Arduino :
Programme Arduino THL01_Eth_MQTT_1.ino