Das «Message Queue Telemetry Transport Protocol»

Smartwatches, Smartphones, Smart Homes – Die Welt um uns herum wird immer intelligenter und vernetzter. Das Buzzword „Internet of Things“, kurz IOT, stellt dabei den Überbegriff dieser Technologieentwicklung dar. Die Kommunikation unter den Devices selbst sollte dabei möglichst resourcenschonend, sicher, latenzfrei und zuverlässig ablaufen. Ein Protokoll, welches alle diese Punkte erfüllt und damit die Grundlage für IOT bildet, stellt dieses Paper vor. Das Protokoll ist bekannt unter dem Kürzel MQTT.

Die Ursprünge von MQTT

MQTT wurde 1999 von Dr Andy Stanford- Clark von IBM und Arlen Nipper von Arcom entwickelt um eine Öl Pipeline in der Wüste zu überwachen [1]. Die Herausforderung lag dabei darin, die Sensordaten wie Gasdruck und Temperatur möglichst in Echtzeit, ohne Datenverlust und sicher mit geringer Bandbreit über Satelitenkommunikation zu übertragen.

Was soll übertragen werden?

MQTT steht für Message Queue Telemetry Transport Protocol. Wie der Name schon impliziert, war die Intention bei der Entwicklung des Protokolls die Übertragung von Telemetriedaten. Telemetrie bedeutet die Übertragung von Daten, z.B. Sensormessdaten, zu einer bestimmten Instanz, z.B. einem Server, welche dort dann gesammelt und gegebenenfalls verarbeitet werden [2]. Es können mittels MQTT jedoch nicht nur Messdaten übertragen werden, sondern jegliche Form von textbasierten Formaten wie z.B. JSON oder reiner Text.

Anwendungsbereiche

Die Anwendungsmöglichkeiten von MQTT sind auf Grund seines Funktionsprinzips mannigfaltig. Da es keine genauen Vorgaben darüber gibt was übertragen wird, lässt sich für jede Applikation eine eigene Befehlsstruktur entwickeln. MQTT dient hierbei nur dem reinen Übertragen von Anweisungen, Steuerdaten, ect.. Wie die Befehle jeweils von den Clients ausgewertet werden, oder was durch den Erhalt der Daten in Gang gesetzt wird, ist nicht vorgeschrieben. Facebook verwendet z.B. MQTT für die Übertragung der Nachrichten im Facebook-Messenger [3]. Dadurch wird garantiert, dass die Nachrichten schnell und zuverlässig übertragen werden.

Quelle: https://blog.doubleslash.de/mqtt-fuer-dummies/

Das Grundprinzip

Bei MQTT unterteilt man grundlegend in Broker und Client. Der Broker stellt dabei das zentrale Steuerorgan und das Herzstück von MQTT dar. Hier laufen alle Informationen der Clients zusammen und werden entsprechend verteilt. Im Falle eines SmartHomes kann ein solcher MQTT-Broker z.B. ein RasperryPi, ein kleiner Minicomputer, sein. Ein Client verbindet sich mittels eines Handshakes mit dem Broker. Anschließend kann er Topics abonnieren oder in Topics publishen. Man kann sich dies Vorstellen wie einen Chatroom. Jeder Topic ist ein anderer Chatraum. Innerhalb dieses Chatraumes können Nachrichten verschickt und gelesen werden.

Topics

Topics werden in der Bedeutungsebene nach unten durch „/“ abgetrennt. Ein Topic kann wie folgt aussehen: home/kitchen/humidity

In diese Topic kann sich ein Client nun subscriben („abonnieren“) oder etwas in das Topic publishen („veröffentlichen“). Der Inhalt der Nachricht kann entweder einfacher Text sein, oder auch formatierter Text wie beispielsweise im Format JSON.

Es kann auch in mehrere Topics gleichzeitig gepublished werden, bzw. können mehrere Topics gleichzeitig abonniert werden. Dies geschieht mittels dem Einsatz verschiedener Zeichen: home/kitchen/#

Hier werden durch die Verwendung des Hashtag Symbols alle in der Hierarchie unter „kitchen“ liegenden Topics abonniert: home/+/humidity

In diesem Beispiel werden alle „humidity“ Sensoren abonniert, jedoch egal in welchem Raum diese sich befinden. Das Pluszeichen dient hier als Platzhalter für die oberen Kategorien. Sollen alle Topics abonniert werden, so geschieht dies durch die ausschließliche Verwendung des Hashtagzeichens.

Security?

Eine große Frage bei der gesamten Thematik Internet of Things, stellt sich im Bereich Sicherheit. Welche Möglichkeiten gibt es über MQTT die Daten sicher zu transportieren?

Generell lässt MQTT die Möglichkeit offen die Daten gar nicht zu verschlüsseln und direkt zu übertragen. Dies verbraucht die geringste Bandbreite, Daten können dann jedoch auch sehr einfach manipuliert und abgehört werden. Eine recht einfach zu implementierende Sicherheit, welche MQTT von Haus aus unterstützt, ist die Verwendung einer Authentifizierung mittels Benutzernamen und Passwort. Darüber hinaus gibt es die Möglichkeit durch verwenden von Filtern beim Broker bereits nur bestimmte Clients abonnieren und publishen zu lassen. So lässt sich mittels einer IP-Liste oder / und Client-Namesliste eine solche Einschränkung vornehmen. Einen anderen Ansatz verfolgt die Verschlüsselung mittels TLS (auch umgangssprachlich bekannt unter SSL). Hierbei tauschen Client und Broker untereinander Schlüssel aus und verschlüsseln so sicher den Übertragungsweg der MQQT Daten. Dieses Verfahren findet z.B. auch beim HTTPs Verfahren statt [4].

Implementierung

Für MQQT stehen eine Reihe von bestehenden Bibliotheken für das einfache Einbinden in Programmen und Mikrocontrollern unter anderem in folgenden Programmiersprachen zur Verfügung [5]:

  • C/C++
  • C#
  • Go
  • Java
  • Javascript
  • Lua
  • PHP
  • Objective-C
  • Ruby

Anwendungsbeispiel

Um sich die Funktionsweise des Protokolls besser veranschaulichen zu können, machen wir das Ganze an einem konkreten Beispiel fest: Die Firma FROSTA&CO ist im gewerblichen Transport von frischen Fischwaren von der Ostsee nach Stuttgart zuständig. Beim Transportweg muss stets gewährleistet sein, dass die gesetzliche Kühlkette eingehalten wird und die Temperatur im KühlLKW nicht unter eine Temperatur von 4°Celsius sinkt, da sonst der frische Fisch verderben könnte. Um einen Nachweis über die reguläre Einhaltung der Kühlkette zu haben und um beim  überschreiten der Temperatur sofort informiert zu werden, hat sich der Chef der Firma, Herr Bohninger, für ein System entschieden, dass zur Übertragung der Daten MQTT verwendet. Der LKW ist mit einem Mikrocontroller ausgestattet, welcher eine GPS Modul, Temperatur- und Feuchtigkeitssensor, sowie eine GSM Modul enthält. Die Stromversorgung des Gerätes geschieht über die Autobatterie des LKWs.

Alle fünf Minuten misst der Mikrocontroller die aktuelle Temperatur sowie Luftfeuchtigkeit im Anhänger und ermittelt die GPS Position des Fahrzeuges. Diese Werte werden dann über eine sichere Verschlüsselung mittels TLS und einer Benutzer und Passwort Authentifizierung über das GSM Mobilfunknetzwerk an den Server (Broker) der FROSTA&CO Firma übertragen. Dort werden die Informationen in folgende Topics gepublished:

  • Temperatur: vehicle/ST_HA_36111/temp
  • Luftfeuchtigkeit: vehicle/ST_HA_36111/humidity
  • GPS Position: vehicle/ST_HA36111/ gps_position

Diese Topics werden zum einen von der Fahrerzuteilungssoftware der Firma abonniert, damit die Mitarbeiter stets darüber informiert sind wo sich welches Fahrzeug befindet und ob die Kühlkette eingehalten wird, als auch von einer App auf dem Smartphone des Chefs. Dieser hat so stets den Überblick über alle Vorgänge in der Firma und wird im Falle einer Unterbrechung der Kühlkette sofort informiert und kann Handlungsanweisungen geben.

Es könnte auch die gesamte Kommunikation mit dem Fahrer, z.B. mit Informationen zum nächsten Standort und Abholzeiten, über MQTT in Verbindung mit Smartphone und Computerapplikationen abgewickelt werden.

Fazit

Produkte wie Amazons Echo Plus, Apples HomeKit und Googles HomePod, leiten die Zukunft in die neue schöne Welt der Smarten Homes und vernetzten Geräte ein. Dabei kommunizieren die Geräte jedoch noch über unterschiedlichste Schnittstellen, sei es Wlan, Zigbee oder Z-Wave. Jeder Hersteller versucht sein eigenes System auf dem Mark zu bringen um den Kunden an seinen Produktkatalog binden zu können. MQTT würde hier ein perfektes Protokoll darstellen um über verschiedenste Übertragungswege die Geräte miteinander sprechen zu lassen. Allerdings wird vermutlich noch Wunschdenken bleiben, da sich kein Hersteller gerne in seine Karten schauen lässt und lieber an eigenen Lösungen arbeitet.

 

Quellen:
[1] http://mqtt.org/faq
[2] http://image.informatik.htw-aalen.de/Thierauf/Seminar/Ausarbeitungen-15SS/MQTT.pdf
[3] https://www.ibm.com/developerworks/community/blogs/mobileblog/entry/why_facebook_is_using_mqtt_on_mobile?lang=en
[4] https://www.predic8.de/mqtt.htm
[5] https://github.com/topics/mqtt-client
[6] https://github.com/knolleary/pubsubclient