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é)
    Plate-forme de test

    Plate-forme de test

     

    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

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:

     

    Fenêtre de dévelopement de l'IDE Arduino

    Fenêtre de dévelopement de l’IDE Arduino

    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 :

Console de l'IDE

Console de l’IDE

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 :

Flux

Flux

Flux

Flux

Flux

Flux

Statut du canal MQTT :

Canal MQTT

Canal MQTT

Détail d’un message MQTT avec l’explorateur WMQ

Liste des messages

Liste des messages

Propriété du message

Propriété du message

Détail du message

Détail du message

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