MQTT: Difference between revisions

From air
Jump to navigation Jump to search
 
(25 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]] ...
==API et Logiciels==

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==
* http://mqtt.org/software
* http://mqtt.org/software
* python-mosquitto – a Python client module provided by the mosquitto project
* 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===
===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 ==
=== 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 ===
* [[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 ====
* 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==

* 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/

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