Difference between revisions of "MQTT"

From air
Jump to navigation Jump to search
 
(21 intermediate revisions by 2 users 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 ==
  +
=== Architecture client/serveur avec MQTT ===
En premier lieu, il faut un serveur MQTT.
 
  +
Voici l'architecture d'un exemple d'utilisation:
*===> Installer Mosquitto (http://mosquitto.org/) ou sur Ubuntu:
 
  +
* Lancer le serveur sur une IP + port.
**sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
 
  +
* Créer un "subscriber" qui va se connecter au serveur et s'abonner à un ou plusieurs "topic(s)"
**sudo apt-get update
 
  +
* 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.
**sudo apt-get install mosquitto python-mosquitto
 
  +
Plus de détails sont donnés dans les parties ci-dessous.
   
  +
=== Serveur ===
Ensuite, prendre une API Java pour un client MQTT
 
  +
* [[Mosquitto]] (en Python)
*===> Voir eclipse Paho: http://www.eclipse.org/paho.
 
  +
* [[Moquette]] (en Java)
** Le jar 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
 
  +
* [[RabbitMQ]]
   
  +
=== Client ===
Pour l'utilisation, voir l'exemple fourni se trouvant sur GIT à l'adresse suivante:
 
 
Ensuite, prendre une API Java pour un client MQTT. Il en existe plusieurs (voir http://mqtt.org/software):
*https://github.com/eclipse/paho.mqtt.java/blob/master/org.eclipse.paho.sample.mqttv3app/src/org/eclipse/paho/sample/mqttv3app/Sample.java
 
  +
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 ====
 
* 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.
  +
'''/!\''' Pas d'artefact maven disponible a l'heure d'aujourd'hui !
  +
* 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.
  +
  +
==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 30: 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