Entwicklung von MQTT Client Tutorial

Einleitung

In der sich schnell entwickelnden Landschaft des Internets der Dinge (IoT) entwickelt effiziente und zuverlässige MQTT Kunden ist unerlässlich, um eine nahtlose Kommunikation zwischen IoT-Geräten zu ermöglichen. MQTT-Clients dienen als Schnittstelle für Anschluss an einen MQTT-Broker, der die Übertragung und den Empfang von Nachrichten ermöglicht. Diese Anleitung erklärt, wie MQTT-Clients nach dem OASIS-Standard für das MQTT-Protokoll entwickelt werden können.

Grundlagen des MQTT

Bevor wir in den Prozess der Entwicklung von MQTT-Clients springen, sollten wir uns über dieGrundlagen von MQTT.

MQTT (Message Queuing Telemetry Transport) ist ein leichtes Protokoll, das auf dem Publisher-Abonnent arbeitet Modell. Es verwaltet die Verbindung zwischen dem Broker und Client und ermöglicht eine reibungslose Kommunikation. Seit dem Protokoll Folgender Wortlaut: das Veröffentlichungs-Abonnenten-Modell, es ermöglicht Geräten senden und empfangen Nachrichten. Diese Funktion macht MQTT eine ideale Wahl für M2M (Maschine-zu-Maschine) Kommunikation und das Internet der Dinge (IoT), wo ein kleiner Code-Fußabdruck unerlässlich ist und die Netzbandbreite zu erhalten ist entscheidend.

Um mehr über MQTT und die wichtigsten Funktionen von MQTT zu erfahren, lesen Sie die folgenden Artikel:

Vorgebautes MQTT Kunden

In jedem IoT-System benötigen Geräte eine Möglichkeit, miteinander und mit Servern zu kommunizieren, und das ist, wo MQTT-Kunden kommen rein. Ein MQTT-Client ist einfach eine Software, die ein Gerät zur Verbindung mit einemMQTT Broker. Der Broker wirkt wie ein Verkehrscontroller, der Daten (Nachrichten) von einem Gerät zum anderen leitet. Wie ein Verkehrssteuerung sorgt für einen reibungslosen Verkehrsfluss, der Broker sorgt dafür, dass Nachrichten an die rechte Abonnenten ohne Stau. Ohne einen MQTT-Client könnten Geräte nicht veröffentlichen Daten oder abonnieren von Updates, die Echtzeitkommunikation unmöglich machen.

Um diesen Prozess zu vereinfachen, bieten wir umfassende Dokumentationen für die Verbindung verschiedener MQTT-Clients mit einem Cloud-hosted MQTT Broker. In diesen Dokumenten diskutieren wir, wie verschiedene MQTT-Clients mit unserenCloud-gehostete MQTT-Broker. Jeder Leitfaden bietet detaillierte Anweisungen und Einblicke, die auf eine Vielzahl von Projektanforderungen, ob für Embedded-Systeme, mobile Geräte oder Cloud-Plattformen. Mit Schritt für Schritt Anleitung, Sie werden in der Lage sein, sich auf den Aufbau Ihrer Anwendung bei gleichzeitiger nahtloser Kommunikation mit unserem Broker.

Hier ist eine Liste unserer Dokumentationen, um Ihnen bei der Verbindung verschiedener MQTT-Clients mit jedem MQTT-Broker zu helfen:

  • Python- Um MQTT-Anwendungen schnell und effizient mit Python zu entwickeln
  • Java- Für den Aufbau von MQTT-Anwendungen auf Java-Plattformen auf Unternehmensebene
  • Paho C- Zur Verbindung von Low-Power- oder Embedded-Geräten mit C
  • ESP32- Zur Integration von MQTT mit mikrocontrollerbasierten IoT-Geräten
  • Dossier- Für die Erstellung skalierbarer und sicherer MQTT-Anwendungen innerhalb der . NET Framework
  • Javascript- zur Implementierung von MQTT-Kommunikation in Webanwendungen
  • Node JS- Für die Entwicklung von Echtzeit-MQTT-Anwendungen mit Node JS
  • Android- Zum Aufbau von MQTT-basierten Anwendungen auf Android-Geräten
  • iOS- Zur Entwicklung von MQTT-fähigen Apps im Apple-Ökosystem

Durch die Nutzung dieser Anleitungen können Sie Ihren Entwicklungsprozess optimieren und die Integrationszeit minimieren. So können Sie sich auf den Bau konzentrieren innovative Features und die Funktionalität Ihrer Anwendungen zu verbessern.

Wie sollte ein MQTT-Client sein?

Die grundsätzliche Verwendung von MQTT-Client ist die Erleichterung einer Verbindung mit dem MQTT-Broker zu Themen abonnieren für Veröffentlichung sowie Empfang von Nachrichten. Hier sind einige der spezifische Merkmale, die alle MQTT-Kunden besitzen sollten :

  • Der MQTT-Client sollte Benutzern die Einstellungen leicht anpassen, die Client-Authentifizierung unterstützen und die Einrichtung von Zertifikaten und verschiedenen Optionen für die Verbindung, das Publizieren und die Anmeldung.
  • Es sollte eine glatte Benutzeroberfläche bieten, die die Interaktion mit allen verfügbaren Funktionen verbessert.
  • Sollte mit mehreren Betriebssystemen kompatibel sein.
  • Der Kunde sollte Benutzer Nachrichten schnell und einfach an andere Geräte oder Dienste senden lassen.
  • Der Client sollte verschiedene Optionen für die Nachrichtenübermittlung bieten, so dass Benutzer wählen, wie zuverlässig sie wollen, dass die Nachricht gesendet wird.

Erfahren Sie mehr, indem Sie den untenstehenden Inhalt erkunden.

Wir haben es in drei Hauptabschnitte organisiert : MQTT Data Representation,MQT Kontrollpaket Formatund MQTT Control Packets.

ANHANG MQT Datenrepräsentation

MQTT ist ein binäres Protokoll. Die Steuerelemente sind keine Textstrings, während binäre Bytes. Alle MQTT-Befehle haben eine entsprechende Bestätigung.

1.1 Bits

Es erklärt Bits. Diese Bits in einem Byte sind 7 bis 0 markiert. Bit-Nummer 0 ist mindestens signifikantes Bit und Bit Nummer 7 ist das bedeutendste Bit.

1.2 Zwei Byte Integer

MQTT definiert die beiden Byte Integer-Datenwerte. d.h. Der hochrangige Byte (MSB-Most) Signifikantes Bit) folgt der untergeordnete Byte (LSB-Least Significant Bit).

Dem höherwertigen Byte (MSB-Most Significant Bit) folgt der nächste höhere Ordnung byte (MSB-Most Significant Bit), gefolgt von dem nächsten höherwertigen Byte (MSB-Most Significant Byte), gefolgt von durch das untergeordnete Byte (LSB-Least Significant Bit).

1.3 Vier Byteger

MQTT beschreibt die 32-Bit unbezeichneten Ganzzahlen in Big-Endian-Ordnung sind die beiden Byte Integer Datenwerte. d.h. Dem höherwertigen Byte (MSB-Most Significant Bit) folgt die nächst höhere Ordnung Byte (MSB-Most Significant Bit), gefolgt von dem nächsten höherwertigen Byte (MSB-Most Significant Byte), gefolgt von von das untergeordnete Byte (LSB-Least Significant Bit).

1.4 UTF-8 Kodierte Stringstruktur

UTF-8 ist die Verschlüsselungsmethode für Unicode. Es kann jeden Unicode übersetzen Charakter zu einem Ein einzigartiger binärer String, der angepasst werden kann und den binären String zurück zu Unicode-Zeichen übersetzen kann. Die UTF-8 codierte String Maximalgröße ist 65,535 Bytes und es reicht von 0 bis 65,535 Bytes. Der Text Felder in den später beschriebenen MQTT-Steuerpaketen werden als UTF-8-Strings verschlüsselt. In bestimmten, das Zeichen Daten die Verschlüsselung von Codepunkten zwischen U+D800 und U+DFFF und dem Nullzeichen nicht enthalten Verschlüsselung Codepunkte sind U+0000. Wenn der Client oder Server ein MQTT-Steuerpaket erhält, das fehlerhaft enthält erzeugt UTF-8, dann wird es als falsches Paket betrachtet. Dieser MQTT-Client-Entwicklungsleitfaden gibt klar Ansicht des UTF-8 kodiert String-Struktur.

  • U+0001..U+001 F Kontrollzeichen
  • U+007F..U+009 F Kontrollzeichen
  • Codepunkte, die in der Unicode-Spezifikation definiert sind, sind Nicht-Kennzeichen (z.B. U+0FFFF)
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 Streichlänge MSB
Byte 2 Stränge LSB
byte 3 ... UTF-8 kodierte Zeichendaten, falls Länge > 0.
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 String Länge MSB (0x00)
0) 0) 0) 0) 0) 0) 0) 0) 0)
Byte 2 String Länge LSB (0x05)
0) 0) 0) 0) 0) 0) 1 0) 1
Byte 3 „A“ (0x41)
0) 1 0) 0) 0) 0) 0) 0) 1
Byte 4 (0xF0)
0) 1 1 1 1 0) 0) 0) 0)
Byte 5 (0xAA)
1 0) 0) 1 1 0) 0) 1 1
Byte 7 (0x94)
1 0) 0) 1 0) 1 0) 0) 0)
1,5 Variable Byte Integer Größe

Es verwendet einen einzigen Byte-Wert bis 127. Mit Encoding Scheme die Variable Byte ganze codiert wird in diesem MQTT-Client-Entwicklungsleitfaden deutlich erklärt. In LSB werden die 7 Bits jedes Bytes kodiert die Daten und die MSB wird verwendet, um anzugeben, ob die Bytes in der Darstellung wie folgt sind. Somit kodiert jeder Byte 128 Werte und es ist ein "Fortsetzungsbit". Im Feld Variable Byte Integer beträgt die maximale Anzahl von Bytes vier. Verwendung die Mindestzahl der Bytes, die für den Codewert erforderlich sind.

Ziffern Von Zu
1 0 (0x00) 127 (0x7F)
2. 128 (0x80, 0x01) 16,383 (0xFF, 0x7F)
3 16,384 (0x80, 0x80, 0x01) 2,097,151 (0xFF, 0xFF, 0x7F)
ANHANG 2,097,152 (0x80, 0x80, 0x80, 0x01) 268,435,455 (0xFF, 0xFF, 0xFF, 0x7F)

1.6 Binärdaten

Binäre Daten werden durch die volle Länge von zwei Bytes bezeichnet, die auf die Anzahl Bytes von Daten, gefolgt von dieser Anzahl von Bytes. Die Länge der binären Daten liegt also zwischen 0 und 65,535 Bytes.

2. MQTT Kontrollpaket Format

2.1 Paketstruktur

Das MQTT-Protokoll funktioniert durch einen definierten Austausch aufeinanderfolgender MQTT-Steuerpakete. Dieser Abschnitt beschreibt das Format dieser Pakete. Eine MQTT-Steuerpaketstruktur besteht aus drei Teilen, die werden in der folgenden Tabelle dargestellt.

MQTT-Steuerpaketstruktur

Fixed Header, vorhanden in allen MQTT Control Packets Variable Header, in einigen MQTT Control Packets vorhanden Payload, in einigen MQTT Control Packets vorhanden
packet Structure

2.1.1 Feste Kopfzeile

Die folgende Tabelle besteht aus dem feststehenden Header, der in jedem MQT Kontrollpaket.

Fixed Header Format

Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 Typ MQTT Control Pack Flaggen spezifisch für jeden MQTT Control Packet Typ
byte 2... Restlänge

2.1.2 MQTT Kontrollpakettyp

Die Bits [7-4] des Bytes 1 im Festkopf enthalten das Steuerpaket Typen. In MQTT Steuerpakettypen sind als 4-Bit-Unsigned-Wert dargestellt, diese Werte sind im folgenden dargestellt Tisch.

MQTT-Steuerpakettypen

Name Wert Durchflussrichtung Warenbezeichnung
Vorbehaltlich 0) Verboten Vorbehaltlich
INHALT 1 Client zu Server Anschlussanfrage
INHALT 2. Server zum Client Bestätigung verbinden
VERÖFFENTLICHUNGEN 3 Client zu Server oder Server zum Client Mitteilung veröffentlichen
VERÖFFENTLICHUNGEN 3 Client zu Server oder Server zum Client Mitteilung veröffentlichen
VERFAHREN ANHANG Client zu Server oder Server zum Client Bestätigung veröffentlichen (QoS 1)
VERFAHREN 5. Client zu Server oder Server zum Client Veröffentlicht (QoS 2 Lieferteil 1)
HERSTELLUNG 5. Client zu Server oder Server zum Client Veröffentlichung veröffentlichen (QoS 2 Lieferteil 2)
VERPFLICHTUNGEN 7 Client zu Server oder Server zum Client Vollständig veröffentlichen (QoS 2 Lieferteil 3)
SUBSCRIBE 8) Client zu Server Anfrage anmelden
SUBACK ANHANG Client zu Server Bestätigung eintragen
UNSUBSCRIBE 10. Client zu Server Anfrage eintragen
UNSUBACK 11) Server zum Client Bestätigung abmelden
KÖNIGREICH 12 Client zu Server Antrag auf Zulassung
PERSTELLUNG 13) Server zum Client Antwort
DISCONNECT 14 Client zu Server oder Server zum Client Mitteilung über die Verbindung
AUTH 14 Client zu Server oder Server zum Client Authenticationsaustausch

2.1.3 Flaggen

Die Bits [3-0] des Byte 1 sind der feste Header, der bestimmte Fahnen für alle MQTT-Steuerpaket wie unten gezeigt. Wenn ein Flag-Bit als "Reserved" markiert ist, sollte es reserviert werden Zukunft den angegebenen Wert verwenden und festlegen. Wenn ungültige Fahnen empfangen werden, wird es als falsches Paket betrachtet.

MQT Kontrollpaket Feste Header-Flags Bit 3 Bit 2 Bit 1 Bit 0
INHALT Vorbehaltlich 0) 0) 0) 0)
INHALT Vorbehaltlich 0) 0) 0) 0)
VERÖFFENTLICHUNGEN Gebraucht in MQTT v5.0 DUP Qo ETAIN
VERFAHREN Vorbehaltlich 0) 0) 0) 0)
VERFAHREN Vorbehaltlich 0) 0) 0) 0)
HERSTELLUNG Vorbehaltlich 0) 0) 1 0)
VERPFLICHTUNGEN Vorbehaltlich 0) 0) 0) 0)
SUBSCRIBE Vorbehaltlich 0) 0) 1 0)
SUBACK Vorbehaltlich 0) 0) 0) 0)
UNSUBSCRIBE Vorbehaltlich 0) 0) 1 0)
UNSUBACK Vorbehaltlich 0) 0) 0) 0)
KÖNIGREICH Vorbehaltlich 0) 0) 0) 0)
PERSTELLUNG Vorbehaltlich 0) 0) 0) 0)
DISCONNECT Vorbehaltlich 0) 0) 0) 0)
AUTH Vorbehaltlich 0) 0) 0) 0)

2.1.4 Restlänge

Die Position beginnt bei Byte 2. Die verbleibende Länge ist ein variabler Byte ganz klar die Anzahl der im aktuellen Steuerpaket verbliebenen Bytes, einschließlich Daten im variablen Header und Payload. Zur Kodierung der Restlänge werden keine Bytes verwendet. Gesamtzahl von Bytes in einem MQTT-Steuerpaket ist die Paketgröße, die gleich der Länge des festen Headers ist und die Restlänge.

2.2 Variabler Header

Einige MQTT-Steuerpakete haben eine variable Header-Komponente. Dies ist zwischen Das Fest Header und Payload. Der Inhalt des variablen Headers wird je nach Art des Pakets variieren. Die Ein Paketkennungsfeld des variablen Headers ist für viele Pakettypen üblich.

2.2.1 Paketkennung

Zwei-Byte-Integer-Paket-Identifier-Felder sind im variablen Header enthalten Komponente viele MQTT-Steuerpakete. Diese MQTT-Steuerpakete sind PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK. MQTT-Steuerpakete, die eine in die unter der Tabelle.

MQT Kontrollpaket Feld Pack Identifier
INHALT NO
INHALT NO
VERÖFFENTLICHUNGEN JA (wenn QoS > 0)
VERFAHREN JA
VERFAHREN JA
HERSTELLUNG JA
VERPFLICHTUNGEN JA
SUBSCRIBE JA
SUBACK JA
UNSUBSCRIBE JA
UNSUBACK JA
KÖNIGREICH NO
PERSTELLUNG NO
DISCONNECT NO
AUTH NO

Ein Veröffentlichungspaket sollte keine Paketkennung aufweisen, wenn sein QOS-Wert eingestellt wird bis 0. Jede Zeit ein Client sendet ein neues SUBSCRIBE, UNSUBSCRIBE oder PUBLISH MQTT Kontrollpaket (QoS>0), es muss zuweisen die aktuell ungenutzte Nullpaketkennung. Jedes Mal, wenn ein Server ein neues PUBLISH MQTT-Steuerpaket mit (QoS>0) muss ihm eine aktuell ungenutzte Nullpaketkennung zuordnen.

Die Paketkennung steht zur Wiederverwendung zur Verfügung, nachdem der Absender die entsprechendes, wie folgt definiertes Genehmigungspaket. Im Falle von QoS1 PUBLISH ist es das entsprechende PUBACK; für QoS2 Releases, es ist entweder PUBCOMP oder PUBREC mit einem Grundcode von 128 oder höher. Das ist die SUBACK oder UNSUBACK verwandt mit SUBSCRIBE und UNSUBSCRIBE. Ein PUBACK, PUBREL oder PUBCOMP-Paket muss das gleiche haben Paket Kennung als originales ÖFFENTLICHEs Paket. Ein SUBACK und UNSUBACK müssen eine Paketkennung haben, die in die entsprechende SUBSCRIBE und UNSUBSCRIBE.


Kunde Server
VERÖFFENTLICHUNGEN Pack Identifier =x1234 —>
<— VERÖFFENTLICHUNGEN Verpackungs-Identifier =x1234
VERFAHREN Pack Identifier =x1234 —>
<—PUBACK Verpackungs-Identifier =x1234

Die mit dem ÖFFENTLICHEN, SUBSCRIBE und UNSUBSCRIBE verwendeten Paketkennzeichen Pakete separate und integrierte Kennungen für den Client und Server deutlich in einer Sitzung generieren. Jedenfalls Zeit, eine Paketkennung kann nicht von mehr als einem Befehl verwendet werden. Der Client und der Server vergeben Paket Kennungen unabhängig voneinander. Dadurch können Client-Server-Paare an gleichzeitig Messaging mit den gleichen Paketkennungen.

2.2.2 Eigenschaften

Das Eigenschaftsset ist das letzte Feld im variablen Header der MQTT-Steuerung Pakete wie CONNECT, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, DISCONNECT und AUTH. Im CONNECT-Paket gibt es ein Feld Will-Eigenschaften mit der Nutzlast, das als optionaler Satz von Eigenschaften betrachtet. Der Satz der Eigenschaften besteht aus einer Eigenschaftslänge, gefolgt von durch Eigenschaften.

2.2.2.1 Eigenschaften

Die Eigenschaftslängenvariable wird als Byte-Integer kodiert. Die Immobilie Länge nicht enthalten die zur Verschlüsselung verwendeten Bytes, aber auch die Länge des Attributs. Wenn es keine gibt Eigenschaften sollte durch Hinzufügen der Eigenschaftslänge von Null bezeichnet werden.

2.2.2.2 Eigentum

Das Eigentum hat eine Kennung, die seine Nutzung und den Datentyp definiert, gefolgt von einer Wert. Die Die Kennung wird als variabler Byte kodiert. Ein falsches Paket ist, wenn ein Steuerpaket ungültig ist Kennnummer für seinen Pakettyp oder hat nicht den Wert eines bestimmten Datentyps. Falls erhalten, verwenden Sie einen CONNACK oder DISCONNECT Paket mit dem Grundcode (0X81) beschrieben als ungültiges Paket. Es gibt keine Bedeutung die Reihenfolge der Eigenschaften mit unterschiedlichen Kennungen.

Eigenschaften :

Kennung Name (Verwendung) Typ Paket / Will Properties
Deko Hexen
1 0) Payload Format Indikator Byte VERÖFFENTLICH, Will Properties
2. 0x02 Nachricht abbrechen Intervall Vier Byte Integer VERÖFFENTLICH, Will Properties
3 0x03 Inhaltsart UTF-8 Encode String VERÖFFENTLICH, Will Properties
8) 0x08 Antwort Thema UTF-8 Encode String VERÖFFENTLICH, Will Properties
ANHANG 0x09 Korrelationsdaten UTF-8 Encode String VERÖFFENTLICH, Will Properties
6 0x03 Inhaltsart Binärdaten VERÖFFENTLICH, Will Properties
11) 0x0B Subscribe Identifier Variable Byte Integer VERÖFFENTLICH, SUBSCRIBE
17 0x11 Sitzung abgelaufene Intervall Vier Byte Integer KONNEKT, KONNACK, DISCONNECT
183 0x12 Zugeteilter Client-Identifier UTF-8 Encode String INHALT
19 0x13 Inhaltsart Zwei Byte Integer INHALT
ANHANG 0x15 Authentifizierungsmethode UTF-8 Encode String KONNEKT, KONNACK, AUTH
ANHANG 0x16 Authentifizierungsdaten Binärdaten KONNEKT, KONNACK, AUTH
23. 0x17 Probleminformationen anfordern BYTE INHALT
KAPITEL 0x18 Will Delay Interval Vier Byte Integer Will Properties
ANHANG 0x19 Antwortinformationen anfordern BYTE INHALT
26 0x1A Antwort UTF-8 Encode String INHALT
27 0x1C Server Referenz UTF-8 Encode String CONNACK, DISCONNECT
31. 0x1F Begründung UTF-8 Encode String CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBACK, UNSUBACK, DISCONNECT, AUTHs
ANHANG 0x21 Maximal Zwei Byte Integer KONNEKT, KONNACK
ANHANG 0x22 Thema Alias Maximum Zwei Byte Integer KONNEKT, KONNACK
35. 0x23 Thema Alias Zwei Byte Integer VERÖFFENTLICHUNGEN
38. 0x26 Benutzerverhalten UTF-8 String Pair CONNECT, CONNACK, PUBLISH, Will Properties, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, DISCONNECT, AUTH
39. 0x27 Maximale Packungsgröße Vier Byte Integer KONNEKT, KONNACK
40 0x28 Wildcard Abonnement Verfügbar BYTE INHALT
ANHANG 0x29 Subscribe Identifier Verfügbar BYTE INHALT
ANHANG x2A Geteiltes Abonnement Verfügbar BYTE INHALT

2.3 Payload

Die Nutzlast ist der letzte Teil des Pakets in einigen der MQTT-Steuerung Pakete. In der ÖFFENTLICHE Paket, die Nutzlast ist die Anwendungsnachricht. MQTT-Steuerpakete, die eine Nutzlast benötigen.

MQT Kontrollpaket Nutzlast
INHALT Erforderlich
INHALT Keine
VERÖFFENTLICHUNGEN Optionen
VERFAHREN Keine
VERFAHREN Keine
HERSTELLUNG Keine
VERPFLICHTUNGEN Keine
SUBSCRIBE Folge
SUBACK Folge
UNSUBSCRIBE Folge
UNSUBACK Folge
KÖNIGREICH Keine
PERSTELLUNG Keine
DISCONNECT Keine
AUTH Keine

2.4 Grund-Codes

Ein Grund Code ist ein einmaliger unsignierter Wert. Grundcode gibt das Ergebnis an von Betrieb. Grundcodes unter 0x80 geben den erfolgreichen Abschluss einer Operation an. Die normale Begründung Code für Erfolg ist 0. Grundcodes größer als 0x80 gibt Fehler an. Einige der MQTT Control Pakete haben einen einzigen Grundcode als Teil der Variable Header wie CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, DISCONNECT und AUTH. Die beiden MQTT-Steuerpakete enthalten eine Liste eines oder mehrerer Grundcodes in den Nutzlast, die SUBACK und UNSUBACK sind.

Deko HEX Name Verpackungen
0) 0 Erfolg CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, UNSUBACK, AUTH
3. MQTT Control Packs

Es gibt 15 MQTT Control Pakete inMQTTv5

ANHANG CONNECT – Verbindungseinrichtung zwischen einem MQTT-Client und Broker

2. CONNACK – Die Verbindungsanforderungsbestätigung

3. VERÖFFENTLICH – Mitteilung veröffentlichen

4. PUBACK – Anerkennung veröffentlichen

5. PUBREC – Veröffentlichung empfangen(QoS 2 Veröffentlichung empfangen)

6. PUBREL – Veröffentlichung veröffentlichen(QoS 2 Veröffentlichung erhalten)

7. PUBCOMP – Veröffentlichen komplett

8. SUBSCRIBE – Themen eintragen

ANHANG SUBACK – Bestätigung eintragen

10. UNSUBSCRIBE – Ein Thema abmelden

11. UNSUBACK – Bestätigung abmelden

12. PINGREQ – PING Anfrage

13. PINGRESP – PING Response

14. DISCONNECT – Verbindung zwischen dem MQTT Client und Broker

15. AUTH – Authentication Austausch

3.1 VERNEHMER

Nachdem ein Client eine Netzwerkverbindung zu einem Server aufgebaut hat, Paket gesendet vom Client zum Server muss ein Verbindungspaket sein. Ein Client kann nur das CONNECT-Paket senden einmal über eine Netzwerkverbindung.

3.1.1 VERBRAUCH Feste Kopfzeile
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (1) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0)
byte 2... Restlänge

Restlänge – Dies ist die Länge des variablen Headers und die Länge des Nutzlast. Es wird als Variable Byte Integer kodiert.

3.1.2 KONNEKT Variabler Header

Der variable Header für das Verbindungspaket enthält folgende Felder: Protokoll Name, Protokoll-Ebene, Verbindungsfahnen, Halten Sie Alive und Eigenschaften.

3.1.2.1 Protokoll Name

Warenbezeichnung 7 6 5. ANHANG 3 2. 1 0)
Bezeichnung
Byte 1 Länge MSB (0) 0) 0) 0) 0) 0) 0) 0) 0)
Byte 2 Länge LSB (4) 0) 0) 0) 0) 0) 1 0) 0)
Byte 3 „M“ 0) 1 0) 0) 1 1 0) 1
Byte 4 „Q“ 0) 1 0) 1 0) 0) 0) 1
Byte 5 „T“ 0) 1 0) 1 0) 1 0) 0)
Byte 6 „T“ 0) 1 0) 1 0) 1 0) 0)

Ein Server, der mehrere Protokolle unterstützt, verwendet den Protokollnamen, um zu bestimmen ob die Daten sind MQTT. Der Protokollname muss der UTF-8 Encode String sein, der „MQTT“ repräsentiert.

3.1.2.2 Protokoll Version
Warenbezeichnung 7 6 5. ANHANG 3 2. 1 0)
Protokollebene
Byte 7Version(5)0) 0) 0) 0) 0) 1 0)

Ein Server, der mehrere Versionen derMQT Das ist alles.verwendet das Protokoll Version, um festzustellen, welche Version vom MQTT-Client verwendet wird.

3.1.2.3 Flaggen verbinden

Connect Flags gibt die Anwesenheit oder das Fehlen der Felder im Payload an.

Bit 7 6 5. ANHANG 3 2. 1 0)
Benutzername Flagge Passwort vergessen? Wird zurückgehalten Will QoS Will Flag Sauberer Start Vorbehaltlich
Byte 8 X X X X X X X 0)
3.1.2.4 Sauberer Start

Ein sauberer Start ist in Bit 1 des Connect Flags Byte. Wenn ein Verbindungspaket mit sauber start is set to 1, der Client und Server müssen alle vorhandenen Sitzungen ablehnen und eine neue Sitzung starten.

3.1.2.5 Will Flag

Will Flag ist in Bit 2 der Connect Flags. Wenn die Will-Flagge auf 1 gesetzt ist, es Angaben dassIch will nichtsollte auf dem Server und dem mit der Sitzung korrelierten Kern gespeichert werden. Der Wille Nachricht enthält die Will-Eigenschaften, Wird Thema, und wird laden Felder in der CONNECT Payload. Der Wille Nachricht wird in einigen Situationen veröffentlicht, die unten gezeigt wird,

  • Server erkannt I / O Fehler oder Netzwerkausfall.
  • Der Kunde konnte nicht kommunizieren, während er am Leben bleibt.
  • Der Client schließt die Netzwerkverbindung, ohne ein getrenntes Paket zuerst mit einem Grund zu senden. Code 0x00 (Standardabschaltung).
  • Der Server schließt die Netzwerkverbindung, ohne dass ein abgeschaltetes Paket mit Begründungscode empfangen wird 0 (Standardabschaltung).
3.1.2.6 Wird QoS

Will QoS ist in den Bits 4 und 3 der Connect Flags. Wenn die Willensnachricht ist veröffentlicht, dann werden die beiden Bits verwendet, die die QoS-Ebene angeben. Wenn die Will Flag auf 1 gesetzt wird, dann der Wert die Wird QoS vielleicht 0 (0x00), 1 (0x01), oder 2 (0x02).

3.1.2.7 Wird zurückgehalten

Will Retain ist in Bit 5 der Connect Flags. Wenn die Will Flag auf 1 gesetzt ist und Will Retain ist auf 1 gesetzt, der Server veröffentlicht die Will-Nachricht als einzurückbehaltene Nachricht.

3.1.2.8 Benutzername Flagge

Benutzername Flag ist in Bit 7 der Connect Flags. Ein Benutzername muss in der Nutzlast wenn die Benutzername-Flagge auf 1 gesetzt ist.

3.1.2.9 Passwort vergessen?

Password Flag ist in Bit 6 der Connect Flags. Das Passwort muss in der Nutzlast wenn die Passwort-Flagge auf 1 gesetzt ist.

3.1.2.10 Lebewohl
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 9 Alive MSB halten
Byte 10 Halten Sie Alive LSB

Der MQTT-Client muss die Kontrollpakete innerhalb der definierten Keep Alive senden. Wert. Die Behalten Der Alive-Wert hängt von der Kontrollpaketlaufzeit des Clients ab.

3.1.2.11 VERBRAUCH Eigenschaften:

Objektlänge –Die Länge der Eigenschaften in der MQTT CONNECT Kontrollpaket.

Session Expiry Interval –Der Indikator der Sitzung Expiry Interval ist 17(0X11) Byte. Wenn die Session Expiry Interval mehr als einmal verwendet wird, dann ist es als Protokollfehler betrachtet. Wenn es auf 0 gesetzt wird, endet die Sitzung, wenn die Netzwerkverbindung ist geschlossen oder auf 0XFFFFFF gesetzt, dann läuft die Sitzung nicht ab.

Maximal –Der Indikator des Empfangens Maximal 33(0X21) Byte. Es gilt nur, wenn die Netzwerkverbindung geöffnet ist. Wenn der Empfang Maximum 0 ist, dann ist es nimmt die Standardeinstellungen als 65,535.

Maximale Packungsgröße –Der Indikator des Maximums Verpackung Größe ist 39(0X27) Byte. In der Paketgröße gibt es keine Grenzen, wenn die maximale Paketgröße fehlt.

Thema Alias Maximum –Der Indikator des Themas Alias Maximal ist 34(0X22) Byte. Wenn das Thema Alias Maximum mehr als einmal verwendet wird, gilt es als eine Protokollfehler.

Antwort auf die AntwortDer Indikator Anfrage Antwortinformationen sind 25(0X29) Byte. Der Wert 0 gibt an, dass die Antwortinformation anfordern nicht präsent.

Probleminformationen anfordern –Der Indikator Anfrage Probleminformationen sind 23(0X17) Byte. Ist der Wert 1 so ist das Paket nicht im Paket vorhanden.

Das Leben der Menschen –Der Indikator der Benutzereigenschaft ist 38(0X26) Byte. Diese Eigenschaft ist erlaubt, mehr als einmal im gleichen Namen auch.

Authentifizierungsmethode –Der Indikator der Authentication Methode ist 21(0X15) Byte. Wenn es mehr als einmal verwendet wird, gilt es als ein Protokoll Fehler. Die erweiterte Authentifizierung erfolgt nicht, wenn der Authentifizierungsmethodewert 0 ist.

Authentifizierungsdaten –Der Indikator der Authentication Data ist 22(0X16) Byte. Wenn die Authentifizierungsdaten verwendet werden, während keine Authentisierung Verfahren ist dann als Protokollfehler zu betrachten. Es verwendet nicht mehr als einmal im Paket. Die CONNECT-Eigenschaften werden in diesem MQTT Client-Tutorial deutlich erklärt.

Variable Header Beispiel
Warenbezeichnung 7 6 5. ANHANG 3 2. 1 0)
Bezeichnung Byte 1 Länge MSB (0) 0) 0) 0) 0) 0) 0)
Byte 2 Länge LSB (4) 0) 0) 0) 0) 0) 1 0)
Byte 3 „M“ 0) 1 0) 0) 1 1 0)
Byte 4 „Q“ 0) 1 0) 1 0) 0) 0)
Byte 5 „T“ 0) 1 0) 1 0) 1 0)
Byte 6 „T“ 0) 1 0) 1 0) 1 0)
Warenbezeichnung 7 6 5. ANHANG 3 2. 1 0)
Byte 7 Version (5) 0)0) 0)0) 0)1 0)
byte8 Benutzername Flagge (1) Passwort vergessen (1) Wir werden uns aufhalten (0) Will QoS (01) Will Flag (1) Sauberer Start(1) 1 1 0) 0) 1 1 1
lebend
Byte 9 Halten Sie Alive MSB (0) 0) 0) 0) 0) 0) 0) 0)
Byte 10 Halten Sie Alive LSB (10) 0) 0) 0) 0) 1 0)1
Eigenschaften
Byte 11 Länge (5) 0) 0) 0) 0) 1 0) 1 0)
Byte 12 Session Expiry Interval Identifier (17) 0) 0) 0) 1 0) 0) 0)
Byte 13 Sitzungsablauf (10) 0) 0) 0) 0) 0) 0) 0)
Byte 14 0) 0) 0) 0) 0) 0) 0) 0)
Byte 15 0) 0) 0) 0) 0) 0) 0) 0)
Byte 16 0) 0) 0) 0) 1 0) 1 0)
3.1.3 KONNEKT Nutzlast

Die Nutzlast des CONNECT-Pakets enthält eine oder mehrere Längen – vorfixiert Die dessen Existenz durch die Fahnen im variablen Header bestimmt wird. Wenn diese Felder vorhanden sind, Client identifiziert Will Properties, Will Topic, Will Payload, Benutzername und Passwort sollten erscheinen

Client Identifier (Client ID) –Kundenkennung müssen UTF-8 Encoded String. Jeder Client, der mit dem Server verbunden ist, verfügt über eine einzigartige Client-ID. Diese MQTT Sitzung zwischen Client und Server sollte in MQTT-Clients verwendet werden, um die Position zu identifizieren, die sie halten.

Will Properties –Die Will Properties sind die Nächste Feld in der Nutzlast, wenn es auf 1 gesetzt ist. Die Felder Will-Eigenschaften definieren die Anwendungsnachricht Attribute, die mit einer Willensnachricht gesendet werden sollen, und die Eigenschaften, die definieren, wann die Willensnachricht sollte veröffentlicht werden. A Will Property hat die Eigenschaft Länge und Eigenschaften.

Objektlänge –Es definiert die Länge der Eigenschaften im Feld Will Properties.

Will Delay Interval –Der Indikator von Will Verzögerung Intervall ist 34(0X22) Byte. Wenn das Will Delay-Interval mehr als einmal verwendet wird, wird es als eine Protokollfehler. Ist das Will Delay-Intervall nicht vorhanden, so gibt es keine Verzögerung.

Payload Format Indicator –Der Indikator der payload format is 1(0X01) Byte. 0(0X00) Byte ist gleichwertig mit dem nicht senden des payload-Formats Indikator, der die Nachricht angibt, ist nicht spezifizierte Bytes. Wenn es mehr als einmal verwendet wird, dann ist es als Protokollfehler betrachtet.

Nachrichten abbrechen –Der Indikator Nachricht Expiry Interval ist 2(0X02) Byte. Wenn es mehr als einmal in dem Paket als Protokoll verwendet wird Fehler. Wenn es vorhanden ist, wird der Wert von vier Bytes in der Lebensdauer der Will-Nachricht sein, und die Ausgabe abläuft, wenn der Server die Will-Nachricht freigibt. Wenn es nicht vorhanden ist, wenn der Server die optionale Nachricht, dann wird das Nachrichten-Experiment-Intervall nicht gesendet.

Inhaltstyp –Der Indikator des Inhaltstyps ist 3(0X03) Byte. Der Inhaltstyp ist mehr als einmal in das als Protokoll betrachtete Paket enthalten Fehler. Die Sende- und Empfangsanwendung ist der Wert des Inhaltstyps.

Das ist ein Problem. –Der Indikator der Antwort Thema ist 8(0X08) Byte. Wenn das Antwortthema nicht abwesend ist, dann identifiziert es die Will-Nachricht als die Anfrage.

Korrelationsdaten –Der Indikator der Korrelation Daten sind die 9(0X09) Byte. Korrelationsdaten werden vom Absender der Anfragenachricht verwendet, um zu identifizieren die Bei der Übermittlung der Antwortnachricht wurde eine Anfrage eingegangen. Der Anfrage-Client benötigt keine Korrelationsdaten, wenn sie abwesend sind.

Das ist ein Problem. –Der Indikator der Benutzereigenschaft ist 38(0X26) Byte. Diese Eigenschaft ist erlaubt, mehr als einmal im gleichen Namen auch.

Will Topic –Das Will Topic ist das nächste Feld in die Nutzlast, wenn die Will-Flagge auf 1 gesetzt ist. Es muss ein UTF-8 Encode String sein

Wird geladenDer Will Payload ist der nächste Feld in die Nutzlast, wenn die Will-Flagge auf 1 gesetzt ist. Der Will Payload definiert die Anwendungsnachricht Payload an werden veröffentlicht für das Will Topic.

Benutzername –Der Benutzername ist das nächste Feld im Nutzlast, wenn das Benutzername-Flag auf 1 gesetzt ist. Dies kann zur Authentifizierung durch den Server verwendet werden.

Was ist los?Das Passwort ist das nächste Feld die Nutzlast, wenn das Passwort-Flag auf 1 gesetzt ist. Es kann verwendet werden, um alle Anmeldeinformationen zu tragen.

3.2 VERBRAUCH

INHALT Paket ist das Paket, das von dem Server als Antwort auf einen CONNECT gesendet wird Paket vom Kunden empfangen. Der Server muss einen CONNACK mit einem 0X00 (Success) Grund senden Code vor senden andere Pakete als AUTH. Der Server sollte nicht mehr als eine Verbindungsbestätigung senden. über Netzwerkverbindung.

Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQT Kontrollpaket Typ (2) Vorbehaltlich
0) 0) 1 0) 0) 0) 0) 0)
Byte 2 Restlänge
3.2.2 INHALT Variabler Header

CONNECT quit flags, CONNECT Grundcode und Eigenschaften sind das Feld in der Variabler Header des CONNACK Packet.

KONNEKT haben an –Stellen Sie dieses Feld in Byte ANHANG Die Bits 7 bis 1 werden gebucht und auf Null gesetzt.

Session Present –Die Position der Sitzung vorhanden ist Bit 0 der CONNECT-Quoten. Die aktuelle Session-Flag informiert den Client, ob die Server ist Verwendung des Serverstatus aus der vorherigen Verbindung der ClientID. Dies ermöglicht dem Client und dem Server haben eine konsistente Ansicht der Sitzungszustände. Wenn der Server 1 mit einem sauberen Start akzeptiert, wird der Server am meisten eingestellt die Grundcode 0X00(success) im CONNACK-Paket und zusätzlich den Sitzungszustand 0 oder 1 in der INHALT Paket.

INHALT Grundcode –In der Variable Header, Byte 2. den CONNECT Grundcode. Wenn ein Server ein CONNECT-Paket mit einem Grundcode von 128 oder höher sendet. es muss schließen Sie die Netzwerkverbindung. Der Server sendet das CONNACK-Paket mit einem der untenstehenden CONNECT Gründe Code.

Wert Hexen Bezeichnung des Ursprungs Warenbezeichnung
0) 0 Erfolg Die Verbindung wird akzeptiert.
ANHANG 0x80 Nicht spezifizierter Fehler Der Server möchte nicht den Grund für den Ausfall, oder keiner der anderen Gründe offenbaren Codes gelten.
ANHANG 0x81 Malformed Packet Daten innerhalb des CONNECT-Pakets konnten nicht korrekt parsiert werden.
ANHANG 0x82 Protokoll Fehler Daten im CONNECT-Paket entsprechen dieser Spezifikation nicht.
ANHANG 0x83 Spezifischer Fehler Der CONNECT ist gültig, wird aber von diesem Server nicht akzeptiert.
ANHANG 0x84 Nicht unterstützte Protokollversion Der Server unterstützt nicht die vom Client angeforderte Version des MQTT-Protokolls.
ANHANG 0x85 Client Identifier nicht gültig Der Client-Identifier ist ein gültiger String, ist aber vom Server nicht erlaubt.
ANHANG 0x86 Schlechter Benutzername oder Passwort Der Server akzeptiert nicht den vom Client angegebenen Benutzernamen oder Passwort
ANHANG 0x87 Nicht autorisiert Der Client ist nicht autorisiert zu verbinden.
ANHANG 0x88 Server nicht verfügbar Der MQTT Server ist nicht verfügbar.
137 0x89 Server beschäftigt Der Server ist beschäftigt. Versuchen Sie es später noch mal.
138. 0x8A Verboten Dieser Client wurde durch administrative Maßnahmen verboten. Kontaktieren Sie den Serveradministrator
ANHANG 0x8C Schlechte Authentifizierungsmethode Die Authentifizierungsmethode wird nicht unterstützt oder passt nicht zur Authentifizierungsmethode derzeit in Verwendung.
144. 0x90 Name invalid The Will Topic Der Name ist nicht fehlerhaft, wird aber von diesem Server nicht akzeptiert.
149 0x95 Paket zu groß Das CONNECT-Paket überstieg die maximal zulässige Größe.
151 0x97 Kontingent überschritten Es wurde eine Frist für die Umsetzung oder Verwaltung überschritten.
153 0x99 Payload-Format invalid Der Will Payload entspricht nicht dem angegebenen Payload Format Indicator.
154 0x9A Nicht unterstützt Der Server unterstützt keine gespeicherten Nachrichten und Will Retain wurde auf 1 gesetzt.
155. 0x9B QoS nicht unterstützt Der Server unterstützt nicht das QoS-Set in Will QoS
156 0x9C Verwenden Sie einen anderen Server Der Client sollte vorübergehend einen anderen Server verwenden.
157 0x9D Server bewegt Der Client sollte permanent einen anderen Server verwenden.
159 0x9F Anschlussrate überschritten Die Verbindungsgeschwindigkeitsgrenze wurde überschritten.
3.2.3 INHALT Eigenschaften

Einige der CONNACK-Eigenschaften sind ähnlich wie die CONNECT-Eigenschaften, die werden Eigenschaft Länge, Sitzung abgelaufene Intervall, Empfang Maximum, Maximale Paketgröße, Thema Alias Maximum, Benutzer Eigenschaften, Authentifizierungsmethode und Authentifizierungsdaten. Für detaillierte Informationen siehe Abschnitt- 3.1.2.11

Maximale QoS –Der Indikator des maximalen QoS ist 36(0X24) Byte Hinzufügen des Fehlers. wenn der maximale QoS nicht verfügbar ist, verwendet der Client das maximale QoS von 2. Wenn ein Server QoS 1 oder QoS 2 nicht unterstützt, muss er das Maximum QoS im INHALT Das Paket zeigt die höchste QoS, die es unterstützen kann. Ein Server, der QoS 1 oder QoS 2 nicht unterstützt Pakete akzeptiert immer noch Abonnement-Pakete mit dem gewünschten QoS von 0, 1 oder 2.

Was ist los?Der Indikator der Rest Verfügbar ist 37(0X25) Byte. Wenn ein Server ein Verbindungspaket mit einer Willensnachricht mit eine wird flag 1, der Server muss die Verbindungsanforderung widerspiegeln, wenn er die gespeicherten Nachrichten nicht unterstützt. Es muss CONNACK mit Grundcode 0X9A (Retain not available) senden und die Netzwerkverbindung schließen.

Zuständiger Client-Identifier –Der Indikator der Zugeteilte Client-Identifier ist 18(0X12) Byte. Wenn der Client über einen Zero-length Client verbindet Kennnummer der Server muss mit einer Verbindung und einem bestimmten Client-Identifier reagieren. Der zugewiesene Client Kennnummer muss eine neue Client-Kennung sein, die derzeit nicht in einer anderen Sitzung auf dem Server verwendet wird.

Grundstring –Der Indikator der Begründung String ist 31 (0X1F) Byte. Es ist ein UTF-8 codierter String. Es ist eine menschliche lesbare Saite für nachweisbar und nicht vom Kunden diskriminiert werden. Der Server verwendet diesen Wert, um zusätzliche Informationen an den Client. der Server sollte diesen Asset nicht senden, wenn der Client die Größe der CONNACK Paket über die angegebene maximale Paketgröße hinaus.

Wildcard verfügbar –Der Indikator die Wildcard Abonnement ist 40(0X28) Byte. wenn der Wert 0 ist, dann sind die Wildcard-Abonnements nicht unterstützt. Ist der Wert 1 so wird er unterstützt. Das Wildcard-Abonnement ist mehr als einmalig enthalten in das Paket und der Wert außer 0 oder 1 als Protokollfehler angesehen wird.

Veröffentlichungen –Die Indikator der Subscription-Identifier ist 41(0X19) Byte. Ist der Wert 0, so sind die Abonnement-Kennzeichen nicht unterstützt. Wenn der Wert 1 ist, wird er unterstützt die Abonnement-Identifikationen mehr als einmal und der Wert außer 0 oder 1 als Protokoll betrachtet wird.

Geteiltes verfügbares Abonnement –Der Indikator die Geteiltes Abonnement Verfügbar ist 42(0X2A) Byte. Ist der Wert 0, so sind die Abonnement-Kennzeichen nicht unterstützt. Wenn der Wert 1 ist, wird er unterstützt die Abonnement-Identifikationen mehr als einmal und der Wert außer 0 oder 1 als Protokoll betrachtet wird.

Server Keep-Alive –Der Indikator der Server Keep-Alive ist 19(0X13) Byte. Wenn der Server im CONNACK-Paket ein Keep-Alive sendet, sollte dieser Wert werden verwendet anstelle des Client Keep-Alive Wert auf CONNECT Packet gesendet. Wenn der Server nicht sendet keep-alive verwendet der Server den vom Client auf dem CONNECT-Paket eingestellten Keep-alive-Wert. Wenn der Server Keep-Alive ist mehr als einmal im Paket enthalten, dann wird es als Protokollfehler betrachtet.

AntwortDer Indikator der Antwort Informationen sind 26(0X1A) Byte. Es ist ein UTF-8 codierter String. Es wird hauptsächlich für die Erstellung einer Antwort verwendet Thema. Wenn es mehr als einmal enthalten ist, ist es als Protokollfehler zu betrachten.

Server-Referenz –Die Anzeige des Servers Referenz ist 28(0X1C) Byte. Es ist ein UTF-8 codierter String. Wenn es mehr als einmal im Paket enthalten ist dann ist es als Protokollfehler zu betrachten. Der Server verwendet die Serverreferenz in einer Verbindung oder Trennen im Paket mit Grundcode 0X9C (Verwenden eines anderen Servers) oder Grundcode 0X9D (Server) bewegt).

3.2.4 INHALT Nutzlast

Das Kontrollpaket CONNACK hat keine Nutzlast.

3.3 VERÖFFENTLICHUNGEN

Ein ÖFFENTLICHEs Paket wird vom Client an den Server gesendet oder umgekehrt zu tragen eine Bewerbungsnachricht.

Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (3) DUP-Flag QoS-Ebene ETAIN
0) 0) 1 1 X X X X
byte 2... Restlänge

DUP –Die Position der Flagge Duplicate ist Byte 1, Bit 3. Wenn die DUP-Flag auf 0 gesetzt ist, gibt an, dass dies das erste Mal ist, hat der Client oder Server versucht das ÖFFENTLICHE Paket zu senden. Wenn die DUP-Flagge auf 1 gesetzt ist, kann es eine Umverteilung sein die vorheriger Versuch, das Paket zu senden.

QoS –Die Position des QoS ist Byte 1, Bits 2-1. Dieses Feld gibt die Liefersicherheit einer Bewerbungsnachricht an.

QoS-Wert Bit 2 1 Warenbezeichnung
0) 0) 0) höchstens einmal Lieferung
1 0) 1 Mindestens einmal Lieferung
2. 1 0) Genau einmal Lieferung
1 1 Reserviert – darf nicht verwendet werden

RETAIN –Die Position der RETAIN Flag ist Byte 1, Bit 0. Wenn die RETAIN-Flag auf 1 gesetzt wird, sollte der Server in dem von einem Client an einen Server gesendeten Paket veröffentlichen. die bestehende Meldung für das Thema ersetzen und die Anwendungsnachricht speichern. Wenn die RETAIN-Flagge 0 ist die ÖFFENTLICHEs Paket, das von einem Client an den Server gesendet wird, speichert der Server die Nachricht nicht als gespeichert und entfernt oder ersetzt jede bestehende gespeicherte Nachricht.

Restlänge –Er definiert den variablen Header und Nutzlastlänge.

3.3.2 VERÖFFENTLICH Variabler Header

Topic Name, Packet Identifier und Eigenschaften sind die Felder in der Variablen Kopfzeile ÖFFENTLICHEs Paket.

Der Name des UnternehmensNutzdaten identifiziert das Thema Name den veröffentlichten Informationskanal. Der Topic Name im PUBLISH Paket variable Header sollte der erste Feld. Dies sollte der UTF-8 kodierte String sein. Der Themaname im ÖFFENTLICHEn Paket sollte nicht enthalten Wildcard-Zeichen. Der Themenname im ÖFFENTLICHE Paket, das vom Server an den Anmelde-Client gesendet wird müssen dem Themenfilter des Teilnehmers entsprechen

Pack-Identifier –In ÖFFENTLICHEn Paketen die Paket Identifier-Feld ist nur vorhanden, wenn die QoS-Ebene 1 oder 2.

ÖFFENTLICHE EigenschaftenDas ÖFFENTLICHE Paket Eigenschaften werden ähnlich wie die CONNECT und CONNACK. Die Eigenschaften sind Objektlänge, Payload Format Indicator, Nachricht Ablaufintervall, Thema Alias, Antwortthema, Korrelationsdaten, Benutzerobjekt, Abonnementkennung, und Inhalt - Typ. Für detaillierte Informationen siehe Abschnitte –3.1.2.11, 3.2.3.

3.3.3 ÖFFENTLICHE Nutzlast

Es gibt eine Bewerbungsnachricht, die auf dem Payload veröffentlicht wird. Der Inhalt und Format der Daten je nach Anwendung. Die Differenz zwischen der Länge der Größe Kopf und das verbleibende Längenfeld im Festkopf ist die Länge der Nutzlast. Es ist gültig, ein veröffentlichtes Paket mit einer Null-Länge-Payload.

3.3.4 ÖFFENTLICHE Maßnahmen
QoS Ebene Voraussichtliche Antwort
QoS 0 Keine
QoS 1 PUBACK Paket
QoS 2 PUBREC Paket
3.4 PUBACK – ÖFFENTLICHE Anerkennung

Die Antwort des PUBLISH Pakets mit QoS 1 ist das PUBACK-Paket.

3.4.1 PUBACK Feste Kopfzeile
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (1) Vorbehaltlich
0) 0) 0) 1 0) 0) 0)
byte 2... Restlänge
3.4.2 PUBACK Variabler Header

Packet Identifier aus dem PUBLISH Paket, PUBACK Grund Code, Eigentum Länge und die Eigenschaften sind die Felder im Variable Header des PUBACK-Pakets

Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 Pack-Identifier MSB
Byte 2 Pack-Identifier LSB
Byte 3 VERFAHREN Begründung
Byte 4 Objekt Länge
3.4.2.1 PUBACK Grundcode

Der PUBACK Grundcode im Byte 3. Es gibt keinen Grundcode und den Wert von (0X00) (Success) wird verwendet, wenn die verbleibende Länge 2 beträgt.

Wert Hexen Bezeichnung des Ursprungs Warenbezeichnung
0) 0 Erfolg Die Verbindung wird akzeptiert.
ANHANG 0x80 Nicht spezifizierter Fehler Der Server möchte nicht den Grund für den Ausfall, oder keiner der anderen Gründe offenbaren Codes gelten.
ANHANG 0x81 Malformed Packet Daten innerhalb des CONNECT-Pakets konnten nicht korrekt parsiert werden.
ANHANG 0x82 Protokoll Fehler Daten im CONNECT-Paket entsprechen dieser Spezifikation nicht.
ANHANG 0x83 Spezifischer Fehler Der CONNECT ist gültig, wird aber von diesem Server nicht akzeptiert.
ANHANG 0x84 Nicht unterstützte Protokollversion Der Server unterstützt nicht die vom Client angeforderte Version des MQTT-Protokolls.
ANHANG 0x85 Client Identifier nicht gültig Der Client-Identifier ist ein gültiger String, ist aber vom Server nicht erlaubt.
ANHANG 0x86 Schlechter Benutzername oder Passwort Der Server akzeptiert nicht den vom Client angegebenen Benutzernamen oder Passwort
ANHANG 0x87 Nicht autorisiert Der Client ist nicht autorisiert zu verbinden.
ANHANG 0x88 Server nicht verfügbar Der MQTT Server ist nicht verfügbar.
137 0x89 Server beschäftigt Der Server ist beschäftigt. Versuchen Sie es später noch mal.
138. 0x8A Verboten Dieser Client wurde durch administrative Maßnahmen verboten. Kontaktieren Sie den Serveradministrator
ANHANG 0x8C Schlechte Authentifizierungsmethode Die Authentifizierungsmethode wird nicht unterstützt oder passt nicht zur Authentifizierungsmethode derzeit in Verwendung.
144. 0x90 Name invalid The Will Topic Der Name ist nicht fehlerhaft, wird aber von diesem Server nicht akzeptiert.
149 0x95 Paket zu groß Das CONNECT-Paket überstieg die maximal zulässige Größe.
151 0x97 Kontingent überschritten Es wurde eine Frist für die Umsetzung oder Verwaltung überschritten.
153 0x99 Payload-Format invalid Der Will Payload entspricht nicht dem angegebenen Payload Format Indicator.
3.4.2.2 PUBACK Eigenschaften

Objektlänge –PUBACK Paketvariable Kopf Die Länge der Eigenschaften wird als variable Byte-Integer kodiert. wenn die Restlänge kleiner als 4 ist, Eigenschaft hat keine Länge und ein Wert 0 wird verwendet.

Das ist ein Problem. –Das Benutzerobjekt wird verwendet, um Bereitstellung weitere Informationen zum Client. Weitere Informationen finden Sie in Abschnitt – 3.1.3

Grundsaite –Es wird verwendet, um alle Informationen zum Client, warum die Netzwerkverbindung geschlossen ist. Für weitere Informationen über Grund String Refer zu Abschnitt – 3.2.3

3.4.3 PUBACK Nutzlast

Das PUBACK-Steuerpaket hat keine Nutzlast.

3.4.4 PUBACK Maßnahmen

Im Lieferprotokoll QoS 1 sollte der Absender das ÖFFENTLICHE Paket behandeln werden als "Un quit" betrachtet, bis das entsprechende PUBACK-Paket vom Empfänger empfangen wird. In die QoS 1 Lieferprotokoll, der Client akzeptiert das Recht der Anwendungsnachricht und reagiert mit einem VERFAHREN Paket, das die Paketkennung aus dem eingehenden PUBLISH-Paket enthält. Nachdem es ein PUBACK-Paket sendet die Empfänger sollte jedes eingehende PUBLISH-Paket mit der gleichen Paketkennung als Dienstprogramm betrachten Nachricht unabhängig von der Struktur seiner DUP-Flag.

3.5 PUBREC – VERÖFFENTLICH aufgenommen

Das PUBLISH-Paket mit QoS 2 ist die Antwort des PUBREC-Pakets. In QoS 2 Protokoll PUBREC ist das zweite Paket.

3.5.1 PUBREC Feste Kopfzeile
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (5) DUP-Flag QoS-Ebene ETAIN
0) 0) 1 1 X X X X
byte 2... Restlänge
3.5.2 PUBREC Variabler Header
QoS-Wert Bit 2 1 Warenbezeichnung
0) 0) 0) höchstens einmal Lieferung
1 0) 1 Mindestens einmal Lieferung
2. 1 0) Genau einmal Lieferung
1 1 Reserviert – darf nicht verwendet werden
3.5.2.1 PUBREC Begründung
Wert Hexen Bezeichnung des Ursprungs Warenbezeichnung
0) 0 Erfolg Die Verbindung wird akzeptiert.
ANHANG 0x80 Nicht spezifizierter Fehler Der Server möchte nicht den Grund für den Ausfall, oder keiner der anderen Gründe offenbaren Codes gelten.
ANHANG 0x81 Malformed Packet Daten innerhalb des CONNECT-Pakets konnten nicht korrekt parsiert werden.
ANHANG 0x82 Protokoll Fehler Daten im CONNECT-Paket entsprechen dieser Spezifikation nicht.
ANHANG 0x83 Spezifischer Fehler Der CONNECT ist gültig, wird aber von diesem Server nicht akzeptiert.
ANHANG 0x84 Nicht unterstützte Protokollversion Der Server unterstützt nicht die vom Client angeforderte Version des MQTT-Protokolls.
ANHANG 0x85 Client Identifier nicht gültig Der Client-Identifier ist ein gültiger String, ist aber vom Server nicht erlaubt.
ANHANG 0x86 Schlechter Benutzername oder Passwort Der Server akzeptiert nicht den vom Client angegebenen Benutzernamen oder Passwort
ANHANG 0x87 Nicht autorisiert Der Client ist nicht autorisiert zu verbinden.
ANHANG 0x88 Server nicht verfügbar Der MQTT Server ist nicht verfügbar.
137 0x89 Server beschäftigt Der Server ist beschäftigt. Versuchen Sie es später noch mal.
138. 0x8A Verboten Dieser Client wurde durch administrative Maßnahmen verboten. Kontaktieren Sie den Serveradministrator
ANHANG 0x8C Schlechte Authentifizierungsmethode Die Authentifizierungsmethode wird nicht unterstützt oder passt nicht zur Authentifizierungsmethode derzeit in Verwendung.
144. 0x90 Name invalid The Will Topic Der Name ist nicht fehlerhaft, wird aber von diesem Server nicht akzeptiert.
149 0x95 Paket zu groß Das CONNECT-Paket überstieg die maximal zulässige Größe.
151 0x97 Kontingent überschritten Es wurde eine Frist für die Umsetzung oder Verwaltung überschritten.
153 0x99 Payload-Format invalid Der Will Payload entspricht nicht dem angegebenen Payload Format Indicator.
3.5.2.2 PUBREC Eigenschaften

Das ist der Anfang.– PUBREC Paket variable Header Eigenschaften Länge kodiert als variable Byte ganze Zahl. wenn die Restlänge kleiner als 4 ist, hat die Eigenschaft keine Länge und einen Wert 0 ist verwendet.

Was ist los?– Das Nutzer-Eigentum wird verwendet, um weitere Informationen zu liefern die Client. Weitere Informationen finden Sie in Abschnitt – 3.1.3

Grundsaiten– Es wird verwendet, um dem Kunden alle Informationen über Warum Die Netzwerkverbindung ist geschlossen. Weitere Informationen zum Grund String finden Sie in Abschnitt 3.2.3

3.5.3 PUBREC Nutzlast

Das Kontrollpaket des PUBREC-Pakets hat keine Nutzlast.

3.5.4 PUBREC Maßnahmen
QoS Ebene Voraussichtliche Antwort
QoS 0 Keine
QoS 1 PUBACK Paket
QoS 2 PUBREC Paket
3.6 PUBREL – ÖFFENTLICHE Veröffentlichung

Die Antwort des PUBREC-Pakets ist das PUBREL-Paket. Das QoS 2 Protokoll Austausch Ein drittes Paket ist das PUBLISH Release Paket.

Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (6) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0)
byte 2... Restlänge

Im PUBREL-Paket sind die Bits 3,2,1 und 0 des Fest Headers zugeordnet, die muss auf 0,0,1 bzw. 0 eingestellt. Restlänge – Länge des variablen Headers.

3.6.2 PUBREL Variabler Header

Die Paketkennung aus dem PUBREC-Paket, PUBREL Reason Code und Eigenschaften die Felder im Variablen Header des PUBREL-Pakets.

Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 Pack-Identifier MSB
Byte 2 Pack-Identifier LSB
Byte 3 HERSTELLUNG Begründung
Byte 4 Objekt Länge
3.6.2.1 PUBREL Begründung

Der PUBREL Grundcode im Byte 3. Es gibt keinen Grundcode und den Wert (X00) (Success) wird verwendet, wenn die verbleibende Länge 2 beträgt. Der Client oder Server muss die PUBREL-Pakete senden mit einer der Werte des PUBREL-Urteil-Codes.

Wert Hexen Bezeichnung des Ursprungs Warenbezeichnung
0) 0 Erfolg Nachricht veröffentlicht.
146 0x92 Pack-Identifier nicht gefunden Der Packet Identifier ist nicht bekannt. Dies ist kein Fehler bei der Wiederherstellung, sondern zu anderen Zeiten Angaben eine Fehlanpassung zwischen dem Session State auf dem Client und Server.
3.6.2.2 PUBREL Eigenschaften

Das ist der Anfang.– PUBREL Paket variabler Header Die Länge der Eigenschaften wird als eine variable Byte ganze Zahl. wenn die Restlänge kleiner als 4 ist, hat die Eigenschaft keine Länge und ein Wert 0 ist verwendet.

Was ist los?– Benutzerimmobilien werden verwendet, um mehr weitere Informationen zur Client. Weitere Informationen finden Sie in Abschnitt – 3.1.3

Grundsaiten– Es wird verwendet, um alle Informationen zum Client Warum Die Netzwerkverbindung ist geschlossen. Weitere Informationen zum Grund String finden Sie in Abschnitt 3.2.3

3.6.3 PUBREL Nutzlast

Das Kontrollpaket des PUBREL-Pakets hat keine Nutzlast.

3.6.4 PUBREL Maßnahmen
QoS Ebene Voraussichtliche Antwort
QoS 0 Keine
QoS 1 PUBACK Paket
QoS 2 PUBREC Paket
3.7 VERÖFFENTLICHUNGEN

Die Antwort des PUBREL-Pakets ist das PUBCOMP-Paket. Das QoS 2 Protokoll Austausch Das vierte und letzte Paket ist das ÖFFENTLICHE Komplettpaket.

3.7.1 PUBCOMP Feste Kopfzeile
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (1) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0) 0)
byte 2... Restlänge
3.7.2 PUBCOMP Variabler Header
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 Pack-Identifier MSB
Byte 2 Pack-Identifier LSB
Byte 3 VERFAHREN Begründung
Byte 4 Objekt Länge
3.7.2.1 PUBCOMP Begründung

Der PUBCOMP Grundcode im Byte 3. Es gibt keinen Grundcode und den Wert von (0X00) (Success) wird verwendet, wenn die verbleibende Länge 2 beträgt. Der Client oder Server muss die PUBCOMP senden Pakete mit einem der Werte des PUBCOMP-Urteilscodes.

Wert Hexen Bezeichnung des Ursprungs Warenbezeichnung
0) 0 Erfolg Nachricht veröffentlicht.
146 0x92 Pack-Identifier nicht gefunden Der Packet Identifier ist nicht bekannt. Dies ist kein Fehler bei der Wiederherstellung, sondern zu anderen Zeiten zeigt eine Fehlanpassung zwischen dem Sitzungszustand auf dem Client und Server an.
3.7.2.2 PUBCOMP Eigenschaften

Objektlänge –PUBCOMP Paketvariable Die Länge der Kopfeigenschaften wird als variable Byte-Integer kodiert. wenn die Restlänge kleiner als 4 ist, die Eigenschaft keine Länge hat und ein Wert 0 verwendet wird.

Das ist ein Problem. –Das Benutzerobjekt wird verwendet, um Bereitstellung weitere Informationen zum Client. Weitere Informationen finden Sie in Abschnitt – 3.1.3

Grundsaite –Es wird verwendet, um alle Informationen zum Client, warum die Netzwerkverbindung geschlossen ist. Für weitere Informationen über Grund String Refer zu Abschnitt – 3.2.3

QoS Ebene Voraussichtliche Antwort
QoS 0 Keine
QoS 1 PUBACK Paket
QoS 2 PUBREC Paket
3.8 SUBSCRIBE

Das SUBSCRIBE-Paket wird vom Client zum Erzeugen eines oder mehr Abonnements. Jedes Abonnement speichert das Interesse des Kunden an einem Abonnement oder mehreren Abonnements Themen. Der Server sendet die PUBLISH-Pakete an den Client, um die Applikationsnachrichten mit maximal Qo zu Themen, die mit diesen Abonnements kompatibel sind.

Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (8) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0) 0)
byte 2... Restlänge

Im SUBSCRIBE-Paket sind die Bits 3,2,1 und 0 des Fixed Headers zugeordnet, die müssen auf 0,0,1 bzw. 0 eingestellt werden. Restlänge – Länge des variablen Headers und die Länge der Nutzlast.

3.8.2 SUBSCRIBE Variabler Header

Die Paketkennung und Eigenschaften sind die Felder im Variable Header die SUBSCRIBE Paket.

Warenbezeichnung 7 6 5. ANHANG 3 2. 1 0)
Pack-Identifier
Byte 1 Pack-Identifier MSB (0) 0) 0) 0) 0) 0) 0) 0) 0)
Byte 2 Verpackungskennung LSB (10) 0) 0) 0) 1 0) 1 0) 0)
Byte 3 Objekt Länge (0) 0) 0) 0) 0) 0) 0) 0) 0)
3.8.2.1 SUBSCRIBE Eigenschaften

Objektlänge –Das SUBSCRIBE-Paket variabler Kopf Eine Eigenschaftslänge wird als variable Byte-Integer kodiert.

Identifier anmelden –Der Indikator der Abonnementkennung ist 11 (0X0B) Byte. Wenn die Abonnementkennung den Wert als 0 hat und es ist mehr als einmal im Paket enthalten ist es als Protokollfehler zu betrachten. Es kann eine Wert von 1 bis 268,435,455.

Das ist ein Problem. –Benutzerkonzession wird verwendet Mehr erfahren zusätzliche Informationen an den Client. Weitere Informationen finden Sie in Abschnitt – 3.1.3

3.8.3 SUBSCRIBE Nutzlast

Die SUBSCRIBE Paket Nutzlast enthält eine Liste von Themenfiltern, die identifizieren die Themen, die der Kunde abonnieren möchte. Byte der Abonnementoptionen nach dem Thema Filter. Die Thema Filter ist ein UTF-8 codierter String. Die SUBSCRIBE Nutzlast muss mindestens einen Themenfilter und einen Paar der Abonnementoptionen.

3.8.3.1 Abonnementoptionen

Das maximale QoS-Feld wird durch die Bits 0 und 1 der Abonnementoptionen dargestellt. Es ist als Protokollfehler zu betrachten, wenn der Wert des maximalen QoS-Feldes 3 ist. Keine lokale Option ist vertreten durch nach Bit 2 der Abonnementoptionen. Wenn No Local Bit auf 1 gesetzt wird, gilt als Protokollfehler. als publiziert Option wird durch Bit 3 der Abonnementoptionen dargestellt. Wenn das RETAIN-Flag auf 0 gesetzt wird, dann die Application Messages werden mit diesen Abonnementoptionen weitergeleitet. Wenn das RETAIN auf 1 gesetzt wird, dannNews und Newswerden gesendet, wenn die Abonnementoption initiiert wird. Rückgriffsoption ist vertreten durch nach Bit 4 und 5 der Abonnementoptionen. Wenn das Abonnement eingerichtet wird, dann die gespeicherten Nachrichten werden geschickt. Der Wert der Retain Handling Option ist 3 dann ist es ein Protokollfehler. Die Werte und die Beschreibung der Abonnementoptionen sind,

0 = Zurückschicken Nachrichten während des Abonnements.

1 = Retained Messages an Abonnement nur senden, wenn Abonnement nicht präsent.

2 = Senden Sie keine gespeicherten Nachrichten während des Abonnements.

Subscription Options payload Format :

Warenbezeichnung 7 6 6 ANHANG 3 2. 1 0)
Das ist mein Name.
Byte 1 Länge MSB
Byte 2 Länge LSB
Bytes 3..N Das ist mein Name.
Abonnementoptionen
Vorbehaltlich Zurück zur Übersicht RAP NL Qo

RAP – Halten Sie sich als Veröffentlicht.
NL – Kein Lokal.

Format:

Warenbezeichnung 7 6 5. ANHANG 3 2. 1 0)
Das ist mein Name.
1 Länge 0) 0) 0) 0) 0) 0) 0) 0)
2. Länge 0) 0) 0) 0) 0) 0) 1 1
3 „a ) 0) 1 1 0) 0) 0) 0) 1
ANHANG „/ ) 0) 0) 1 0) 1 1 1 1
5. „b 0) 1 1 0) 0) 0) 1 0)
Abonnements
6 Abonnement Opt ) 0) 0) 0) 0) 0) 0) 0) 1
Das ist mein Name.
7 Länge 0) 0) 0) 0) 0) 0) 0) 0)
8) Länge 0) 0) 0) 0) 0) 0) 1 1
ANHANG „c 0) 1 1 0) 0) 0) 1 1
0) „/ ) 0) 0) 1 0) 1 1 1 1
1 „d ) 0) 1 1 0) 0) 1 0) 0)
Abonnement
2. Abonnieren 0) 0) 0) 0) 0) 0) 1 0)
3.8.4 SUBSCRIBE Maßnahmen

Der Server muss mit dem SUBACK-Paket reagieren, wenn er das SUBSCRIBE erhält Paket vom Client. Die Paketkennung der Pakete SUBSCRIBE und SUBACK sind gleich.

3.9 SUBACK – SUBSCRIBE Anerkennung

Der Server schickte das SUBACK-Paket an den Client zur Bestätigung des Empfangs und Verarbeitung des vom Client gesendeten SUBSCRIBE-Pakets. Die Liste der Grundcodes, die von einem SUBACK enthalten sind Paket gibt den vom SUBSCRIBE geforderten maximalen QoS-Wert an.

3.9.1 SUBACK Fixed Header
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (8) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0) 0)
byte 2... Restlänge
3.9.2 SUBACK Variabler Header

Der Packet Identifier aus dem SUBSCRIBE Paket und Eigenschaften sind die Felder in die Paket der SUBACK Variable Header.

Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 Pack-Identifier MSB
Byte 2 Pack-Identifier LSB
Byte 3 VERFAHREN Begründung
Byte 4 Objekt Länge
3.10 UNSUBSCRIBE

Um sich von einigen Themen abzumelden, sendet der Kunde die UNSUBSCRIBE-Anforderung an die Server.

3.10.1 UNSUBSCRIBE Feste Kopfzeile
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (8) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0) 0)
byte 2... Restlänge
3.10.2 UNSUBSCRIBE Variabler Header

Der Packet Identifier und die Eigenschaften sind die Felder im Variablen Header der UNSUBSCRIBE Kontrollpaket.

3.10.2.1 UNSUBSCRIBE Eigenschaften

Objektlänge –Das UNSUBSCRIBE-Paket Variable Die Kopf-Eigenschaftslänge wird als variable Byte-Integer kodiert.

Das ist ein Problem. –Benutzerkonzession wird verwendet, um mehr zusätzliche Informationen an den Client. Weitere Informationen finden Sie in Abschnitt – 3.1.3

3.10.3 UNSUBSCRIBE Nutzlast

Das UNSUBSCRIBE Paket Payload enthält eine Liste von Themenfiltern, die identifizieren die Themen, die der Kunde abonnieren möchte. Byte der Abonnementoptionen nach dem Thema Filter. Die Thema Filter ist ein UTF-8 codierter String. Das UNSUBSCRIBE Steuerpaket Payload muss einen Themenfilter enthalten. wenn das UNSUBSCRIBE-Steuerpaket hat keine Nutzlast, dann ist es ein Protokollfehler.

Warenbezeichnung 7 6 5. ANHANG 3 2. 1 0)
Das ist mein Name.
Byte 1 Länge MSB (0) 0) 0) 0) 0) 0) 0) 0) 0)
Byte 2 Länge LSB (3) 0) 0) 0) 0) 0) 0) 1 1
Byte 3 „a“ (0x61) 0) 1 1 0) 0) 0) 0) 1
Byte 4 „/“ (0x2F) 0) 0) 1 0) 1 1 1 1
Byte 5 „b“ (0x62) 0) 1 1 0) 0) 0) 1 0)
Das ist mein Name.
Byte 6 Länge MSB (0) 0) 0) 0) 0) 0) 0) 0) 0)
Byte 7 Länge LSB (3) 0) 0) 0) 0) 0) 0) 1 1
Byte 8 „c“ (0x63) 0) 1 1 0) 0) 0) 1 1
Byte 9 „/“ (0x2F) 0) 0) 1 0) 1 1 1 1
Byte 10 „d“ (0x64) 0) 1 1 0) 0) 1 0) 0)
3.10.4 UNSUBSCRIBE Maßnahmen

Die im UNSUBSCRIBE-Paket bereitgestellten Themenfilter sollten charakterisiert werden von aktuelles Thema filter, den der Client auf dem Server hat. Wenn ein Filter richtig passt, seine Abonnement muss entfernt werden, sonst wird keine zusätzliche Verarbeitung erfolgen.

  • Es sollte aufhören, neue Nachrichten hinzuzufügen, die mit Themenfiltern kompatibel sind, um an die Client.
  • Es sollte alle QoS 1 oder QoS 2 Nachrichten abschließen, die mit den Themenfiltern kompatibel sind und an den Kunden geliefert.
  • Es kann weiterhin vorhandene Nachrichten an den Client liefern.
3.11 UNSUBACK – UNSUBSCRIBE ACKNOWLEDGEMENT

Der Server schickte das UNSUBACK-Paket an den Client zur Bestätigung der Bestätigung Empfang und Bearbeitung des vom Client gesendeten UNSUBSCRIBE-Pakets.

3.11.1 UNSUBACK Feste Kopfzeile
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (11) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0) 0)
byte 2... Restlänge
3.11.2 UNSUBACK Variabler Header

Die Paketkennung aus dem UNSUBSCRIBE Steuerpaket und Eigenschaften sind die Felder im variablen Header des UNSUBACK-Pakets.

Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 Pack-Identifier MSB
Byte 2 Pack-Identifier LSB
Byte 3 VERFAHREN Begründung
Byte 4 Objekt Länge
3.11.2.1 UNSUBACK Eigenschaften

Objektlänge –Das UNSUBACK-Paket variabler Kopf Eine Eigenschaftslänge wird als variable Byte-Integer kodiert.

Grundsaite –Es wird verwendet, um alle Informationen zum Client, warum die Netzwerkverbindung geschlossen ist. Für weitere Informationen über Grund String Refer zu Abschnitt – 3.2.3

Das ist ein Problem. –Benutzerkonzession wird verwendet Mehr erfahren zusätzliche Informationen an den Client. Weitere Informationen finden Sie in Abschnitt 3.1.3

3.11.3 UNSUBACK Nutzlast

Das UNSUBACK Kontrollpaket Payload trägt eine Liste der Gründe Codes. Die Reihenfolge der Themenfilter im UNSUBSCRIBE Paket entspricht der Reihenfolge der Grundcodes in das UNSUBACK-Paket. Das UNSUBACK Kontrollpaket Payload muss eine der Grundcodes für jeden enthalten Thema filter.

Wert Hexen Bezeichnung des Ursprungs Warenbezeichnung
0) 0 Erfolg Das Abonnement wird gestrichen.
17 0x11 Kein Abonnement existiert Kein kompatibler Themenfilter, der vom Client verwendet wird.
ANHANG 0x80 Nicht spezifizierter Fehler Die Anmeldung konnte nicht abgeschlossen werden und der Server wollte den Grund nicht offenlegen oder andere Grundcodes gelten nicht.
ANHANG 0x83 Spezifischer Fehler Der Server akzeptiert nicht das gültige UNSUBSCRIBE-Paket.
ANHANG 0x87 Nicht autorisiert Um das Un-Abo zu machen, ist der Client nicht autorisiert.
143 0x8F Thema Filter invalid Der Thema-Filter ist für diesen Client nicht erlaubt, aber es wird richtig gebildet.
ANHANG 0x91 Packet Identifier im Einsatz Der angegebene Packet-Identifier ist bereits im Einsatz.
3.12 PINGREQ – PING Request

Das PINGREQ Kontrollpaket wird vom Client an den Server gesendet. Die Verwendung von KÖNIGREICH Paket, geben Sie dem Server an, dass der Client lebt, während keine anderen MQTT-Steuerpakete gesendet werden von den Client an den Server. Fordern Sie den Server an, um sicherzustellen, dass er am Leben ist. Die Netzwerkübung identifiziert, dass die Netzwerkverbindung lebendig ist. Das PINGREQ Steuerpaket wird bei der Verarbeitung verwendet dielebend. Weitere Informationen siehe Abschnitt 3.1.2.10

3.12.1 PINGREIS Feste Kopfzeile
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (12) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0) 0)
byte 2... Restlänge
3.12.2 VERKEHR Variabler Header

Im PINGREQ-Steuerpaket gibt es keinen variablen Header.

3.12.3 PINGREIS Nutzlast

Im PINGREQ-Steuerpaket gibt es keine Nutzlast.

3.12.4 PINGREIS Maßnahmen

Der Server schickte das PINGRESP-Paket an den Client. Das PINGRESP-Steuerpaket ist die Antwort eines PINGREQ-Pakets.

3.13 PINGRESP – PING Response

Das PINGRESP-Steuerpaket wird vom Client an den Server gesendet, gibt die Server als aktiv. Es ist die Antwort eines PINGREQ-Steuerpakets. Das PINGRESP-Steuerpaket wird in die die Verarbeitung des Haltens am Leben. Weitere Informationen siehe Abschnitt 3.1.2.10

3.13.1 VERPFLICHTUNGEN Feste Kopfzeile
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (13) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0) 0)
byte 2... Restlänge
3.13.2 PINGRES Variabler Header

Im PINGRESP-Steuerpaket gibt es keinen variablen Header.

3.13.3 VERPFLICHTUNGEN Nutzlast

Im PINGRESP-Steuerpaket gibt es keine Nutzlast.

3.13.4 PINGRESP Maßnahmen

Der Client nimmt keine Aktion bei der Gewinnung dieses PINGRESP-Steuerpakets.

3.14 DISCONNECT

Das letzte MQTT-Steuerpaket ist das DISCONNECT-Paket, das von der Kunden auf den Server. Es gibt den Grund, warum die Netzwerkverbindung geschlossen ist. Die MQTT-Kunden schickten dies Paket vor dem Schließen der Netzwerkverbindung. Um das DISCONNECT-Paket mit Grundcode 0X00 zu senden (normale Trennung) wird die Netzwerkverbindung geschlossen, dann hat die Verbindung eine Willensnachricht, die veröffentlicht. Weitere Einzelheiten finden Sie unter 3.1.2.5

3.14.1 DISCONNECT Feste Kopfzeile
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Pack Typ (8) Vorbehaltlich
0) 0) 0) 1 0) 0) 0) 0) 0)
byte 2... Restlänge

Der Client oder Server sollte überprüfen, ob die reservierten Bits auf 0 gesetzt sind. Die Zurück zur Übersicht Bits-Wert ist nicht Null, es sendet ein Trennpaket mit Grundcode 0X81. Für weitere Details siehe Abschnitt 3.13.

Restlänge – Länge des variablen Headers.

3.14.2 DISCONNECT Variabler Header
Warenbezeichnung 7 6 5. ANHANG 3 2. 1 0)
Deaktivieren Sie den Grundcode
Byte 1 0) 0) 0) 0) 0) 0) 0) 0)
Byte 2 Länge (5) 0) 0) 0) 0) 0) 1 1
Byte 3 Session Expiry Interval Identifier (17) 0) 0) 0) 1 0) 0) 0)
Byte 4 Sitzung abgelaufene Intervall (0) 0) 0) 0) 0) 0) 0) 0)
Byte 5 0) 0) 0) 0) 0) 0) 0) 0)
Byte 6 0) 0) 0) 0) 0) 0) 0) 0)
Byte 7 0) 0) 0) 0) 0) 0) 0) 0)
3.14.2.1 DISCONNECT Begründung

Der DISCONNECT Grundcode ist Byte 1 im variablen Header. Der Wert 0X00 wird verwendet wenn der Restlängenwert kleiner als 1 ist. Ein Byte unbezeichnete Grundcodefeldwerte werden angezeigt unten.

Wert Hexen Bezeichnung des Ursprungs Sent von Warenbezeichnung
0) 0 Normale Trennung Client oder Server Verbindung normal geschlossen. Will-Nachricht wird nicht gesendet.
ANHANG 0x04 Verbindung mit Will Message Kunde Der Client will trennen, aber der Server muss auch seine Willensnachricht veröffentlichen.
ANHANG 0x80 Nicht spezifizierter Fehler Client oder Server Die Verbindung ist geschlossen und der Server wollte den Grund oder einen anderen nicht offenlegen Grundcodes nicht anwendbar.
ANHANG 0x81 Malformed Packet Client oder Server Diese Spezifikation bestätigt das empfangene Paket nicht.
ANHANG 0x82 Protokoll Fehler Client oder Server Es erhielt ein unerwartetes oder aus dem Auftragspaket.
ANHANG 0x83 Spezifischer Fehler Client oder Server Sie kann nicht durch diese Implementierung bearbeitet werden, aber das empfangene Paket ist gültig.
ANHANG 0x87 Nicht autorisiert Server Die Serveranfrage ist keine autorisierte.
137 0x89 Server beschäftigt Server Es kann nicht die Bearbeitungsanfragen von diesem Client fortsetzen und auch der Server ist beschäftigt.
KAPITEL 0x8B Serverabschaltung Server Den Server abschalten.
1 0x8D Halten – Alive Timeout Server Es gibt kein Paket, das das 1,5-fache der Lebenszeit erhalten wurde, d.h., halten – lebendig Timeout. Die Verbindung ist geschlossen.
ANHANG 0x8E Sitzung angenommen Server Eine weitere Verbindung mit der gleichen Client-ID ist angebracht, wodurch diese Verbindung geschlossen wird.
143 0x8F Thema Filter invalid Server Der Thema Filter wird richtig gebildet, wird aber nicht von diesem Sever akzeptiert.
144. 0x90 Name invalid Client oder Server Der Thema-Filter ist für diesen Client oder Server nicht erlaubt, aber es wird korrekt gebildet.
KAPITEL 7 0x93 Maximale Überschreitung Client oder Server Der Client oder Server erhielt mehr als die empfangene maximale Ausgabe, für die er nicht sendete VERFAHREN oder PUBCOMP.
ANHANG 0x94 Thema Alias invalid Client oder Server Das PUBLISH Steuerpaket enthält ein Topic Alias, das größer ist als das maximale Thema Alias-Wert der vom Client oder Server empfangen wurde und in der CONNECT OR CONNACK-Steuerung gesendet wird Paket.
149 0x95 Paket zu groß Client oder Server Der Wert der Paketgröße ist größer als die maximale Paketgröße für diesen Client oder Server.
KAPITEL 0x96 Nachrichtenrate zu hoch Client oder Server Die vom Client oder Server empfangene Datenrate ist zu hoch.
151 0x97 Kontingent überschritten Client oder Server Ausführungs- oder Verwaltungsgrenzen überschritten.
KAPITEL 0x98 Verwaltungsmaßnahme Client oder Server Verbindung aufgrund einer administrativen Maßnahme geschlossen.
153 0x99 Payload-Format invalid Client oder Server Eine angegebene Nutzlastformatanzeige entspricht nicht dem Nutzlastformat
154 0x9A Nicht unterstützt Server Die gespeicherten Nachrichten werden vom Server nicht unterstützt.
155. 0x9B QoS nicht unterstützt Server Im CONNACK-Steuerpaket hat der Client ein QoS angegeben, das größer ist als das QoS in einer Maximale QoS.
156 0x9C Verwenden Sie einen anderen Server Server Der Server wird vorübergehend geändert.
157 0x9D Server bewegt Server Der Server-Standort wird permanent geändert.
158 0x9E Geteilte Abonnements nicht unterstützt Server Die gemeinsamen Abonnements werden vom Server nicht unterstützt.
159 0x9F Anschlussrate überschritten Server Die Verbindungsrate ist wegen geschlossener Verbindung zu hoch.
ANHANG 0xA0 Maximale Verbindungszeit Server Die zulässige maximale Verbindungszeit für diese Verbindung wurde überschritten.
L 347 vom 20.12.2013, S. 1). 0xA1 Subscription Identifiers nicht unterstützt Server Die gemeinsamen Abonnements werden vom Server nicht unterstützt.
162 0xA2 Wildcard Abonnements nicht unterstützt Server Die Wildcard-Abonnements werden vom Server nicht unterstützt.
3.15 AUTH -Authentication Exchange

Das AUTH-Paket wird vom Client an den Server gesendet oder umgekehrt als Teil eines Austausch von erweiterter Authentisierung, wie etwa Antwortauthentifizierung. Client- oder Server-AUTH-Paket senden ist einen Protokollfehler, wenn das CONNECT-Paket nicht die gleiche Authentifizierungsmethode aufweist.

3.15.1 AUTH Fixed Header
Bit 7 6 5. ANHANG 3 2. 1 0)
Byte 1 MQTT Control Packet Typ (15) Vorbehaltlich
0) 0) 1 0) 0) 0) 0) 0)
byte 2... Restlänge
3.15.2 AUTH Variabler Header

Authenticate Reason Code und Eigenschaften sind die Felder im variablen Header der AUTH Steuerpaket.

3.15.2.1 Authentication Grundcode

Der Authenticate Grundcode ist Byte 0 im variablen Header. Die Werte für Byte Unsignierte Authentifizierungsgrundcodefelder werden unten angezeigt. Eine der Authentifizierungsgrundcodes muss sein verwendet vom Absender des AUTH-Steuerpakets.

Wert Hexen Bezeichnung des Ursprungs Sent von Warenbezeichnung
0) 0 Erfolg Server Erfolgreiche Authentifizierung
KAPITEL 0x18 Weiter Authentifizierung Client oder Server Die Authentifizierung setzt einen weiteren Schritt fort.
ANHANG 0x19 Re-authenticate Kunde Neuauthentifizierung initiiert

Wenn der Grundcode 0x00 ist (Erfolg) und es gibt keine Attribute, dann der Grund Code und die Eigenschaftslänge kann entfallen. In diesem Fall beträgt die verbleibende Länge für AUTH 0.

3.15.2.2 AUTH Eigenschaften

Objektlänge –Die AUTH-Paketvariable Kopf Eine Eigenschaftslänge wird als variable Byte-Integer kodiert.

Grundsaite –Es wird verwendet, um alle Informationen zum Client, warum die Netzwerkverbindung geschlossen ist. Für weitere Informationen über Grund Streichung Abschnitt – 3.2.3.

Das ist ein Problem. –Benutzerkonzession wird verwendet, um mehr zusätzliche Informationen an den Client. Weitere Informationen finden Sie unter – 3.1.3.

Authentifizierungsmethode –die Identität einer Person überprüfen Verwendung Einige Methoden sind die Authentifizierungsmethode. Weitere Einzelheiten siehe Abschnitt 3.1.2.11.

Authentifizierungsdaten –Benutzername und Passwort sind die Daten müssen seine Identität dem Client oder Server beweisen. für mehr Details Abschnitt 3.1.2.11

3.15.3 AUTH Payload

Im Kontrollpaket AUTH gibt es keine Nutzlast.

3.15.4 AUTH Aktionen

Weitere Informationen finden Sie in Abschnitt 4.12 über die erweiterte Authentifizierung.

4. Operationelles Verhalten
4.1 Sitzungsstaat

Um QoS 1 und QoS 2 Protokolle zu aktivieren, müssen Client und Server die Zustand mit die Client-Kennung, die als Session-Level bezeichnet wird. Der Server speichert Abonnements als Teil der Sitzungszustand. Die Sitzung kann in der Reihenfolge der Netzwerkverbindungen fortgesetzt werden. Das dauert bis spätestens Netzwerkverbindung und Sitzungsablauf.
Der Sitzungszustand auf dem Client ist wie folgt:

  • QoS 1 und QoS 2 Nachrichten wurden an den Server gesendet, aber sie werden nicht vollständig anerkannt (teilweise bestätigt).
  • QoS 2 Nachrichten wurden vom Server empfangen, aber sie sind nicht vollständig anerkannt (teilweise anerkannt)

Der Sitzungszustand auf dem Server ist wie folgt:

  • Die Existenz der Staatssitzung, auch wenn der verbleibende Sitzungszustand leer ist.
  • Sub-Client-Abonnements einschließlich aller Abonnement-Kennzeichen.
  • QoS 1 und QoS 2 Nachrichten wurden an den Client gesendet, aber sie werden nicht vollständig anerkannt.
  • Austausch anhängige QoS 1 und QoS 2 Nachrichten für einen Client und optional QoS 0 Nachrichten anhängig Überweisung der Klient.
  • QoS 2 Nachrichten von einem Client empfangen. Die Will-Nachricht und Will-Verzögerungsintervall sind jedoch nicht vollständig bestätigt.
  • wenn die Sitzung derzeit nicht verbunden ist, wird der Sitzungszustand verworfen
4.1.1 Aufnahme des Sitzungsstaats

Wenn die Netzwerkverbindung geöffnet ist, dann der Client- und Serversitzungsstatus sollte nicht verworfen werden. Wenn die Netzwerkverbindung geschlossen ist und die Sitzung abläuft, muss der Server abwerfen die Sitzungsstatus.

4.2 Netzwerkverbindungen

DieMQT Das ist alles.erfordert Grundverkehr, um einen geordneten Strom zu liefern, verlustlos, von Client zu Server und Server zu Client.

4.3 QoS- und Protokollströme

QoS (Servicequalität) definiert, wie zuverlässig eine Nachricht geliefert wird. Es stellt sicher dass die Nachrichten ordnungsgemäß vom Sender an den Empfänger gesendet werden, abhängig von der gewählten Ebene Liefersicherheit. Das primäre Ziel dieser Funktion ist sicherzustellen, dass Nachrichten erfolgreich sind von einem Punkt zum anderen übertragen. Es gibt dreiDas ist der Grund, nämlich: QoS 0, QoS 1, und QoS 2.

4.3.1 QoS 0: höchstens einmal

Die Nachricht wurde an den entsprechenden Client geliefert, aber keine Antwort wurde gesendet von Empfänger. Die Nachricht wird einmal oder nicht am Empfänger ankommen.

Veröffentlichungen Kontrollpaket Aktion des Empfängers
ÖFFENTLICHE QoS 0, DUP=0
—————— >
Bewerbung liefern Nachricht an entsprechende Empfänger/innen
4.3.2 QoS 1: Mindestens einmal

Die Nachricht wurde mehrmals vom Absender bis zum Anerkennung ist erhalten.

Veröffentlichungen MQT Kontrollpaket Aktion empfangen
Nachricht speichern
ÖFFENTLICHE QoS 1, DUP=0 senden, —————— >
Starten Sie die Weiterleitung der Bewerbungsnachricht1
<—————< PUBACK senden
Nachricht abrufen
4.3.3 QoS 2: Genau einmal

Der Sender und der Empfänger greifen ein, um sicherzustellen, dass nur eine Kopie der Nachricht ist empfangen.

Veröffentlichungen MQT Kontrollpaket Aktion des Empfängers
Nachricht speichern
VERÖFFENTLICHUNGEN 2, DUP=0
—————— >
StoreDann Starten Sie die Weiterleitung der Bewerbungsnachricht1
VERFAHREN
<—————<
Discard-Nachricht, Store PUBREC empfangen
HERSTELLUNG
—————— >
Discard
PUBCOMP
<—————<
Abgespeicherter Zustand
4.4 Nachricht Empfang

Wenn ein Server eine eingehende Anwendungsnachricht erhält, muss es sein hinzugefügt die Sitzung für den Client mit kompatiblen Abonnements.

4.5 Nachrichtenbestellung
  • Wenn der Client alle veröffentlichten Pakete zurückgibt, müssen die ursprünglichen PUBLISH-Pakete in der Gleich Bestellung, in der sie gesendet wurden (dies kann auf QoS 1 und QoS 2 Nachrichten angewendet werden).
  • Der Client muss das PUBACK-Paket in der Reihenfolge senden, in der sie das PUBLISH-Paket erhalten haben. die Absender (QoS 1 Nachrichten).
  • Der Client muss die PUBREC-Pakete in der Reihenfolge, in der die zugehörigen Pakete empfangen werden, senden. die Absender (QoS 2 Nachrichten).
  • Der Client muss PUBREL-Pakete in der Reihenfolge senden, in der die betreffenden PUBREC-Pakete empfangen werden (QoS) 2 Nachrichten).
4.6 Themennamen und Themenfilter
4.6.1 Thema Wildcards

Der Thema Level Separator wird verwendet, um den Themennamen zu trennen. Wenn ja, es teilt die Titel durch mehrere „topische Ebenen“. Das Abonnement Thema Filter kann spezielle Wildcard Zeichen enthalten dass ermöglichen, dass ein Client mehrere Themen gleichzeitig abonniert. Wildcard-Zeichen können im Thema verwendet werden filtert, aber nicht innerhalb eines Themennamens.

4.6.1.1 Thema Ebene Separator

Der vordere Slash („/“ U+002F) wird verwendet, um jede Ebene innerhalb eines Themas zu trennen Baum und eine hierarchische Struktur für den Themennamen bereitzustellen. Der Einsatz des Themenebenenabscheiders ist signifikant wenn eine der beiden Wildcard-Zeichen im Thema Filter durch den Anmelde-Client dargestellt wird. Thema Level Separatoren können überall im Thema Filter oder Thema Name erscheinen.

4.6.1.2 Multilevel Wildcard

Das Nummernschild (#’ U+0023) ist ein Wildcard-Zeichen, das für alle gilt Position in einer Thema. Die Multilevel-Wildcard stellt sowohl Eltern- als auch Kinderebenen dar. Die Multilevel-Wildcard Charakter muss selbst angegeben werden oder dem Thema Level Separator folgen. In beiden Fällen muss es die letzte sein Zeichen, die im Themenfilter angegeben sind.

ANHANG Einzelne Ebene Wildcard

Die einstufige Wildcard kann auf jeder Ebene im Header-Filter verwendet werden. wo es ist verwendet, sollte es die gesamte Größe des Filters einnehmen. Es kann auf mehreren Ebenen im Thema verwendet werden Filter und kann in Verbindung mit einer Multilevel-Wildcard verwendet werden.

4.6.2 Thema beginnt mit $

Themenname beginnend mit $-Zeichen, aber nicht mit # oder + beginnen Charakter. Die Server sollte verhindern, dass Clients Nachrichten mit anderen Clients austauschen, indem sie die Themennamen verwenden, die beginnen mit einem führenden $-Zeichen.

4.6.3 Thema Semantische und Nutzung
  • Jeder Thema Name und Thema Filter muss mindestens einen langen Charakter enthalten.
  • Topic Names und Topic-Filter können Raumzeichen enthalten, die case-sensitive sind.
  • Topic Namen und Thema Filter sollten nicht Null Zeichen (Unicode U+0000) enthalten und sollten nicht Verschlüsselung mehr als 65,535 Bytes.
  • Ein führender oder rückständiger „/“ erzeugt einen einzigartigen Topic Name oder Topic Filter.
  • Ein Thema Name oder Thema Filter mit nur dem Zeichen „/“ ist gültig

Bei der Erstellung eines Abonnements, das mit dem Server kompatibel ist, machen Sie keine Änderungen oder Änderungen der Standard- oder Unbefugtenzeichen im Thema Name oder Thema Filter

4.7 Abonnements

MQTT liefert zwei Arten von Abonnements.

  • Nicht geteilte Abonnements
  • Gemeinsame Abonnements
4.7.1 Nicht geteilte Abonnements

In einem Nicht-Shared-Abonnement abonnierte jeder Client ein bestimmtes Thema erhält Kopie aller Nachrichten, die in demselben abonnierten Thema veröffentlicht werden. Eine Sitzung muss nur eine Non-Shared Subscriptions mit dem gleichen Thema Filter, So kann das Thema Filter als Schlüssel verwendet werden erkennen das Abonnement in dieser Sitzung. Wenn die mehreren Clients ein eigenes nicht geteiltes Abonnement haben, Gleich thematisch erhält dann jeder Client die veröffentlichte eigene Kopie der Bewerbungsnachricht zu diesem abonnierten Thema. Das bedeutet, dass ungeschädigte Abonnements nicht verwendet werden können, um Balance-Anwendungsnachrichten zwischen mehreren verbrauchen Clients, wobei jeder Teilnehmer mit jeder Nachricht versehen wird.

4.7.2 Geteilte Abonnements

In einem gemeinsamen Abonnement wird jede Nachricht nur an den abonnierten Themen der Klient. Ein gemeinsames Abonnement ist mit mehreren Registrierungssitzungen von MQTT verbunden. Wie die Unshared Abo, das ist ein nicht-shared Abo, es hat auch ein Thema Filter und Abonnement Optionen. Ein Problem, das mit seinem Thema Filter kompatibel ist, wird jedoch nur an einen seiner Abonnementssitzungen. Geteilte Abonnements sind nützlich, wenn mehrere Verbraucher die Verarbeitung der Veröffentlichungen parallel.

Das Format der speziellen Art von Thema Filter, um die geteilte Abonnement :

$ Teilen/{ShareName}/{filter}

Wo,

$Share – Die Reihenfolge der Zeichen, die das gemeinsame Abonnement darstellen Thema Filter.

{Name teilen} – Zeichenkette ohne “/”, “+” oder “#”.

{filter} – Der Rest des Strings enthält die gleiche Syntax und Semantik einer Thema Filter in der Nicht-Shared Subscription.

4.8 Durchflussregelung

Die Optimierung der Übertragungsrate von Daten über MQTT-Clients erfolgt. durch Strömung Kontrolle. Durch die Nutzung des maximalen Wertes der Clients und Server steuern und erhalten die Anzahl der unwissentlich ÖFFENTLICHE Pakete. Das Empfangsmaximum stellt ein Maximum von einer sendenden Zuteilung fest, die ist verwendet, um die Anzahl der PUBLISH QoS > 0 Pakete zu steuern, die ohne Empfang von PUBACK gesendet werden können (für QoS 1) oder PUBCOMP (für QoS 2). Der Client oder Server legt den anfänglichen Sendequotenwert fest, der nicht über den Maximal empfangen. Beim Senden der PUBLISH-Pakete wird jedes Mal der Sendequotenwert verringert. Wenn senden Ein Quotenwert kommt auf Null, dann kann der Client oder Server das ÖFFENTLICHE Paket nicht mit QoS>0 senden. Weiter, die Client oder Server den Vorgang fortsetzen, dann wird tatsächlich der Sendequotenwert auf zwei Arten erhöht,

  • Jedes Mal, wenn das Abrufen von PUBACK- oder PUBCOMP-Paketen trotzdem einen Fehlercode trug.
  • Jedes Mal das Abrufen von PUBREC-Paket mit einem Grundcode von 0X80 oder größer.

Die Sendequote ist bereits gleich dem anfänglichen Sendequotenwert, so dass wir nicht Steigerung den Wert. Der Versuch, den Wert der Sendequote im vorstehenden Fall zu erhöhen, kann dazu führen, dass von PUBREL Paket nach der Einrichtung einer neuen Netzwerkverbindung.

4.9 Anfrage/Beantwortung

Die Anfragenachricht an ein bestimmtes Thema wird von einem MQTT-Client veröffentlicht. Die Eine Bewerbungsnachricht mit einem Antwortthema wird als Anfragenachricht betrachtet. Ein weiterer MQTT-Client (früher) hat den Themenfilter abonniert, der dem Themennamen des entsprechenden MQTT-Clients entspricht (Sender) verwendet, wenn die Anfragenachricht veröffentlicht wird. Dadurch erhielt sie die Anfragenachricht. Es kann oder kann werden nicht mehrere Befragte abonniert auf diesen Themennamen. Der Antragsteller wird geeignete Maßnahmen ergreifen Basis über die Anfragenachricht und dann eine Antwortnachricht zum Thema Name im Antwortthema Eigenschaft ausgeben auf die Anfragenachricht übertragen. In regelmäßiger Nutzung erhält der Requester die Antwortnachricht von die abonnierte Antwort Thema. Wenn ein anderer Client das gleiche Antwortthema abonniert, dann der Client die Antwortnachricht verarbeitet und empfangen.

4.10 Server-Umleitung

Ein Server kann den Client bitten, einen anderen Server umzuleiten, indem er MQT Kontrollpakete CONNACK oder DISCONNECT mit Grundcode 0X9C oder 0X9D. Durch die Verwendung dieser Grundcodes Server der Client-Standort wird mit der Server-Referenz-Eigenschaft angezeigt. Die Server-Referenz ist UTF-8 Encoded String. Der Grundcode 0X9C gibt an, dass der Client vorläufig auf einen anderen umleitet Server. Der Grundcode 0X9D gibt an, dass der Client ewig auf einen anderen Server umleitet.

4.11 Verbesserte Authentifizierung

Das MQTT CONNECT-Paket mit Benutzername und Passwortfeld unterstützt das grundlegende Authentifizierung der Netzwerkverbindung. Verbesserte Authentication erweitert diese BasisMQT Authentisierungmit Challenge/Response-Stil Authentifizierung. Die Authentifizierung ist ein Asset zwischen den MQTT-Clients. Wenn Server erhält die Authentifizierungsmethode, die das Verfahren nicht unterstützt, dann kann es einen CONNACK senden Kontrollpaket mit dem Grundcode 0X8C oder 0X87 und schließen Sie die Netzwerkverbindung.

4.11.1 Re-Authentifizierung

Hat der Client die Authentifizierungsmethode in der CONNECT-Steuerung bereitgestellt? Paket, es kann jederzeit nach Empfang des CONNACK-Steuerpakets neu authentifizieren. Dies geschieht durch Senden der AUTH Paket mit dem Grundcode 0X19 (Re-Authentifizierung). Der Client authentifiziert den Wert muss Menge auf den gleichen Wert wie die Methode der Authentifizierung, die ursprünglich verwendet wurde, um das Netzwerk zu authentifizieren Verbindung. Der Server erkennt mit dem AUTH-Paket den Grundcode von 0X00 (Erfolg – Neuauthentifizierung komplett) für die vom Client oder dem Server gesendete Re-Authentifizierungsanfrage mit der AUTH Paket, das den Grundcode von 0X18 enthält (Weitere Authentifizierung wird mehr Daten benötigt). Diese Strömung weiter bis die Wieder-Authentifizierung abgeschlossen ist oder sie ausfällt. Fällt die Re-Authentifizierung aus, so wird die MQTT Kunden muss das DISCONNECT-Steuerpaket mit dem entsprechenden Grundcode senden und das Netzwerk schließen Verbindung.

4.12 Handhabungsfehler
4.12.1 Verfälschte Paket- und Protokollfehler

Einige der Fehlerfälle sind die Größe der Implementierung von MQTT-Clients, Fähigkeiten, die Unterstützung und Folgen der ständigen Verarbeitung eines irreführenden Pakets. Wenn der Absender entspricht dieser Identifizierung, es wird nicht Malformed Pakete senden oder Protokollfehler verursachen. Allerdings wenn ein Client sendet MQTT-Steuerpakete vor dem Empfang von CONNACK, kann es einen Protokollfehler verursachen, der haben führte zu einem Missverständnis über Serverfunktionen.

Malformed Pakete und Protokoll Fehler Grundcode sind,

  • 0x81 Malformed Packet
  • 0x82 Protokoll Fehler
  • 0x93 Überschreitung des Höchstgehalts
  • 0x95 Packet zu groß
  • 0x9A Nicht enthalten
  • 0x9B QoS wird nicht unterstützt
  • 0x9E Geteilte Abonnements werden nicht unterstützt
  • 0xA1 Abonnement Identifier werden nicht unterstützt
  • 0xA2 Wildcard Abonnements werden nicht unterstützt

Wenn ein Server einen fehlerhaften Paket- oder Protokollfehler erkennt und einen Grundcode in der Spezifikation muss die Netzwerkverbindung geschlossen werden.

4.12.2 Andere Fehler

Andere Fehler als fehlerhafte Paket- und Protokollfehler können nicht von die Absender, weil der Empfänger von der Kommunikation mit dem Absender ausgeschlossen werden kann. Der empfangende Client oder Server kann einen instabilen Fehler wie einen Mangel an Speicher, der verhindert, dass es erfolgreich Durchführung ein individuelles MQTT-Steuerpaket. Bestätigungspakete mit einem Grundcode von 0X80 oder größer werden PUBACK, PUBREL, PUBCOMP, SUBACK, UNSUBACK, die angibt, dass das empfangene Paket den Fehler erkennt Verwendung Paketkennung.

5. WebSocket als Netzwerktransport nutzen

Die folgenden Bedingungen werden angewandt, wennMQTwird über ein WebSocket Anschluss:

  • MQTT-Steuerpakete müssen in binären Websocket-Datenrahmen übertragen werden. Wenn eine andere Art von Daten Der Empfänger muss die Netzwerkverbindung schließen.
  • Der einzelne Websocket-Datenrahmen kann mehrere oder teilweise MQTT-Steuerpakete enthalten. Der Empfänger darf nicht davon ausgehen, dass die MQTT-Steuerpakete innerhalb der Stegrahmengrenzen ausgerichtet sind.
  • Der Client muss “mqtt” in die Liste der WebSocket Sub-Protokolle hinzufügen, die es bietet
  • WebSocket Unterprotokollname muss vom Server "mqtt" ausgewählt und zurückgezogen werden.

Bauen!

Brauchen Sie Hilfe bei der MQTT-Implementierung?

Verbinden Sie mit unserem Team, um Ihre einzigartigen Anforderungen zu diskutieren und zu erkunden kundenspezifische MQTT-Lösungen, die zu Ihren Projektzielen passen.