MQTT

MQ Telemetry Transport (MQTT) est un protocole de transport de données pour le M2M pour des réseaux à faible débit. MQTT suit le pattern publish-subscribe entre le capteur et un ou plusieurs puits de collecte (ie M2M box, back office, ...). Les messages échangés sont encodés en binaire (spec 3.1). Les souscripteurs s'abonnent à un topic (voir plusieurs via l'utilisation de wildcards + et # dans la hiérarchie de topics).

Des bridges ont été développés entre MQTT est d'autres protocoles : HTTP REST, Atom, PubSubHubBub, XMPP, WebSockets ...

MQTT a été proposé à la standardisation à l'OASIS.

Introduction

 * Présentation d'Andy Piper
 * Les grands principes en quelques lignes
 * IBM RedBook on MQTT

API, Logiciels, Middleware

 * http://mqtt.org/software
 * python-mosquitto – a Python client module provided by the mosquitto project
 * Plateforme M2M (MQTT, OData, OPC, Modbus, Zigbee/ZWave, ...) http://www.thingworx.com/

Node.js

 * Mosca
 * Node-RED : visual tool
 * Bridge MQTT-WebSockets https://www.npmjs.org/package/mqtt-ws
 * Cyclon
 * Eclipse Ponte

Python

 * mqttwarn (MQTT notifier) https://github.com/jpmens/mqttwarn

Architecture client/serveur avec MQTT
Voici l'architecture d'un exemple d'utilisation: Plus de détails sont donnés dans les parties ci-dessous.
 * Lancer le serveur sur une IP + port.
 * Créer un "subscriber" qui va se connecter au serveur et s'abonner à un ou plusieurs "topic(s)"
 * Créer un "publisher" qui va se connecter au serveur et créer des messages dans divers topics. Les subscribers à ces derniers recevront les messages.

Serveur

 * Mosquitto (en Python)
 * Moquette (en Java)
 * RabbitMQ

Client
Ensuite, prendre une API Java pour un client MQTT. Il en existe plusieurs (voir http://mqtt.org/software): Ci-dessous, la démarche à suivre pour deux d'entre eux:


 * WMQTT : Petite console graphique pubsub MQTT en Java SE et ME (IA92)

Eclipse Paho
/!\ Pas d'artefact maven disponible a l'heure d'aujourd'hui !
 * Le site: http://www.eclipse.org/paho
 * Le jar a utilisé (a inclure dans le classpath pour l'utiliser): http://www.eclipse.org/downloads/download.php?file=/paho/drops/org.eclipse.paho.client.mqttv3.jar.
 * Pour aller plus en détails dans l'implémentation publisher/subscriber, voici un exemple d'utilisation Java avec cette API:
 * https://github.com/eclipse/paho.mqtt.java/blob/master/org.eclipse.paho.sample.mqttv3app/src/org/eclipse/paho/sample/mqttv3app/Sample.java

FuseSource MQTT

 * Le site: http://mqtt-client.fusesource.org/ ; Le GIT: https://github.com/fusesource/mqtt-client
 * Un artefact maven est disponible pour ce client: http://mvnrepository.com/artifact/org.fusesource.mqtt-client/mqtt-client/
 * Des exemples d'implémentation publisher/subscriber sont disponibles sur la page d'accueil de leur site.

DNS
dig _mqtt._tcp.mosquitto.org srv

DNS-SD
Term 1 dns-sd -R "LocalMosquitto" _mqtt._tcp. . 1883 "Mosquitto is started"

Term 2 dns-sd -B _mqtt._tcp.

Term 3 dns-sd -R "SecuredLocalMosquitto" _smqtt._tcp. . 8883 "Secured Mosquitto is started"

Term 4 dns-sd -B _smqtt._tcp.

A regarder

 * http://www.eclipsecon.org/2012/sessions/using-mqtt-and-eclipse-tools-write-end-end-m2m-application-0
 * http://www.eclipsecon.org/2012/sites/eclipsecon.org.2012/files/EclipseCon2012_M2M.pdf
 * Tutoriel : https://docs.google.com/presentation/d/1N9OiMxiVWPbsVrAcPfT-J0k1o7a-neIp7TVFGa6AkWM/edit?pli=1#slide=id.g1d409a344_09
 * http://blog.hekkers.net/2012/10/13/realtime-data-with-mqtt-node-js-mqtt-js-and-socket-io/
 * http://chemicaloliver.net/internet/node-js-mqtt-and-websockets/