MQTT: Ein offenes Netzwerkprotokoll und seine Bedeutung für das IoT

MQTT-Protokollnetzwerk IoT

Merk dir den Namen MQTT, da es sich um ein Netzwerkkommunikationsprotokoll vom Typ M2M (Machine to Machine) handelt, das ziemlich viel klingen wird. Dank der neuen Ära des Internet der Dinge oder des Internet der Dinge (IoT) für sein Akronym in Englisch wird es immer beliebter. Darüber hinaus ist es ein offenes Protokoll, das viele Vorteile bietet.

Tatsächlich ist es zu einer der zentralen Säulen des IoT geworden, da es auf Geräten mit einigen Übertragungsbeschränkungen wie diesen recht gut ist. Das Akronym MQTT stammt von Message Queuing-Telemetrietransport, ein offener Standard von OASIS und ISO (ISO / IEC 20922) für die Netzwerkkommunikation, der im Allgemeinen auf dem berühmten TCP / IP ausgeführt wird.

Netzwerkprotokolle

OSI-Modell und seine Schichten

Die Kommunikationsprotokolle Dies sind Regeln, nach denen zwei oder mehr Geräte oder Systeme miteinander kommunizieren können. Das heißt, es ist ein Protokoll zum Übertragen von Informationen auf verschiedene Weise und mit einem definierten Format, unabhängig davon, ob es von Software und Hardware (oder von beiden) implementiert wird.

El Standard des Protokolls definiert eine Vielzahl von Kommunikationsmerkmalen. Es kann von den Regeln der Synchronisation, Semantik, Syntax, Paketformat usw. ausgehen. Und die Wahrheit ist, dass sie nicht zu vernachlässigen sind, da wir dank dieser Protokolle heute das Internet und andere Kommunikationsnetze nutzen können ...

Und natürlich gibt es nicht nur ein Protokoll, sondern viele. Beispielsweise, der berühmte DNS, FTP, MQTT, HTTP und HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP usw. für die Anwendungsschicht. Während Sie sich in der Transportschicht befinden, finden Sie einige so berühmte wie TCP, UDP usw. sowie solche der Internetschicht wie IPv4 oder IPv6 (diejenige, die die größte Anzahl verfügbarer IPs und das Eintreffen von ermöglicht hat IoT), IPSec usw. und andere aus der Verbindungsschicht wie DSL, Ethernet, WiFi, ARP usw.

Informationen zu IoT-Protokollen

MQTT-Protokoll

Natürlich gibt es spezielle Kommunikationsprotokolle oder diese können auf die angewendet werden IoT. Das heißt, wenn man den vorherigen Abschnitt betrachtet, handelt es sich um eine Reihe definierter Standards, damit zwei oder mehr IoT-Geräte miteinander kommunizieren und sich verstehen können, und es handelt sich normalerweise um M2M, dh um eine Kommunikation von Maschine zu Maschine Viele IoT-Geräte sind verbunden und tauschen Informationen von Sensoren oder anderen Quellen aus.

Aufgrund der großen Anzahl von IoT-Geräten müssen diese Protokolle Anforderungen erfüllen, die über die Einschränkungen von Bandbreite, Geschwindigkeit usw. hinausgehen. (Beachten Sie, dass viele Geräte eingebettet und billig sind), was normalerweise bei einigen Geräten der Fall ist. Und ich meine die Tatsache, dass muss skalierbar sein, um bei Bedarf weitere verbundene Geräte hinzufügen zu können, ohne das globale System zu beeinträchtigen.

Außerdem müssen sie eine haben geringe Abhängigkeit Kopplung zwischen Geräten, so dass keine Probleme entstehen, wenn ein Gerät entfernt wird. Gleichzeitig wird natürlich eine hohe Interoperabilität angestrebt, damit sie mit einer großen Anzahl von Geräten und sehr unterschiedlichen Systemen funktioniert, da die Welt des IoT sehr heterogen ist.

Andere nützliche Funktionen wären die einfache Implementierung. die Sicherheit, usw. Beachten Sie, dass das IoT im Sicherheitsbereich große Herausforderungen mit sich bringt. Dies gilt umso mehr, wenn viele der angeschlossenen Geräte in bestimmten Fällen normalerweise kritisch sind ... zum Beispiel Spielzeug für Minderjährige.

Wichtige Konzepte

Es muss jedoch gesagt werden, dass Lösungen für das IoT einen zentralen Server verwenden, um die Nachrichten von allen verbundenen Geräten zu empfangen, die sie senden, und sie an alle verbundenen IoT-Geräte zu verteilen, die sie abhören. Dieser Server ist bekannt als Router oder Broker. Etwas, das in gewisser Weise weit von der herkömmlichen Client-Server-Beziehung entfernt ist.

Ferner die Methoden In diesen Kommunikationsprotokollen für IoT finden Sie:

  • PubSub: Publish / Susbcribe ist ein Nachrichtenmuster, bei dem ein Gerät (Sub) den Broker darüber informiert, dass es eine Nachricht empfangen möchte, während ein anderes Gerät (Pub) Nachrichten veröffentlicht, die der Broker an die anderen Geräte verteilt, die auf sie warten.
  • rRPC: Router Remoder Procedure Calls ist ein weiteres Muster für die Ausführung von Remote-Prozessen. Darin informiert ein Gerät (Callee) den Broker darüber, dass es eine bestimmte Prozedur ausführen wird, und der Broker verteilt es an ein anderes Gerät (Caller), auf dem dieser Prozess ausgeführt wird.

Um diese Methoden oder Muster auszuführen, a Messaging-Infrastruktur. Und in diesem Sinne können zwei unterschieden werden:

  • Nachrichtenwarteschlange: Messaging-Dienst, bei dem eine einzelne Nachrichtenwarteschlange für alle Clients generiert wird, die ein Abonnement für den Broker initiieren. Letzterer speichert die Nachrichten so lange, bis sie an den Client übermittelt werden. Wenn der Client oder Empfänger nicht verbunden ist, wird er bis zur Verbindung beibehalten. Diese Arten von Diensten ähneln denen, die in Instant Messaging-Apps wie Telegra, WhatsApp, Messenger usw. verwendet werden.
  • Nachrichtendienst: Dies ist ein weiterer Dienst, bei dem der Broker die Nachrichten an den verbundenen Empfängerclient sendet und nach dem Nachrichtentyp filtert. Wenn der Client oder das empfangende Gerät nicht verbunden ist, gehen die Nachrichten verloren (obwohl möglicherweise ein Protokollierungssystem vorhanden ist).

IoT-Protokolle

Nachdem wir das oben Gesagte gesehen haben, schauen wir uns das jetzt genauer an IoT-Protokolle das sind besser bekannt. Zu den bekanntesten von M2M gehören:

  • AMQP (Advanced Message Queuing Protocol): ist ein PubSub-Protokoll der Nachrichtenwarteschlange. Entwickelt, um eine gute Interoperabilität zu gewährleisten und Zuverlässigkeit zu gewährleisten. Insbesondere für Unternehmensanwendungen, Netzwerke mit hoher Leistung, hoher Latenz, kritische Netzwerke usw.
  • WAMP (Web Application Messaging Protocol): ist ein weiteres offenes PubSub-Protokoll wie rRPC und läuft auf WebSockets.
  • Constrained Application Protocol (CoAP): ist ein Protokoll, das speziell für Anwendungen mit geringer Kapazität entwickelt wurde.
  • TOMP (Streaming Text Oriented Messaging Protocol): sehr einfaches Protokoll und maximale Interoperabilität zu erreichen. HTTP wird zum Übertragen von Textnachrichten verwendet.
  • XMPP (eXtensible Messaging and Presence Protocol): Ein weiteres Protokoll, das im IoT für Instant Messaging-Apps verwendet wird und auf XML basiert. Jan dieser Fall ist auch offen.
  • WMQ (WebSphere-Nachrichtenwarteschlange): Protokoll von IBM entwickelt. Es ist vom Typ Message Queue, wie der Name schon sagt, und nachrichtenorientiert.
  • MQTT: (siehe nächster Abschnitt)

Alles über MQTT

MQTT-Paket

El MQTT-Protokoll Es ist ein Message Queue-Kommunikationsprotokoll, das einem PubSub-Muster folgt und vom M2M-Typ ist, wie ich bereits erwähnt habe. Es ist im IoT weit verbreitet und basiert auf dem im Internet verwendeten TCP / IP-Stack.

Im Fall von MQTT, Jede Verbindung wird offen gehalten und es wird in jeder notwendigen Kommunikation wiederverwendet. Etwas anderes als bei anderen bekannten Protokollen, dass jede Kommunikation stattfindet, erfordert eine neue Verbindung.

Vorteil

Die Vorteile des MQTT-Protokolls liegen in der M2M-Kommunikation für das Internet der Dinge auf der Hand. Zusätzlich zu allem, was oben gesagt wurde, ist es ein Protokoll, das Folgendes bietet:

  • Skalierbarkeit, um immer mehr Kunden zu verbinden.
  • Entkopplung zwischen Clients für weniger Abhängigkeit.
  • Asynchronismus.
  • Einfachheit.
  • Leichtigkeit, um nicht zu viele Ressourcen zu verbrauchen (obwohl sie mit TLS / SSL-Sicherheit steigt).
  • Es ist energieeffizient für Geräte, die von der Batterie abhängig sind oder rund um die Uhr arbeiten. Es benötigt keine große Bandbreite (ideal für langsame Verbindungen, wie einige drahtlose).
  • Sicherheit und Qualität für mehr Zuverlässigkeit und Robustheit in der Kommunikation.

Geschichte

MQTT wurde in den 90er Jahren mit einer frühen Version des erstellt Protokoll im Jahr 1999. Es wurde von Dr. Andy Stanford-Clark von IBM und Arlen Nipper von Cirrus Link (ehemals Eurotech) erstellt.

La erste Idee war es, ein Protokoll zur Überwachung einer Pipeline zu erstellen, die durch die Wüste fuhr, mit einem effizienten Kommunikationsprotokoll (geringer Bandbreitenverbrauch), Licht und einem geringen Energieverbrauch. Zu der Zeit war es sehr teuer, aber jetzt ist es ein billiges und offenes Protokoll geworden.

Das ursprüngliche Protokoll wurde mit dem Auftreten von verbessert neue Versionen, wie MQTT v3.1 (2013) gemäß der OASIS-Spezifikation (Organisation zur Förderung strukturierter Informationsstandards) usw. Sie sollten wissen, dass es sich am Anfang um ein proprietäres IBM-Protokoll handelte, dass es jedoch 2010 veröffentlicht wurde und schließlich zum Standard in OASIS wurde ...

So funktioniert die MQTT-Verbindung

Das MQTT-Protokoll verwendet ein Filterfür die Nachrichten, die an jeden Client gesendet werden, basierend auf Themen oder Themen, die hierarchisch organisiert sind. Auf diese Weise kann ein Kunde eine Nachricht zu einem bestimmten Thema veröffentlichen. Auf diese Weise erhalten alle Clients oder verbundenen Geräte, die das Thema abonnieren, Nachrichten über den Broker.

Wie ist MQ, Nachrichten bleiben in der Warteschlange und sie gehen nicht verloren, bis der Client diese Nachricht erhalten hat.

Die Verbindungen werden, wie ich auch angedeutet habe, hergestellt über TCP / IP, und der Server oder Broker zeichnet die verbundenen Clients auf. Standardmäßig verwenden die Geräte die Kommunikationsports Nummer 1883, obwohl Sie möglicherweise auch auf Port 8883 stoßen, wenn Sie SSL / TLS für zusätzliche Sicherheit verwenden.

Damit die Verbindung möglich ist, werden nicht nur Clients, Server und Ports benötigt. Auch andere Pakete oder Nachrichten gesendet für die Kommunikation:

  • Verbindung herstellen: Vom Client gesendete CONNECT-Nachricht / Paket mit allen erforderlichen Informationen. Diese Informationen umfassen die Kunden-ID, den Benutzernamen, das Passwort usw. Der Broker oder Server antwortet mit einem CONNACK-Paket, das den Client darüber informiert, dass die Verbindung akzeptiert, abgelehnt usw. wurde.
  • Nachrichten senden und empfangen: Sobald die Verbindung hergestellt ist, werden PUBLISH-Pakete oder -Nachrichten mit dem Thema und der Nutzlast der an den Broker gesendeten Nachricht verwendet. Andererseits verwenden der interessierte Kunde oder die interessierten Kunden die Pakete SUBSCRIBE und UNSUSCRIBE, um ihr Abonnement zu abonnieren bzw. zurückzuziehen. Der Broker antwortet außerdem mit einem SUBACK- bzw. UNSUBACK-Paket, um den Erfolg des vom Client angeforderten Vorgangs zu melden.
  • Verbindung aufrechterhalten: Um sicherzustellen, dass die Verbindung offen bleibt, können Clients regelmäßig ein PINGREQ-Paket senden, das mit einem PINGRESP-Paket vom Server abgeglichen wird.
  • Verbindung beenden: Wenn ein Client die Verbindung trennt, sendet er ein DISCONNECT-Paket, um dieses Ereignis zu melden.

Diejenigen Nachrichten oder Pakete Diejenigen, über die ich gesprochen habe, haben die gleiche Struktur wie andere Pakete anderer Netzwerkprotokolle:

  • Header oder fester Header: ist ein fester Teil, der zwischen 2-5 Bytes belegt. Es enthält einen Steuercode, eine ID des gesendeten Nachrichtentyps und dessen Länge. Zwischen 1 und 4 Bytes werden zum Codieren der Länge verwendet, wobei die ersten 7 Bits jedes Oktetts als Daten für die Länge und ein zusätzliches Bit der Kontinuität verwendet werden, um zu bestimmen, dass mehr als ein Byte die Länge der Nachricht ausmacht.
  • Variabler Header: ist nicht immer obligatorisch, aber optional. Es ist nur in bestimmten Paketen in bestimmten Situationen oder in bestimmten Nachrichten enthalten.
  • Inhalt oder Daten: Die Paketdaten enthalten tatsächlich die zu sendende Nachricht. Sie kann zwischen einigen kB und 256 MB liegen.

Wenn Sie daran interessiert sind, es zu wissen der entsprechende Code hexadezimal Für die Arten der gesendeten Nachrichten sind:

Nachricht Code
FOLGE UNS 0x10
KONNACK 0x20
VERÖFFENTLICHEN 0x30
PUBACK 0x40
Scham 0x50
PUBREL 0x60
pubcomp 0x70
ABONNIEREN 0x80
SUBACK 0x90
ABONNIEREN 0xA0
UNÜBERTROFFEN 0xB0
PINGANF 0xC =
PINGRESP 0xD0
TRENNEN 0xE0

Qualität und Sicherheit der Kommunikation

Ein weiteres wichtiges Detail der Nachrichten von MQTT ist das Servicequalität oder QoSund Sicherheit. Davon hängt die Robustheit des Kommunikationssystems bei Ausfällen und seine Sicherheit ab.

In Bezug auf seine Qualität kann es bestimmt werden 3 verschiedene Ebenen:

  • QoS 0 (Unwissenheit)- Die Nachricht wird nur einmal gesendet und im Fehlerfall nicht zugestellt. Es wird verwendet, wenn es nicht kritisch ist.
  • QoS 1 (bestätigen): Die Nachricht wird so oft wie nötig gesendet, um die Zustellung an den Kunden zu gewährleisten. Der Nachteil ist, dass der Client dieselbe Nachricht mehrmals empfangen kann.
  • QoS 2 (versichert)- Ähnlich wie oben, jedoch garantiert nur einmal geliefert. Es wird häufig für kritischere Systeme verwendet, bei denen eine höhere Zuverlässigkeit erforderlich ist.

Auf der anderen Seite, wie für MQTT-SicherheitEs können verschiedene Maßnahmen ergriffen werden, um seine diesbezügliche Stärke sicherzustellen. Wie bereits erwähnt, kann die Authentifizierung von Benutzername und Passwort wie bei vielen anderen Protokollen mittels SSL / TLS sichergestellt werden. Obwohl viele IoT-Geräte mit geringen Kapazitäten oder Ressourcen Probleme mit der Überlastung der Arbeit haben könnten, wenn diese Art der sicheren Kommunikation verwendet wird ...

Aus diesem Grund verwenden viele IoT-Geräte, die MQTT verwenden, Kennwörter und Benutzer in ebener Text, was dazu führen könnte, dass jemand den Netzwerkverkehr schnüffelt, um ihn sehr leicht zu bekommen. Und wenn dies nicht ausreicht, kann der Broker auch so konfiguriert werden, dass anonyme Verbindungen akzeptiert werden, sodass jeder Benutzer eine Kommunikation herstellen kann, die ein höheres Risiko birgt.

Verwenden von MQTT mit Arduino

Arduino UNO mit MQTT

Natürlich kannst du Verwenden Sie das MQTT-Protokoll mit Arduino und andere Entwicklungsboards sowie der Rapsberry Pi usw. Dazu müssen Sie Ihr Arduino-Board mit Konnektivität ausstatten, falls dies nicht der Fall ist. Auch die Bibliothek Arduino Client für MQTT es wird Ihnen bei diesen Aufgaben helfen. Diese Bibliothek ist kompatibel mit:

  • ArduinoYUN
  • Arduino WiFi (Schild)
  • Arduino Ethernet (Abschirmung)
  • ESP8266-Modul
  • Intel Galileo / Edison
  • Himbeer Pi
  • ...
Sie wissen bereits, dass Sie die Bibliothek mit dem folgenden Befehl herunterladen und in Ihrer Arduino IDE installieren können: Git-Klon https://github.com/knolleary/pubsubclient.git

Sobald zum Code, um MQTT zu verwenden In einigen Anwendungen ist die Wahrheit, dass es einfach ist. Im Fritzing-Bild sehen Sie eine Plakette Arduino UNO Zu welcher Konnektivität von Arduino Ethernet wurde hinzugefügt und es wurde auch eine Verbindung hergestellt ein DHT22 Feuchtigkeits- und Temperatursensor, obwohl es alles andere hätte sein können ...

Ok, für den Code, den Sie generieren müssen Arduino IDE So einfach ist es, mit dem MQTT-Protokoll auf Arduino zu arbeiten:

  • zu Nachrichten senden 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);
}

  • zu Nachrichten erhalten von MQTT benötigen Sie nur die Platte Arduino UNO und Verbindung mit Arduino Ethernet oder einem anderen Element. Ein Beispiel für den Code wäre:
#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();
}

Denken Sie daran, dass Sie die IP-Adresse in die für den Server geeignete ändern müssen. Außerdem müssen Sie die MAC-Adresse Ihres Ethernet-Netzwerkadapters oder der von Ihnen verwendeten sowie den Rest des Codes ändern, wenn Sie ihn anpassen möchten ein anderes Projekt. Dies ist nur ein Beispiel!

Weitere Informationen erhalten Sie kostenlos herunterladen unsere PDF-Handbuch mit dem Arduino IDE Kurs, um mit dem Programmieren zu beginnen.


Schreiben Sie den ersten Kommentar

Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.