Mise en œuvre de MQTT avec WMQ 7.5

lundi 22 avril 2013
par Luc-Michel Demey

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é)
    JPEG - 147.5 ko
    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 :
    PNG - 31.4 ko
    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 :

PNG - 35.4 ko
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 :

PNG - 3.1 ko
Flux "humidité"
PNG - 3.3 ko
Flux "Luminosité"
PNG - 3.2 ko
Flux "Température"

Statut du canal MQTT :

PNG - 20.4 ko
Canal MQTT

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

PNG - 14 ko
Liste des messages
PNG - 5.1 ko
Propriété du message
PNG - 12.7 ko
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 :

Texte - 752 octets
Création des files et des souscriptions admministratives

Programme Arduino :

Texte - 2.7 ko
Programme Arduino THL01_Eth_MQTT_1.ino

Brèves

15 août - Annonce FixPack 11 pour IBM ACE v11.0

6 mois après la disponibilité du produit, App Connect Enterprise voit arriver son premier FixPack (...)

8 août - Annonce du FixPack 8.5.5.14 pour WAS 855

IBM annonce ce jour la disponibilité du FixPack 14 pour WAS 8.5.5.

23 juillet - IBM MQ 9.1 et IBM MQ Appliance M2002 sont disponibles

IBM MQ 9.1 est disponible au téléchargement sur l’ensemble des plates-formes supportées. (...)

28 juin - Annonce du FixPack 9.0.0.8 pour tWAS 9.0

IBM annonce ce jour la disponibilité du FixPack 8 pour WebSphere Application Server (...)

21 juin - Annonce du FixPack 8.0.0.10 pour IBM MQ v8.0

IBM annonce ce jour la disponibilité du FixPack 10 pour IBM MQ v8.0.

13 avril - Annonce du FixPack 8.0.0.9 pour WebSphere MQ v8.0

IBM annonce ce jour la disponibilité du FixPack 9 pour WebSphere MQ v8.0.