MQTT

MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie publication-souscription basé sur le protocole TCP/IP

Le schéma à droite montre le principe de fonctionnement de MQTT. A gauche figurent les “publieurs”. Ce sont des machines (Arduino, ESP8266, Raspberry Pi…)  qui captent des valeurs (température, humidité, pression, consommation électrique, consommation d’eau…) et les envoient à un serveur appelé “Broker”.

Des clients “souscripteurs” sont connectés au “Broker”. Ils ont sollicité l’envoi de certaines données.

Lorsque le Broker reçoit ces données, il les retransmet aux clients qui se sont abonnés à ce flux de données.

Par exemple un des clients souscripteurs recevra la température et l’humidité pour en faire un graphe en temps réel.

L’autre client recevra la consommation d’eau et déclenchera une alerte si elle dépasse une valeur déterminée.


https://www.framboise314.fr/utiliser-le-protocole-mqtt-pour-communiquer-des-donnees-entre-2-raspberry-pi/#Le_protocole_MQTT

Les Topics

Les clients MQTT s’enregistrent auprès du broker sur des topics, des sortes de chemins d’accès à une ressource.

Ces chemins commencent par le caractère " / " et sont composés d’une liste de mots eux mêmes séparés par les " / "

Exemple : /sensor/1/temperature

N.B : Surtout pas d’espaces dans les mots et pas de caractères accentués

Les clients publieurs publient sur un topic donné

Les clients souscripteurs demandent à être notifiés lorsque quelqu’un publie sur ces topics.

Cela peut être un topic de température par exemple : /sensor/1/temperature.

On peut souscrire à un ensemble de topics en utilisant des wildcards # ou +.

Par exemple, si un client publie sur les topics :

/sensor/1/temperature
et
/sensor/1/humidity

Un autre client peut écouter ces deux topics à la fois :

/sensor/1/#

Si plusieurs clients publient leurs températures et humidités en intercalant leur numéro de client sur leurs topics, un autre client peut écouter toutes les températures ainsi : /sensor/+/temperature

Il recevra alors les températures du client 1 : (/sensor/1/temperature) et du client 2 : (/sensor/2/temperature), etc.

Utilisation des topics

Pour l’envoi des informations on peut avoir deux possibilités d’usage :

Exemple d'utilisation des topics

Soit l’ensemble d’informations à transmettre ci-dessous :

Pour le premier cas, soit un topic par information

/Application/Sensor/Lieu/Temperature
/Application/Sensor/Lieu/Pression

Exemple : Le capteur de "Lille" relevant une température de 22,5° et une pression de 720 mm de mercure transmettra donc la valeur 22.5 sur le topic /Application/Sensor/Lille/Temperature et la valeur 720 sur le topic /Application/Sensor/Lille/Pression.

Remarque : La température est liée au lieu qui identifie le capteur, de même la pression est liée au lieu. A chaque fois que l'on transmet une température ou une pression, il faut donc indiquer le lieu. Or, on a choisi ici de ne transmettre qu'une seule valeur dans le message MQTT. C'est pourquoi, on place l'identification du capteur (c'est à dire le lieu) dans le topic.

Pour le second cas, soit un seul topic pour l'ensemble des informations liées

/Application/Sensor

On sérialise le triplet {Lieu,Température,Pression} en JSON et dans le cas de notre exemple, on obtient la chaîne de caractères : {"Lieu":"Lille","Temperature":22.5,"Pression":720}

Remarque : Par cette méthode, on ne peut pas s'abonner uniquement à une sélection de lieux, puisque le broker MQTT permet de filtrer sur les topics mais pas sur le contenu des messages. Pour pallier à ce problème, on peut choisir d'utiliser le topic /Application/Sensor/Lieu. Bien que l'information de lieu soit répétée dans le topic et dans le message, cela peut être la solution. Sinon, on retire le lieu du message JSON et on pourra l'extraire du topic, pour le récupérer à réception du message.