MQTT: un protocole de réseau ouvert et son importance dans l'IoT

IoT de réseau de protocole MQTT

Souviens toi du nom MQTT, puisqu'il s'agit d'un protocole de communication réseau de type M2M (Machine to Machine) qui va sonner un peu. Il devient très populaire grâce à la nouvelle ère de l'Internet des objets ou IoT (Internet of Things) pour son acronyme en anglais. De plus, c'est un protocole ouvert, ce qui présente de nombreux avantages.

En fait, il est devenu l'un des piliers centraux de l'IoT, car il est assez bon sur les appareils avec certaines limitations de transmission comme celles-ci. L'acronyme MQTT vient de Transport de télémétrie Message Queuing, une norme ouverte d'OASIS et ISO (ISO / CEI 20922) pour les communications réseau et qui fonctionne généralement sur le fameux TCP / IP.

Protocoles réseau

Modèle OSI et ses couches

Les protocoles de communication Ce sont des règles qui permettent à deux ou plusieurs appareils ou systèmes de communiquer entre eux. C'est-à-dire qu'il s'agit d'un protocole pour transmettre des informations par divers moyens et avec un format défini, qu'il soit mis en œuvre par logiciel et matériel (ou les deux).

El standard du protocole définit une multitude de caractéristiques de communication. Cela peut aller des règles de synchronisation, de sémantique, de syntaxe, de format de paquet, etc. Et la vérité est qu'ils ne sont pas négligeables, car grâce à ces protocoles aujourd'hui, nous pouvons utiliser Internet et d'autres réseaux de communication ...

Et bien sûr, il n'y a pas qu'un seul protocole, mais plusieurs. Par exemple, les célèbres DNS, FTP, MQTT, HTTP et HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP, etc., pour la couche application. Alors que dans la couche de transport, vous pouvez en trouver des aussi célèbres que TCP, UDP, etc., ainsi que celles de la couche Internet comme IPv4 ou IPv6 (celle qui a rendu possible le plus grand nombre d'adresses IP disponibles et l'arrivée de l'IoT), IPSec, etc., et d'autres de la couche de liaison tels que DSL, Ethernet, WiFi, ARP, etc.

À propos des protocoles IoT

Protocole MQTT

Bien entendu, il existe des protocoles de communication spécifiques ou qui peuvent être appliqués au IdO. C'est-à-dire que, compte tenu de la section précédente, il s'agirait d'une série de normes définies afin que deux ou plusieurs appareils IoT puissent communiquer et se comprendre, et ils sont généralement M2M, c'est-à-dire une communication de machine à machine. de nombreux appareils IoT connectés et partageant des informations à partir de capteurs ou d'autres sources.

En raison du grand nombre d'appareils IoT, ces protocoles doivent répondre à des exigences allant au-delà des limites de bande passante, de vitesse, etc. (notez que de nombreux appareils sont embarqués et bon marché), ce qui se trouve généralement dans certains appareils. Et je veux dire le fait que doit être évolutif, pour pouvoir ajouter d'autres appareils connectés si nécessaire et sans affecter le système global.

En outre, ils doivent avoir un faible dépendance couplage entre les appareils, de sorte que des problèmes ne sont pas générés si un appareil est retiré. Et bien sûr, dans le même temps, une forte interopérabilité est recherchée pour qu'il fonctionne avec un grand nombre d'appareils et des systèmes très variés, car le monde de l'IoT est assez hétérogène.

D'autres fonctionnalités utiles seraient la facilité de leur mise en œuvre, sécurité, etc. Gardez à l'esprit que l'IoT crée de grands défis dans le domaine de la sécurité. D'autant plus que de nombreux appareils connectés sont généralement critiques dans certains cas ... par exemple, des jouets pour mineurs.

Concepts importants

Cela dit, il faut dire que les solutions pour l'IoT utilisent un serveur centralisé pour recevoir les messages de tous les appareils connectés qui les émettent et les distribuer à tous les appareils IoT connectés qui sont à l'écoute. Ce serveur est ce qu'on appelle routeur ou courtier. Quelque chose qui est loin de la relation client-serveur conventionnelle à certains égards.

En outre, les méthodologies que vous pouvez trouver dans ces protocoles de communication pour l'IoT sont:

  • PubSub: Publish / Susbcribe est un modèle de messagerie dans lequel un périphérique (Sub) informe le courtier qu'il souhaite recevoir un message, tandis qu'un autre périphérique (Pub) publie des messages que le courtier distribue aux autres périphériques qui les attendent.
  • rRPC: Les appels de procédure Router Remoder sont un autre modèle d'exécution de processus à distance. Dans celui-ci, un appareil (Appelé) informe le courtier qu'il effectuera une certaine procédure et le courtier la distribue à un autre appareil (Appelant) sur lequel ledit processus est exécuté.

Maintenant, pour mettre en œuvre ces méthodologies ou modèles, un infrastructure de messagerie. Et en ce sens on peut en distinguer deux:

  • Message Queue: service de messagerie où une seule file d'attente de messages est générée pour tous les clients qui initient un abonnement au courtier. Ce dernier conservera les messages stockés jusqu'à leur remise au client. Si le client ou le destinataire n'est pas connecté, il est maintenu jusqu'à ce qu'il soit connecté. Ces types de services sont similaires à ceux utilisés dans les applications de messagerie instantanée telles que Telegra, WhatsApp, Messenger, etc.
  • Service de messagerie: c'est un autre service dans lequel le courtier envoie les messages au client destinataire connecté, en filtrant par type de message. Si le client ou le périphérique récepteur est déconnecté, les messages sont perdus (bien qu'il puisse disposer d'un système de journalisation).

Protocoles IoT

Après avoir vu ce qui précède, regardons maintenant de plus près Protocoles IoT qui sont mieux connus. Parmi les plus importants du M2M, on trouve:

  • AMQP (protocole avancé de mise en file d'attente de messages): est un protocole de type PubSub de Message Queue. Conçu pour avoir une bonne interopérabilité et assurer la fiabilité. Surtout pour les applications d'entreprise, hautes performances, réseaux à latence élevée, critiques, etc.
  • WAMP (protocole de messagerie d'application Web): c'est un autre protocole ouvert de type PubSub comme rRPC, et il fonctionne sur WebSockets.
  • CoAP (protocole d'application contraint): est un protocole spécialement conçu pour les applications de faible capacité.
  • TOMP (Protocole de Messagerie Orientée Texte en Streaming): protocole très simple et pour atteindre une interopérabilité maximale. HTTP est utilisé pour transmettre des messages texte.
  • XMPP (protocole de messagerie et de présence extensible): un autre protocole utilisé dans l'IoT pour les applications de messagerie instantanée et basé sur XML. Jan cette affaire est également ouverte.
  • WMQ (file d'attente de messages WebSphere): protocole développé par IBM. Il est du type Message Queue, comme son nom l'indique, et est orienté message.
  • MQTT: (voir section suivante)

Tout sur MQTT

Paquet MQTT

El Protocole MQTT Il s'agit d'un protocole de communication Message Queue, qui suit un modèle PubSub, et de type M2M, comme je l'ai déjà mentionné. Il est largement utilisé dans l'IoT et est basé sur la pile TCP / IP utilisée sur Internet.

Dans le cas de MQTT, chaque connexion est maintenue ouverte et il est réutilisé dans toutes les communications nécessaires. Quelque chose de différent de ce qui se passe dans d'autres protocoles connus, que chaque communication a lieu nécessite une nouvelle connexion.

Avantages

Les avantages du protocole MQTT sont assez évidents en termes de communications M2M pour l'IoT. En plus de tout ce qui a été dit ci-dessus, c'est un protocole qui fournit:

  • Évolutivité, pour connecter de plus en plus de clients.
  • Découplage entre clients, pour moins de dépendance.
  • Asynchronisme.
  • Simplicité.
  • Légèreté pour ne pas consommer trop de ressources (bien qu'avec la sécurité TLS / SSL ça monte).
  • Économe en énergie pour les appareils qui dépendent de la batterie ou fonctionnent 24h / 7 et XNUMXj / XNUMX, il n'a pas besoin d'une large bande passante (idéal pour les connexions lentes, comme certaines connexions sans fil).
  • Sécurité et qualité, pour une fiabilité et une robustesse accrues des communications.

Notre Histoire

MQTT a été créé dans les années 90, avec une première version du protocole en 1999. Il a été créé par le Dr Andy Stanford-Clark d'IBM et Arlen Nipper de Cirrus Link (anciennement Eurotech).

La idée initiale était de créer un protocole pour surveiller un pipeline qui traversait le désert, avec un protocole de communication efficace (faible consommation de bande passante), léger, et cela à faible consommation d'énergie. À l'époque, c'était très cher, mais maintenant c'est devenu un protocole bon marché et ouvert.

Le protocole initial a été amélioré avec l'apparition de nouvelles versions, comme MQTT v3.1 (2013) sous la spécification OASIS (Organization for the Advancement of Structured Information Standards), etc. Il faut savoir qu'au départ c'était un protocole propriétaire IBM, mais qu'il allait sortir en 2010, et qu'il a fini par devenir un standard dans OASIS ...

Comment fonctionne la connexion MQTT

Le protocole MQTT utilise un filtre, pour les messages envoyés à chaque client, en fonction de sujets ou de sujets organisés de manière hiérarchique. De cette manière, un client peut publier un message sur un sujet spécifique. De cette manière, tous les clients ou appareils connectés qui s'abonnent à la rubrique recevront des messages via le courtier.

Tout comme MQ, les messages resteront dans la file d'attente et ils ne sont pas perdus tant que le client n'a pas reçu ce message.

Les connexions, comme je l'ai également indiqué, sont faites via TCP / IP, et le serveur ou le courtier conservera un enregistrement des clients connectés. Par défaut, les périphériques utiliseront les ports de communication numéro 1883, bien que vous puissiez également rencontrer le port 8883 si vous utilisez SSL / TLS pour plus de sécurité.

Pour que la connexion soit possible, non seulement les clients, les serveurs et les ports sont nécessaires. Aussi d'autres colis ou messages envoyés pour que la communication ait lieu:

  • Établir la connexion: Message / paquet CONNECT envoyé par le client avec toutes les informations nécessaires. Ces informations incluent l'identifiant client, le nom d'utilisateur, le mot de passe, etc. Le courtier ou le serveur répond avec un paquet CONNACK qui informera le client que la connexion a été acceptée, rejetée, etc.
  • Envoyer et recevoir des messages: une fois la connexion établie, les packages ou messages PUBLISH sont utilisés avec le sujet et la charge utile du message envoyé au courtier. D'autre part, le ou les clients intéressés utilisent les packages SUBSCRIBE et UNSUSCRIBE pour souscrire ou retirer leur abonnement respectivement. Le courtier répondra également avec un package SUBACK et UNSUBACK respectivement pour signaler le succès de l'opération demandée par le client.
  • Maintenir la connexion: pour garantir que la connexion reste ouverte, les clients peuvent envoyer périodiquement un paquet PINGREQ qui sera mis en correspondance avec un paquet PINGRESP du serveur.
  • Terminer la connexion: lorsqu'un client se déconnecte, il envoie un paquet DISCONNECT pour signaler cet événement.

Ceux messages ou paquets Ceux dont j'ai parlé ont une structure identique à celle des autres paquets d'autres protocoles réseau:

  • En-tête ou en-tête fixe: est une partie fixe qui occupe entre 2 et 5 octets. Il contient un code de contrôle, l'identifiant du type de message envoyé et sa longueur. Entre 1 et 4 octets sont utilisés pour coder la longueur, en utilisant les 7 premiers bits de chaque octet comme données pour la longueur et un bit supplémentaire de continuité pour déterminer qu'il y a plus d'un octet qui constitue la longueur du message.
  • En-tête variable: n'est pas toujours obligatoire, mais facultatif. Il n'est contenu dans certains packages que dans certaines situations ou messages spécifiques.
  • Contenu ou données: les données du paquet sont ce qui contient réellement le message à envoyer. Cela peut aller de quelques Ko à une limite de 256 Mo.

Si vous souhaitez savoir le code correspondant en hexadécimal pour les types de messages envoyés sont:

Message Code
CONNECTEZ-VOUS Assistance
CONNECTER Assistance
PUBLIER Assistance
PUBLIC Assistance
public Assistance
PUBLIER Assistance
PUB COMP Assistance
INSCRIPTION Assistance
SOUS-RETOUR Assistance
INSCRIRE 0xA0
DÉBALLER 0xB0
PINGRÉQ 0xC =
PINGRESP 0xD0
DÉCONNECTER 0xE0

Qualité et sécurité des communications

Un autre détail important des messages de MQTT est le qualité de service ou QoSet la sécurité. La robustesse du système de communication en cas de panne et sa sécurité en dépendront.

Concernant sa qualité, il peut être déterminé 3 niveaux différents:

  • QoS 0 (non-reconnaissance)- Le message n'est envoyé qu'une seule fois, et en cas d'échec, il ne sera pas délivré. Il est utilisé lorsqu'il n'est pas critique.
  • QoS 1 (acquitter): le message sera envoyé autant de fois que nécessaire pour garantir la livraison au client. L'inconvénient est que le client peut recevoir le même message plusieurs fois.
  • QoS 2 (assuré)- Similaire à ci-dessus, mais garanti pour être livré une seule fois. Il est souvent utilisé pour des systèmes plus critiques où une plus grande fiabilité est nécessaire.

D'autre part, comme pour Sécurité MQTT, diverses mesures peuvent être utilisées pour assurer sa solidité à cet égard. Comme je l'ai déjà mentionné, l'authentification de l'utilisateur et du mot de passe, comme beaucoup d'autres protocoles, peut être assurée par SSL / TLS. Bien que de nombreux appareils IoT à faibles capacités ou ressources puissent avoir des problèmes de surcharge de travail lors de l'utilisation de ce type de communication sécurisée ...

Pour cette raison, de nombreux appareils IoT qui utilisent MQTT utilisent des mots de passe et des utilisateurs dans texte d'avion, ce qui pourrait inciter quelqu'un à renifler le trafic réseau pour l'obtenir très facilement. Et si cela ne suffit pas, le courtier peut également être configuré pour accepter les connexions anonymes, ce qui permettrait à tout utilisateur d'établir des communications, ce qui impliquerait un plus grand risque.

Utilisation de MQTT avec Arduino

Arduino UNO avec MQTT

Bien sûr, vous pouvez utiliser le protocole MQTT avec Arduino et d'autres cartes de développement, ainsi que le Rapsberry Pi, etc. Pour ce faire, vous devez fournir à votre carte Arduino une connectivité, si elle ne l'a pas. Aussi, la bibliothèque Client Arduino pour MQTT cela vous aidera dans ces tâches. Cette bibliothèque est compatible avec:

Vous savez déjà que vous pouvez télécharger et installer la bibliothèque dans votre IDE Arduino à l'aide de la commande: clone git https://github.com/knolleary/pubsubclient.git

Dès que au code pour utiliser MQTT dans certaines applications, la vérité est que c'est simple. Dans l'image Fritzing, vous pouvez voir une plaque Arduino UNO à laquelle la connectivité par Arduino Ethernet a été ajoutée et elle a également été connectée un capteur d'humidité et de température DHT22, même si cela aurait pu être autre chose ...

Ok, cela dit, pour le code que vous devez générer dans IDE Arduino Pour travailler avec le protocole MQTT sur Arduino, c'est aussi simple que cela:

  • Pour envoyer des messages MQTT
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT22

// Direccion MAC del adaptador Ethernet
byte mac[] = { 0xCE, 0xAB, 0x0E, 0x3F, 0xFE, 0xD4 };

// IP del servidor (broker)
IPAddress mqtt_server(192, 168, 1, 4);

// Topic o tema con el que se trabaja
const char* topicName = "test";

DHT dht(DHTPIN, DHTTYPE);
EthernetClient ethClient;
PubSubClient client(ethClient);

void setup()
{
  Serial.begin(9600);
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Fallo en Ethernet usando DHCP");
  }
// Puerto 1883 de comunicación
  client.setServer(mqtt_server, 1883);
  dht.begin();
}

void loop()
{
  if (!client.connected()) {
    Serial.print("Conectando ...\n");
    client.connect("Cliente Arduino");
  }
  else {
    // Envío de informacion del sensor de temperatura y humedad
    float temp = dht.readTemperature();
    char buffer[10];
    dtostrf(temp,0, 0, buffer);
    client.publish(topicName, buffer);
  }
  // Tiempo entre envíos en ms (cada 10 segundos)
  delay(10000);
}

  • Pour recevoir des messages par MQTT, vous n'avez besoin que de la plaque Arduino UNO et connexion, avec Arduino Ethernet ou tout autre élément. Quant au code, un exemple serait:
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>

// Direccion MAC del adaptador Ethernet
byte mac[] = { 0xCE, 0xAB, 0x0E, 0x3F, 0xFE, 0xD4 };

// IP del servidor (broker)
IPAddress mqtt_server(192, 168, 1, 4);

// Topic o tema con el que trabajr
const char* topicName = "test";

EthernetClient ethClient;
PubSubClient client(ethClient);

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("El mensaje ha llegado [");
  Serial.print(topic);
  Serial.print("] ");
  int i=0;
  for (i=0;i<length;i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void setup()
{
  Serial.begin(9600);
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Fallo en Ethernet al usar configuración DHCP");
  }
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback)
}

void loop()
{
  if (!client.connected()) {
      Serial.print("Conectando ...");
      if (client.connect("rece_arduino")) {
        Serial.println("conectado");
        client.subscribe(topicName);
      } else {
        delay(10000);
      }
  }
  // Cliente a la escucha
  client.loop();
}

N'oubliez pas que vous devez changer l'adresse IP pour celle appropriée pour le serveur, et vous devez également changer l'adresse MAC de votre adaptateur réseau Ethernet ou celui que vous utilisez, ainsi que le reste du code si vous avez l'intention de l'adapter à un projet différent. C'est juste un exemple!

Pour plus d'informations, vous pouvez télécharger gratuitement de notre Manuel PDF avec le cours Arduino IDE pour commencer la programmation.


Soyez le premier à commenter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.