MQTT: Kommunikation zwischen MELARECON und SolidBlue

MQTT: Kommunikation zwischen MELARECON und SolidBlue

mqtt-logo

Zur Kommunikation zwischen dem Gerät (MELARECON) des Kunden und der Cloud (SolidBlue) wird das das Netzwerkprotokoll MQTT (Message Queuing Telemetry Transport) verwendet.

Funktionsprinzip von Mqtt
Funktionsprinzip von MQTT

Was ist Mqtt?

Mqtt ist ein offenes Protokoll für die Kommunikation zwischen Maschinen (M2M) vorgesehen ist und spielt eine wichtige Rolle beim Internet der Dinge (IoT, Internet of Things). Es handelt sich um ein sehr schlankes Nachrichtenprotokoll, welches eine einfache Möglichkeit bietet Nachrichten und Informationen zu übermitteln. Dadurch eignet es sich hervorragend für die Embedded Entwicklung.

Mqtt basiert auf einem Publish-Subscribe Kommunikationsmuster mit einem Message-Broker, der als zentraler Verteiler dieser Nachrichten dient, und den Clients (Geräten), die Nachrichten schicken (publish) oder empfangen (subscribe). Will ein Client jetzt Informationen versenden, kann er diese auf sogenannten Topics veröffentlichen. Die Nachricht an den Broker enthält dann das Topic und die entsprechende Information. Diese Topics können dann von anderen Clients abonniert (subscriben) werden. die Clients werden nun vom Broker beim Eintreffen neuer Nachrichten auf den abonnierten Topics benachrichtigt, so dass eine sehr effiziente Kommunikation gesichert ist.

Topics

MQTT Topics erlauben es den Clients Informationen zu adressieren und zu teilen. Topics sind ähnlich einer Ordnerstruktur aufgebaut und verwenden z.B. den Schrägstrich (/) als Trennzeichen. Bei Topics ist Groß- und Kleinschreibung zu beachten, nutzen UTF-8 und müssen mindestens aus einem Zeichen bestehen.

Alle Topics werden erst beim subscriben oder publishen erstellt und sind nicht permanent. Durch das setzen eines sogenannten retained-Flags in der zu sendenden Nachricht, speichert der Broker die Nachricht und hält diese auch Clients vor, die erst später diese Topic abonnieren.

Ein Client kann ein individuelles Topic abonnieren oder auch viele verschieden gleichzeitig. Beim subscriben können zwei „Wildcard“-Zeichen benutzt werden. # als Multi-Level Wildcard und + als Single-Level Wildcard. Wildcards können nicht im Namen eines Topics verwendet werden.

Beispiele für Topics

  • /Haus
  • /Haus/Raum1/Alarm
  • /Haus/Raum2/Licht
  • /Haus/Raum2/Temperatur
  • /Haus/Raum3/Licht

Benutzen von Wildcards

Abonnieren von dem Topic /Haus/Raum2/# beinhaltet z.B. hier /Haus/Raum2/Licht und /Haus/Raum2/Temperatur. Und das Abonnieren von /Haus/+/Licht deckt die Topics /Haus/Raum2/Licht und /Haus/Raum3/Licht ab.

Ein Client kann beim Publishen nur ein individuelles Topic ansprechen. Das Nutzen von Wildcards ist hier nicht erlaubt.

Qualitätskontrolle (Quality of Service)

Es gibt 3 Quality of Service (QoS) Level in MQTT. Die drei Level sind 0, 1 und 2. Bei Level 0 wird keine Übertragung garantiert, bei Level 1 wird garantiert, dass die Nachricht mindestens einmal ankommt und bei Level 2 genau einmal ankommt. Der Unterschied zwischen 1 und 2 besteht darin, dass bei Level 1 es passieren kann, dass die Nachricht öfter beim Client ankommt. Je höher das Level, desto höher die benötigte Bandbreite.

Sicherheit

Die Kommunikation über einen MQTT-Broker ist nur so sicher, wie der Betreiber den Broker konfiguriert hat. Grundsätzlich kann ein komplett offener Broker ohne Verschlüsselung und Authentifizierung bereitgestellt werden. Hier gibt es drei Wege eine sehr hohe Sicherheit der Kommunikation zu gewährleisten. Zum einen kann eine Authentifizierung mit Usernamen und Passwort vom Client gefordert werden, des weiteren kann die Kommunikation mit TLS/SSL verschlüsselt werden. Weiterhin kann der Broker so konfiguriert werden, dass Clients nur bestimmte Topics publishen und/oder subscriben dürfen. D.h. nicht alle angemeldeten Clients können auch alle Topics subscriben, sondern nur die Topics, die ihnen zugeordnet sind.