Der einfachste Leitfaden für den Einstieg in MQTT

MQTT ist ein leichtgewichtiges Messaging-Protokoll im Publish-Subscribe-Modus, das für IoT-Anwendungen in Netzwerkumgebungen mit geringer Bandbreite und instabilen Netzwerken entwickelt wurde. Es ist weit verbreitet in IoT, mobilem Internet, intelligenter Hardware, Internet of Vehicles, Power Energy und so weiter.

Dieser Artikel zeigt den Lesern anhand von Demonstrationen, wie sie mit dem MQTT-Protokoll beginnen können. Anfänger des IoT und MQTT können diesen Artikel verwenden, um MQTT-bezogene Konzepte einfacher zu verstehen und schnell mit der Entwicklung von MQTT-Diensten und -Anwendungen zu beginnen.

MQTT-Verbindung

Bevor das MQTT-Protokoll zur Kommunikation verwendet wird, muss der Client eine MQTT-Verbindung erstellen, um eine Verbindung zum Broker herzustellen.

MQTT-Client

Jede Anwendung oder jedes Gerät, auf dem die MQTT-Clientbibliothek ausgeführt wird, ist ein MQTT-Client. Beispielsweise ist eine Instant-Messaging-APP, die MQTT verwendet, ein Client, verschiedene Sensoren, die MQTT verwenden, um Daten zu melden, sind ein Client, und verschiedene MQTT-Testtools sind ebenfalls ein Client.

Derzeit gibt es ausgereifte Open-Source-MQTT-Client-Bibliotheken für alle Programmiersprachen. Wir haben ausgewählt beliebte MQTT-Client-SDKs in verschiedenen Programmiersprachen und bereitgestellten Codebeispielen, damit Sie die Verwendung von MQTT-Clients schnell verstehen.

Oder besuchen Sie unsere MQTT-Client-Programmierung Blogserie, um zu lernen, wie man MQTT in PHP, Node.js, Python, Golang, Node.js und anderen Programmiersprachen verwendet.

In dieser Demonstration verwenden wir den von MQTT X bereitgestellten MQTT-Client, der den Browserzugriff unterstützt:[-mqtt-client)MQTTXbietetaucheine[-mqtt-client)MQTTXalsoprovidesaDesktop-Client und ein Kommandozeilen-Tool.

MQTT-Broker

Der MQTT-Broker verarbeitet Client-Verbindungs-, Trennungs-, Abonnement- und Abmeldeanforderungen sowie Routing-Nachrichten. Ein leistungsstarker MQTT-Broker kann massive Verbindungen und einen Millionen-Level-Nachrichtendurchsatz unterstützen und IoT-Dienstanbietern dabei helfen, sich auf das Geschäft zu konzentrieren und schnell eine zuverlässige MQTT-Anwendung zu erstellen.

Entwickler können einen MQTT-Broker über eine private Bereitstellung oder einen vollständig verwalteten Cloud-Service erstellen. Oder nutzen Sie einen kostenlosen öffentlichen Broker zum Testen.

EMQX ist der skalierbarste Open-Source-MQTT-Broker für IoT, IIoT und vernetzte Fahrzeuge. Sie können den folgenden Docker-Befehl ausführen, um EMQX zu installieren.

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx
  • Vollständig verwalteter Cloud-Service

Der vollständig verwaltete Cloud-Dienst ist der einfachste Weg, einen MQTT-Dienst zu starten. Wie unten gezeigt, startet EMQX Cloud in wenigen Minuten und läuft in 17 Regionen über AWS, Google Cloud und Microsoft Azure.

MQTT-Cloud

In dieser Demonstration verwenden wir die öffentlicher MQTT-Broker bereitgestellt von EMQ, erstellt auf der Grundlage der vollständig verwalteten MQTT-Cloud-Dienst – EMQX Cloud. Die Serverinformationen lauten wie folgt.

  • Makler: broker.emqx.io
  • TCP-Port: 1883
  • WebSocket-Port: 8083

Erstellen Sie eine Verbindung

Als nächstes erstellen wir eine MQTT-Verbindung. Gehe zu mit Ihrem Browser und klicken Sie auf die New Connection Schaltfläche in der Mitte der Seite und Sie sehen die folgende Seite.

Erstellen Sie eine MQTT-Verbindung

Die Verbindungsparameter sind wie folgt.

  • Name : Der Name der Verbindung, dieser Parameter ist nicht verfügbar, wenn eine Verbindung mit Code hergestellt wird.

  • Kunden ID : Der Broker verwendet die Client-ID, um den Client zu identifizieren, und jeder Client, der sich mit dem Broker verbindet, muss eine eindeutige Client-ID haben.

  • Gastgeber : Die Serveradresse und das Verbindungsprotokoll. Zu den Protokollen gehören MQTT basierend auf TCP, MQTT basierend auf SSL/TLS, MQTT basierend auf WebSocket und MQTT basierend auf verschlüsseltem WebSocket. Das für die Demo verwendete Online-Tool läuft auf einem Browser, also nur der ws oder wss Protokoll verwendet werden kann.

  • Hafen : MQTT-Broker-Port.

  • Weg : Wird bei der Auswahl benötigt ws oder wss Protokoll, auf das der EMQX standardmäßig eingestellt ist /mqtt.

  • Benutzername Passwort : Das MQTT-Protokoll unterstützt die Benutzername/Passwort-Authentifizierung. Die Aktivierung der Authentifizierung kann illegale Client-Verbindungen wirksam verhindern.

  • Verbindungs ​​Timeout : Wenn die Verbindung innerhalb dieser Zeit fehlschlägt, wird es nicht weiter versucht.

  • Bleib am Leben : Wenn kein Paket gesendet wird, sendet der Client entsprechend der KeepAlive-Periode regelmäßig ein Heartbeat-Paket. Weitere Informationen finden Sie im Blog Wozu dient der MQTT-Keep-Alive-Parameter?

  • Saubere Sitzung

    • „Clean Session“ ist auf „false“ gesetzt, was bedeutet, dass eine dauerhafte Sitzung erstellt wird. Wenn die Verbindung zum Client getrennt wird, behält und speichert die Sitzung weiterhin die Offlinenachricht, bis das Zeitlimit für die Sitzung überschritten wird.

    • Clean Session ist auf true gesetzt, was bedeutet, dass eine neue temporäre Sitzung erstellt wird und die Sitzung automatisch zerstört wird, wenn die Verbindung zum Client getrennt wird.

  • Automatische Wiederverbindung : Wenn Auto Reconnect auf true gesetzt ist, stellt der Client die Verbindung automatisch wieder her, wenn die Verbindung aufgrund schlechter Netzwerkbedingungen getrennt wird.

  • MQTT-Version : 5,0 wird empfohlen. Weitere Einzelheiten zu MQTT 5.0 finden Sie unter MQTT 5.0 erkunden Blog-Reihe.

Wir treten ein Simple Demo in Name und klicken Sie auf die Connect Schaltfläche in der oberen rechten Ecke, um eine MQTT-Verbindung herzustellen. Folgendes zeigt an, dass die Verbindung erfolgreich hergestellt wurde.

MQTT-Verbindung erfolgreich

Sobald die Verbindung erfolgreich ist, kann der Client Nachrichten veröffentlichen. Als Nächstes müssen wir zuerst das Publish-Subscribe-Muster verstehen.

Das Publish-Subscribe-Muster unterscheidet sich vom Client-Server-Muster dadurch, dass es den Client, der Nachrichten sendet (Publisher), von dem Client trennt, der Nachrichten empfängt (Subscriber). Herausgeber und Abonnenten müssen keine direkte Verbindung herstellen, und der MQTT-Server ist für das Routing und die Verteilung aller Nachrichten verantwortlich.

Das folgende Diagramm zeigt den MQTT-Publish/Subscribe-Prozess. Der Temperatursensor verbindet sich als Client mit dem MQTT-Server und veröffentlicht Temperaturdaten zu einem Thema (z. B. Temperature), und der Server empfängt die Nachricht und leitet sie an den abonnierten Client weiter Temperature Thema.

Publish-Subscribe-Muster

Thema

Das MQTT-Protokoll leitet Nachrichten basierend auf Themen weiter. Das Topic unterscheidet die Hierarchie durch Schrägstriche /, ähnlich wie URL-Pfade, zum Beispiel:

chat/room/1

sensor/10/temperature

sensor/+/temperature

Das MQTT-Thema unterstützt den Platzhalter von + und # .

  • +: gibt eine einzelne Ebene von Platzhaltern an, z a/+ passend a/x oder a/y.

  • #: Gibt mehrere Ebenen von Platzhaltern an, z a/# passend a/x, a/b/c/d.

Weitere Einzelheiten zu MQTT-Themen finden Sie im Blog Verstehen von MQTT-Themen und Platzhaltern nach Fall.

Dienstqualität (QoS)

MQTT bietet drei Arten von Quality of Service und garantiert Messaging-Zuverlässigkeit in verschiedenen Netzwerkumgebungen.

  • QoS 0: Die Nachricht wird höchstens einmal zugestellt. Wenn der Client derzeit nicht verfügbar ist, geht diese Meldung verloren.
  • QoS 1: Die Nachricht wird mindestens einmal zugestellt.
  • QoS 2: Die Nachricht wird nur einmal zugestellt.

Weitere Einzelheiten zu MQTT QoS finden Sie im Blog Einführung in MQTT QoS (Quality of Service).

Als nächstes abonnieren wir das Wildcard-Thema sensor/+/temperature in der zuvor erstellten Simple Demo-Verbindung, die die von allen Sensoren gemeldeten Temperaturdaten empfängt.

Klicken Sie wie unten gezeigt auf New Subscription klicken und das Thema eingeben sensor/+/temperature in das Topic-Feld im Pop-up-Feld ein und belassen Sie die Standard-QoS auf 0.

MQTT abonnieren

Sobald das Abonnement erfolgreich war, sehen Sie einen zusätzlichen Datensatz in der Mitte der Abonnementliste.

Das MQTT-Abonnement ist erfolgreich

Veröffentlichen

Als nächstes klicken wir auf die + Schaltfläche im linken Menü, um zwei Verbindungen zu erstellen, Sensor 1 und Sensor 2 bzw. zwei Temperatursensoren zu simulieren.

Erstellen Sie MQTT-Verbindungen

Sobald die Verbindung hergestellt ist, sehen Sie drei Verbindungen und die Online-Statuspunkte links neben den Verbindungen sind alle grün.

MQTT-Verbindung erfolgreich erstellt

Wähle aus Sensor 1 Verbindung, geben Sie das Veröffentlichungsthema ein sensor/1/temperature Geben Sie unten links auf der Seite die folgende Nachricht im JSON-Format in das Nachrichtenfeld ein und klicken Sie unten rechts auf die Schaltfläche „Veröffentlichen“, um die Nachricht zu senden.

{
  "msg": "17.2"
}

Veröffentlichen Sie MQTT-Nachrichten

Die Nachricht wird wie folgt erfolgreich gesendet.

Die MQTT-Nachricht wurde erfolgreich gesendet

Veröffentlichen Sie mit den gleichen Schritten die folgende JSON-Nachricht in der sensor/2/temperature Thema in der Verbindung Sensor 2.

{
  "msg": "18.2"
}

Sie sehen zwei neue Nachrichten für die Simple Demo-Verbindung.

MQTT-Benachrichtigung

Klicken Sie auf die einfache Demo-Verbindung und Sie sehen zwei Nachrichten, die von den beiden Sensoren gesendet werden.

MQTT-Nachrichten

Demonstration der MQTT-Funktionen

Beibehaltene Nachricht

Wenn der MQTT-Client eine Nachricht an den Server veröffentlicht, kann das Flag Retained Message gesetzt werden. Die gespeicherte Nachricht befindet sich auf dem Nachrichtenserver, und nachfolgende Abonnenten können die Nachricht weiterhin erhalten, wenn sie das Thema abonnieren.

Wie unten gezeigt, senden wir zwei Nachrichten an die retained_message Thema in der Sensor 1 Verbindung mit dem Retain Option geprüft.

MQTT Retained Message

Dann abonnieren wir die retained_message Thema in der Simple Demo-Verbindung. Nachdem das Abonnement erfolgreich war, wird die zweite von Sensor 1 gesendete gespeicherte Nachricht empfangen, was zeigt, dass der Server nur die letzte gespeicherte Nachricht für ein Thema behält.

MQTT Retained Message

Saubere Sitzung

Im Allgemeinen kann ein MQTT-Client nur Nachrichten empfangen, die von anderen Clients veröffentlicht wurden, wenn er online ist. Wenn der Client offline und dann online ist, erhält er während des Offlinezeitraums keine Nachrichten.

Wenn sich der Client jedoch mit auf „false“ gesetzter „Clean Session“ verbindet und mit derselben Client-ID wieder online geht, behält der Nachrichtenserver eine bestimmte Menge an Offline-Nachrichten für den Client und sendet sie an den Client, wenn er wieder online ist.

Der für diese Demonstration verwendete öffentliche MQTT-Server ist so eingestellt, dass er Offline-Nachrichten 5 Minuten lang aufbewahrt, und die maximale Anzahl von Nachrichten beträgt 1000 (keine QoS 0-Nachrichten).

Als Nächstes erstellen wir eine MQTT 3.1.1-Verbindung und demonstrieren die saubere Sitzung mit QoS 1.

MQTT 5 verwendet Clean Start und Session Expiry Interval, um Clean Session zu verbessern. Einzelheiten entnehmen Sie bitte dem Blog Intervall für sauberen Start und Sitzungsablauf.

Erstellen Sie eine Verbindung mit dem Namen MQTT V3setzen Sie Clean Session auf false und wählen Sie MQTT Version 3.1.1.

MQTT Clean-Sitzung

Etwas abonnieren clean_session_false Thema nach erfolgreicher Verbindung und setzen Sie QoS auf 1.

MQTT abonnieren

Klicken Sie nach dem erfolgreichen Abonnement auf die Schaltfläche Trennen in der oberen rechten Ecke.

Trennen Sie die MQTT-Verbindung

Erstellen Sie als Nächstes eine Verbindung mit dem Namen MQTT_V3_Publish, und die MQTT-Version ist ebenfalls auf 3.1.1 eingestellt. Veröffentlichen Sie nach erfolgreicher Verbindung drei Nachrichten an die clean_session_false Thema.

Veröffentlichen Sie MQTT-Nachrichten

Wählen Sie dann die MQTT_V3-Verbindung aus, klicken Sie auf die Schaltfläche „Verbinden“, um eine Verbindung zum Server herzustellen, und Sie erhalten drei Offline-Nachrichten.

MQTT-Nachrichten

Letzter Wille

Wenn der MQTT-Client eine CONNECT-Anforderung an den Server stellt, kann er festlegen, ob das Flag von Will Message sowie das Thema und die Nutzlast gesendet werden sollen.

Wenn der MQTT-Client ungewöhnlich offline ist (die DISCONNECT-Nachricht wird nicht an den Server gesendet, bevor der Client die Verbindung trennt), veröffentlicht der MQTT-Server eine Willensnachricht.

Weitere Einzelheiten zu MQTT Last Will finden Sie im Blog Verwendung von MQTT Will Message.

Wie folgt erstellen wir eine Verbindung mit dem Namen Last Will.

  • Um den Effekt schnell zu sehen, setzen wir Keep Alive auf 5 Sekunden.
  • Stellen Sie das Thema „Letzter Wille“ auf ein last_will.
  • Stellen Sie Last-Will QoS auf ein 1.
  • Stellen Sie Last-Will Retain auf ein true.
  • Stellen Sie Last-Will Payload auf ein offline.

MQTT letzter Wille

Nachdem die Verbindung erfolgreich hergestellt wurde, trennen wir das Computernetzwerk für mehr als 5 Sekunden (Simulation einer abnormalen Client-Trennung) und schalten das Netzwerk dann wieder ein.

Starten Sie dann die Simple Demo-Verbindung und abonnieren Sie die last_will Thema erhalten Sie die von der eingestellte Nachricht Last Will Verbindung.

MQTT letzter Wille

An dieser Stelle haben wir die Erklärung und Demonstration der grundlegenden Konzepte von MQTT und seines Verwendungsprozesses abgeschlossen, damit die Leser sich an der Verwendung des MQTT-Protokolls auf der Grundlage dessen versuchen können, was sie in diesem Artikel gelernt haben.

Als nächstes können die Leser die MQTT-Client-Programmierung Blogserie, die von EMQ bereitgestellt wird, um zu lernen, wie man MQTT in Java, Python, PHP, Node.js und anderen Programmiersprachen verwendet. Beginnen Sie mit der Entwicklung von MQTT-Anwendungen und -Diensten und erkunden Sie fortgeschrittenere Anwendungen von MQTT.

Ursprünglich erschienen bei

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *