von Ponlakshmi
MQTT Protocol (Message Queuing Telemetry Transport) ist ein TCP-basiertes Messaging-Protokoll, das speziell für die Übertragung von Telemetriedaten von Kantengeräten zu einem zentralen Server. Es folgt einem Modell Publish/Subscribe, das MQTT ermöglicht Kunden, die Daten über einen zentralen MQTT-Broker effizient senden und empfangen. Seit seiner Erfindung im Jahr 1999 ist MQTT das am weitesten angenommene Protokoll für IoT-Implementierungen aufgrund seine Leichtigkeit und Zuverlässigkeit. Andererseits erweitert MQTT-SN (Sensor Network) das Protokoll für Rand oder periphere Einrichtungen, die Kommunikation zwischen Geräten und Gateways über Low-Power-Konnektivitätsmedien wie Bluetooth. Trotz seiner Potential, MQTT-SN hat nicht weit verbreitete Adoption wie das Kern-MQTT-Protokoll gewonnen. Während viele MQTT Durchführungen sind auf dem Markt leicht verfügbar, Ein tieferes Verständnis der zugrunde liegenden Konzepte ist entscheidend. Dieses Wissen ermöglicht es Ihnen zu nutzen Diese Implementierungen ermöglichen es Ihnen, leistungsstarke, fehlertolerante IoT-Anwendungen aufzubauen.
Die Interaktion zwischen MQTT-Geräten und dem MQTT-Server wird durch einen Satz von vordefinierte Nachrichten. Einfachheitsgemäß folgen sowohl ausgehende als auch eingehende Nachrichten dem gleichen Standard. Auf hohem Niveau, MQTT Protokoll Pakete können in zwei Arten für besseres Verständnis kategorisiert werden
Jenseits der MQTT-Protokoll-Pakete gibt es einige andere Spezifikationen, die darauf achten, wie zu handhaben Sitzungen, die letzte Nachricht und die Abschaltungen zu erhalten, die auch in diesem Artikel abgedeckt werden, da es sehr wichtig zu verstehen, dass für die MQTT-Implementierung.
Datenpakete helfen, die tatsächlichen Daten zwischenMQTT Brokerund der MQTT Client. Veröffentlichen und Abonnieren sind die wichtigsten Datenpakete, in denen der MQTT-Client seine Absichten sendet, einen thematisch und der Server veröffentlicht die Daten basierend auf der Anforderung. Wir möchten das Connect-Paket zusätzlich zu dieser Liste hinzufügen, da ein Datensatz als Teil davon gesendet wird.
MQT Packet Format Struktur für alle oben drei Nachrichten enthält Fixed Header, Variable Header und Payload.
Kontrollpakete sind entscheidend für den Erfolg der Datenübertragung im MQTT-Protokoll. Ein klares Verständnis Kontrollpakete undMQTT Servicequalität (QoS) Werteist für eine effektive Umsetzung unerlässlich. Während die meisten Kontrollpakete je nach MQTT-Client oder Server an der Kernumsetzungsschicht verwaltet werden verwendet, Aufgaben wie das Speichern von Lieferzuständen, das Handling von Anerkennungen und das Weiterleiten von Nachrichten müssen verwaltet werden auf Anwendungsebene.
MQT Pakete können in drei Teile unterteilt werden, nämlich Fixed Header, Variable Header und Nutzlast. Wenn Sie Sie beginnen Ihre Umsetzung über eineStandard MQTT Clients, dann werden diese Informationen möglicherweise nicht viel benötigt. Um jedoch zu verstehen, wie man Verwenden Sie die richtigen APIs, um den Client zu verwenden, können Sie diese Hand-on. Das feste Headerfeld umfasst die Steuerung Fahnen; der variable Header enthält die Paketlänge; die Nutzlast ist gleich der in der variabler Header. Die Mindestgröße eines Paketlängenfeldes beträgt 1 Byte, was für Nachrichten kleiner als 127 ist Bytes.
Die minimale Paketgröße beträgt 2 Bytes, die nur das Steuerfeld und ein einzelnes Paketlängenfeld aufweist, während die maximale Paketgröße beträgt 256 MB. Kleinere Pakete unter 127 Bytes haben ein 1-Byte-Paketlängenfeld. Die Pakete mit mehr als 127 und weniger als 16383 verwenden 2 Bytes und so weiter. 7-Bit, die mit dem 8. Bit verwendet werden, ist das Fortsetzungsbit.
Das 8-Bit-Steuerfeld ist das Hauptbyte des 2-Byte-Festkopfs. Es ist in zwei geteilt 4 Bit Felder und enthält alle Protokollbefehle und Antworten. Die ersten vier wichtigsten Bits sind der Befehl oder Nachrichtentypfeld, während der Rest Als Steuerfahnen werden 4 Bit verwendet.
Während es 16 mögliche Fahnen gibt, werden noch eine begrenzte Anzahl von Bits verwendet. Die Publish-Nachricht macht das Beste Verwendung Diese Flaggen.
Die Restlänge ist die Anzahl der im aktuellen Paket verbliebenen Bytes, einschließlich variabler Header und Nutzdaten. Die Restlänge schließt die verwendeten Bytes aus, um die Restlänge zu kodieren. Die verbleibende Länge ist codiert mit einem variablen Längencodierungsschema, das ein Byte für Werte nach oben verwendet bis 127. Die mindestens sieben wichtige Bits jeder Byte kodieren die Daten, und das wichtigste Bit wird verwendet, um anzuzeigen, dass es gibt folgende Bytes in der Darstellung. Somit kodiert jeder Byte 128 Werte und ein "Fortsetzungsbit". Die größte Zahl von Bytes in den übrigen Längenfeld ist vier.
Einige Arten von MQTT-Steuerpaketen haben eine variable Header-Komponente. Variable Längenkopffelder sind nicht immer in MQTT vorhanden Nachrichten. Einige MQTT-Nachrichtentypen oder Befehle benötigen dieses Feld, um zusätzliche Steuerinformationen zu tragen. Es bleibt zwischen der Fixed Header und die Payload. Der Variable Header wird je nach Pakettyp variieren.
Als Beispiel, werfen wir einen Blick auf die Details derMQTT Client CONNECTNachricht.
Nach dem Aufbau der TCP-Niveauverbindung mit einer MQTT-Plattform muss das erste Paket ein CONNECT Paket. Der KONNEKT Paket muss nur einmal über die Netzwerkverbindung gesendet werden. Das zweite CONNECT-Paket, das vom MQTT gesendet wird Client wird ignoriert und getrennt.
Der variable Header sitzt neben dem Fixed Header und hat vier große Teile als Teil des Headers. Sie sind die Protokollnamen Bytes, Protokollebene, verbinden Flaggen und halten-alive. Jeder dieser Teile hat einen vorgegebenen durchte Größe und die Reihenfolge, in der sie vorhanden sind.
Diese Bytes speichern den Protokollnamen. Der Protokollname wird alsMQTin 4 Bytes. Alle anderen Zeichen in einem dieser Felder führen zum Abschalten des Clients vom Server.
Dies definiert die Protokollversion. Die Protokollebene für MQTT Broker beträgt 4 für die MQTT 3.1/3.1.1 und 5 für dieMQTT 5 Version. Anderes senden Werte führen zum Abschalten. Der MQTT Broker kann den Client auch auf der von ihm unterstützten Version abschalten.
Dies ist ein einziges Byte-Feld und stellt das Vorhandensein oder Fehlen von Daten in der Nutzlast fürMQTT Authentifizierung (Username und Passwort vergessen?, Will message. Die anderen Felder wie Will halten und saubere Sitzung wird entweder wahr oder falsch und QoS-Feld gibt die QoS-Ebene an, die für WILL Message verfolgt werden soll.
MQT Lebewesen ist ein 2 Byte-Paket, und die maximale Zeit, die Sie für den Halt am Leben einstellen können, beträgt 65535 Sekunden (18 Stunden). Es ist jedoch besser, es etwa 30 Sekunden oder eine Minute auf Grundlage Ihrer Anforderungen zu halten. Der MQTT Client sollte Steuerpaket (PINGREQ) in einem Intervall senden, das den Wert des definierten Haltens nicht überschreitet Alive. Der Rest Der Alive-Wert hängt von der Dauer der Übertragung des Steuerpakets durch den Client ab.
Die Nutzlast enthält den MQTT Client Anmeldeinformationen (Benutzername und Passwort). Die Client-ID muss für jeden Client einzigartig sein. Der Broker reagiert mit einer einzigartigen Client-ID für jeden Client, wenn der Client keine Client-ID angibt. wenn Sie senden eine Client-ID in einem leeren Feld, der Kunde wird zurückgewiesen. Die Felder müssen in folgender Reihenfolge ausgefüllt werden: Client ID, Will Topic,Ich will nicht, Benutzername und Passwort.
Alle Felder im Paket Connect sollten im String-Format sein. nach Festlegung des TCP-Pegels Verbindung, der Client sollte den MQTT Connect senden innerhalb einer angemessenen Zeit. Wenn das Verbindungspaket nicht empfangen wird, wird der MQTT Broker den Client abschalten. Nach erfolgreiche Validierung, der Broker wird entweder mit einem CONNACK-Paket mit null Nutzlast oder mit der Abschaltung reagieren, wenn einige Fehler in Verbindung. Nach erfolgreicher Verbindung, der Broker wird den neuen Client in die angeschlossene Liste hinzufügen, und die Sitzung wird für die Datenpakete sowie das Leben erhalten.
Wenn Sie von Grund auf bauen, folgen Sie derMQTT Client Developer Guideund die Spezifikationen, um es besser zu verstehen und umzusetzen.
Für eine sehr erfolgreiche MQTT-Anwendung, Lesen Sie zusätzlichen Artikel über das MQTT-Protokoll.