MQTT: Difference between revisions

From air
Jump to navigation Jump to search
No edit summary
 
(19 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==
== Utilisation de MQTT en Java ==
* mqttwarn (MQTT notifier) https://github.com/jpmens/mqttwarn
En premier lieu, il faut un serveur MQTT.
*===> Installer Mosquitto (http://mosquitto.org/) ou sur Ubuntu:
**sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
**sudo apt-get update
**sudo apt-get install mosquitto python-mosquitto
N.B: Il existe un serveur MQTT publique et gratuit 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

Ensuite, prendre une API Java pour un client MQTT
*===> Voir eclipse Paho: http://www.eclipse.org/paho.
** 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


== Utilisation de MQTT en Java ==
=== Architecture client/serveur avec MQTT ===
Voici l'architecture d'un exemple d'utilisation:
Voici l'architecture d'un exemple d'utilisation:
* Lancer le serveur sur une IP + port.
* 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 "subscriber" qui va se connecter au serveur et s'abonner à un ou plusieurs "topic(s)"
* Créer un "publisher" qui va créer des messages dans divers topics. Les subscribers abonnés à ces derniers recevront les messages.
* 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 ===
Pour aller plus en détails, voici un exemple d'utilisation Java avec l'API eclipse paho:
* [[Mosquitto]] (en Python)
*https://github.com/eclipse/paho.mqtt.java/blob/master/org.eclipse.paho.sample.mqttv3app/src/org/eclipse/paho/sample/mqttv3app/Sample.java
* [[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 ====
* 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 36: 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 07: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