Difference between revisions of "MQTT"

From air
Jump to navigation Jump to search
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
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, ...).
 
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 ([http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/MQTT_V3.1_Protocol_Specific.pdf spec 3.1]).
+
Les messages échangés sont encodés en binaire ([http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/MQTT_V3.1_Protocol_Specific.pdf 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 [https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=mqtt standardisation] à l'[[OASIS]].
 
MQTT a été proposé à la [https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=mqtt standardisation] à l'[[OASIS]].
  +
  +
==Introduction==
  +
* [http://fr.slideshare.net/andypiper/introducing-mqtt Présentation d'Andy Piper]
  +
* [http://mosquitto.org/man/mqtt-7.html Les grands principes en quelques lignes]
  +
* [http://www.redbooks.ibm.com/redbooks/pdfs/sg248054.pdf IBM RedBook on MQTT]
   
 
==API, Logiciels, Middleware==
 
==API, Logiciels, Middleware==
Line 11: Line 18:
 
===Node.js===
 
===Node.js===
 
* [[Mosca]]
 
* [[Mosca]]
  +
* [[Node-RED]] : visual tool
  +
* Bridge MQTT-WebSockets https://www.npmjs.org/package/mqtt-ws
  +
* [[Cyclon#MQTT|Cyclon]]
  +
* [[Eclipse Ponte]]
  +
  +
==Python==
  +
* mqttwarn (MQTT notifier) https://github.com/jpmens/mqttwarn
   
 
== Utilisation de MQTT en Java ==
 
== Utilisation de MQTT en Java ==
Line 21: Line 35:
   
 
=== Serveur ===
 
=== Serveur ===
  +
* [[Mosquitto]] (en Python)
En premier lieu, il faut un serveur MQTT
 
  +
* [[Moquette]] (en Java)
*===> Installer Mosquitto (http://mosquitto.org/) ou sur Ubuntu:
 
  +
* [[RabbitMQ]]
**sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
 
**sudo apt-get update
 
**sudo apt-get install mosquitto python-mosquitto
 
'''NOTE''': Il existe un serveur MQTT publique et gratuit (évitant l'installation) fourni par eclipse: m2m.eclipse.org lancé sur le port 1883 ; Ne marche pas avec le WiFi de la fac à cause d'un blocage des ports
 
   
 
=== Client ===
 
=== Client ===
 
Ensuite, prendre une API Java pour un client MQTT. Il en existe plusieurs (voir http://mqtt.org/software):
 
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:
 
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 ====
 
==== Eclipse Paho ====
 
* Le site: http://www.eclipse.org/paho
 
* Le site: http://www.eclipse.org/paho
Line 41: Line 56:
 
* Un artefact maven est disponible pour ce client: http://mvnrepository.com/artifact/org.fusesource.mqtt-client/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.
 
* Des exemples d'implémentation publisher/subscriber sont disponibles sur la page d'accueil de leur site.
  +
  +
==Publication & Découverte==
  +
  +
===[[DNS]]===
  +
<pre>
  +
dig _mqtt._tcp.mosquitto.org srv
  +
</pre>
  +
  +
===[[DNS-SD]]===
  +
Term 1
  +
<pre>
  +
dns-sd -R "LocalMosquitto" _mqtt._tcp. . 1883 "Mosquitto is started"
  +
</pre>
  +
  +
Term 2
  +
<pre>
  +
dns-sd -B _mqtt._tcp.
  +
</pre>
  +
  +
Term 3
  +
<pre>
  +
dns-sd -R "SecuredLocalMosquitto" _smqtt._tcp. . 8883 "Secured Mosquitto is started"
  +
</pre>
  +
  +
Term 4
  +
<pre>
  +
dns-sd -B _smqtt._tcp.
  +
</pre>
   
 
==A regarder==
 
==A regarder==
Line 46: Line 89:
 
* http://www.eclipsecon.org/2012/sessions/using-mqtt-and-eclipse-tools-write-end-end-m2m-application-0
 
* 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
 
* 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://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/
 
* http://chemicaloliver.net/internet/node-js-mqtt-and-websockets/

Latest revision as of 09:34, 9 November 2014

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

API, Logiciels, Middleware

Node.js

Python

Utilisation de MQTT en Java

Architecture client/serveur avec MQTT

Voici l'architecture d'un exemple d'utilisation:

  • 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.

Plus de détails sont donnés dans les parties ci-dessous.

Serveur

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 !

FuseSource MQTT

Publication & Découverte

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