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

8 septembre - IBM Integration Bus V10.0 - Fix Pack 10.0.0.10

IBM annonce ce jour le Fix Pack 10.0.0.10 pour IBM Integration Bus V10.0.
Cette mise à jour (...)

13 juillet - Annonce du Fix Pack 8.0.0.7 pour IBM MQ v8

Le FixPack 7 pour IBM MQ version 8.0 est disponible pour les système distribuées, JMS for z/OS, (...)

2 juin - IBM Integration Bus V10.0 - Fix Pack 10.0.0.9

IBM annonce ce jour le Fix Pack 10.0.0.9 pour IBM Integration Bus V10.0.
Comme d’habitude, (...)

11 mai - IBM MQ 9.0.0.1 est disponible

IBM annonce ce jour la disponibilité de MQ version 9.0.0.1. Il s’agit de la version LTSR (Long (...)

27 mars - MQ-CPH Performance Harness

Le laboratoire IBM d’Hursley a rendu disponible sur Github un outil de simulation de charge pour (...)

1er mars - Mise à jour du SupportPack MH06 : WebSphere MQ - Trace Tools

Le MH06 est un SupportPack qui propose des outils en mode ligne qui aident à analyser les (...)