MQTT - Message Queue Telemetry Transport Protocol

Die Seite wird erstellt Veronika Strauß
 
WEITER LESEN
MQTT - Message Queue Telemetry Transport Protocol
MQTT - Message Queue Telemetry
        Transport Protocol

               Sommersemester 2015
                zur Vorlesung 'Seminar'

                    Bearbeitet von:
                 Richard Okuniewicz
               (Matrikelnummer: 44521)
                   Johannes Seibold
               (Matrikelnummer: 48989)
                       Betreuer:
               Prof. Dr. Winfried Bantel

    Hochschule für Technik und Wirtschaft Aalen
        Fakultät Elektronik und Informatik
              Studiengang Informatik
MQTT - Message Queue Telemetry Transport Protocol
Inhaltsverzeichnis

1   Einleitung                                                                                                               3
    1.1   Denition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                        3
    1.2   Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                       3
    1.3   Inhalte und Ziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                        4

2   Grundlagen                                                                                                               5
    2.1   Was sind Telemetrie-Daten ? . . . . . . . . . . . . . . . .                           .   .   .   .   .   .   .    5
    2.2   Machine-to-Machine-Kommunikation (M2M) . . . . . . .                                  .   .   .   .   .   .   .    5
    2.3   Kommunikationsarchitekturen und -muster im Vergleich                                  .   .   .   .   .   .   .    6
          2.3.1 Client/Server . . . . . . . . . . . . . . . . . . . .                           .   .   .   .   .   .   .    6
          2.3.2 Request/Response . . . . . . . . . . . . . . . . .                              .   .   .   .   .   .   .    8
          2.3.3 Publish/Subscribe . . . . . . . . . . . . . . . . .                             .   .   .   .   .   .   .    9

3   Funktionsweise MQTT                                                                                                     11
    3.1   Einsatzbereiche . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
    3.2   Beschreibung des Standards . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
          3.2.1 Terminologie . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
          3.2.2 MQTT Kontroll Paket Format          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
          3.2.3 Sicherheit . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
    3.3   Einordnung des MQTT-Protokolls . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
    3.4   MQTT for Sensor Networks . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
    3.5   Vergleich mit anderen Protokollen . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19

4   Installation                                                                                                            20
    4.1   Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
    4.2   Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
    4.3   Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5   Evaluierung                                                                                                             28
6   Fazit und Ausblick                                                                                                      29
Abbildungsverzeichnis                                                                                                       30
Tabellenverzeichnis                                                                                                         31

                                             1
MQTT - Message Queue Telemetry Transport Protocol
Listing-Verzeichnis        32
Literaturverzeichnis       33

                       2
MQTT - Message Queue Telemetry Transport Protocol
1 Einleitung
1.1 Denition
Message Queue Telemetry Transport (MQTT) wurde 1999 von Andy Stanford-Clark
von IBM und Arlen Nipper von Arcom (jetzt Eurotech) entwickelt und ist ein leicht-
gewichtiges Nachrichten-Protokoll, das für die Übertragung von Telemetrie-Daten
vor allem in Gebieten mit begrenzter Netzwerkkapazität verwendet wird. [1] Da es
sich hierbei um ein Machine-to-Machine-Protokoll handelt, ist es ebenfalls auch ein
wichtiger Bestandteil des Internets der Dinge.

1.2 Motivation
Das Internet bietet viele Möglichkeiten sich auszutauschen und miteinander zu kom-
munizieren. Nun stelle man sich vor, neben Personen könnten dies auch Gegenstände
in vollem Umfang nutzen. Das Internet der Dinge (englisch: Internet of Things, kurz:
IoT) ist eines der aktuellsten und wichtigsten Themen der IT. Wie der Name schon
andeutet, beschreibt es das Verbinden von Dingen oder genauer, das Erschaen von
intelligenten Geräten, die selbstständig und unabhängig vom äuÿeren Einwirken
durch den Menschen untereinander kommunizieren und handeln. Hier kann es sich
auch um einfache und alltägliche Gegenstände handeln. Der Unterschied besteht
darin, dass diese beispielsweise mit einem eingebetteten System ausgerüstet sind,
um deren Verhalten und Kommunikation zu steuern. Seien es Kühlschränke, die
eigenständig Milch und Butter nachkaufen oder Waschmaschinen, die genau dann
waschen, wenn der Strom gerade günstig ist; den Anwendungsbereichen sind keine
Grenzen gesetzt. Sinn und Zweck des IoT bestehen darin, dem Menschen in seinem
täglichen Umfeld weitestgehend unmerklich zu unterstützen. Ferner werden dadurch
Prozesse wesentlich beschleunigt und zusätzlich Kosten eingespart. Ein aktuelles und
praxisnahes Beispiel, das vermutlich jeder einmal genutzt hat, ist eine von Logis-
tikunternehmen zur Verfügung gestellte Online-Paketverfolgung. Dabei kann man
über eine Webseite den aktuellen Status oder den Standort der Lieferung abrufen.
Die Informationen werden durch das Scannen des Strichcodes automatisch überge-
ben. Übertragen auf das vorhergehende Argument lässt sich nun feststellen, dass die
Nachfrage des Empfängers nach dem Aktuellen Stand der Lieferung über das Telefon
oder sonstige Mittel nicht mehr notwendig ist und somit auch Kosten wegfallen.
Trotz der Relevanz des Themas bendet sich das Internet der Dinge immer noch im
Anfangsstadium. Stand 2014 waren ca. 3,9 Milliarden Geräte miteinander Verbun-
den. Laut dem Forschungsinstitut Gartner wird jedoch vermutet, dass dies bis 2020

                                         3
MQTT - Message Queue Telemetry Transport Protocol
mit schätzungsweise über 25 Milliarden Geräte der Fall sein wird. [2] Das liegt ins-
besondere daran, dass eine Vernetzung von Gegenständen erst mit der steigenden
Leistung bzw. Komplexität der Technologie umfassend möglich wird. Schlussend-
lich könnte man zusammenfassen, dass obwohl das IoT an sich noch relativ jung
ist, es bereits schon in naher Zukunft einen beträchtlichen Stellenwert in unserer
Gesellschaft haben wird.

1.3 Inhalte und Ziele
Im Rahmen dieser Seminararbeit wird der Paketaufbau und die Funktionsweise des
Nachrichten-Protokolls MQTT näher beschrieben. Dabei ist es notwendig auch auf
Grundbegrie, die für das Verständnis dieser Thematik notwendig sind, einzuge-
hen. Über das Beispiel einer selbst erstellten praktischen Anwendung werden die
Einsatzmöglichkeiten des Protokolls veranschaulicht. Unter anderem wird dabei auf
folgende Punkte näher eingegangen:

   • Was ist MQTT und wie funktioniert es ?

   • Zusammenspiel vom Internet der Dinge und Machine-to-Machine Kommuni-
     kation mit MQTT ?

   • Denition Telemetrie und Einsatzbereiche.

   • Einsatzmöglichkeiten vom MQTT.

   • Nach welchem Prinzip funkioniert MQTT und welche andere Kommunikati-
     onsmuster gibt es ?

   • Kann ich MQTT selbst implementieren ?

   • Welche Vorteile entstehen durch den Einsatz von MQTT im Vergleich zur
     bisherigen Kommunikation ?

                                         4
MQTT - Message Queue Telemetry Transport Protocol
2 Grundlagen
2.1 Was sind Telemetrie-Daten ?
Telemetrie beschreibt den Prozess des Übertragens von Messdaten von einem Sensor
zu einer bestimmten Stelle, an der diese gesammelt und gegebenenfalls auch ausge-
wertet werden. Diese Messdaten bezeichnet man unter anderem auch als Telemetrie-
Daten. Sie werden von Sensoren wie beispielsweise einem Temperatursensor erhoben.
Auch ein Mikrofon ist ein Sensor, der den Schallwechseldruck aufzeichnet. Beispiels-
weise wird in folgenden Bereichen Telemetrie eingesetzt:

   • Datenübertragung in der Raumfahrt

   • Aufzeichnen des Verhaltens von Tieren

   • Überwachen von Patienten in der Medizin

   • Datenerhebung in der Meteorologie

   • Fahrzeugüberwachung im Motorsport

Da diese Daten ausschlieÿlich aus Messwerten bestehen, sind sie insbesondere auch
relativ klein. Aus diesem Grund gibt es Protokolle, die sich auf die Übertragung
der kleinen Daten spezialisiert haben, um auch über ein schlecht ausgebautes Netz
eektiv und zuverlässig kommunizieren zu können.

2.2 Machine-to-Machine-Kommunikation (M2M)
Machine-to-Machine-Kommunikation steht für den automatischen Datenuss zwi-
schen zwei Geräten und ist somit die Grundlage des Internets der Dinge. Um welche
Endgeräte es sich handelt oder wie eine Verbindung aufgebaut wird ist nicht vorge-
schrieben. Sie kommt in den unterschiedlichsten Gebieten unserer Gesellschaft zum
Einsatz und ndet vor allem vermehrt Anwendung in der Industrie. Ein neuer Be-
gri, der in diesem Zusammenhang in Deutschland immer öfter genannt wird, ist
Industrie 4.0. Dabei wird auf die kommende vierte industrielle Revolution verwie-
sen, in der die digitale Vernetzung und Automatisierung der Produktion durch das
Internet der Dinge im Mittelpunkt steht. [3] Maschinen sollen selbstständig mit-
einander kommunizieren und handeln. Das bekannteste Netzwerkprotokoll für die
Abwicklung einer M2M-Verbindung im Hinblick auf Telemetrie ist MQTT.

                                         5
MQTT - Message Queue Telemetry Transport Protocol
2.3 Kommunikationsarchitekturen und -muster im
    Vergleich
Um ein Verständnis dafür zu bekommen, wie Computergesteuerte Geräte in der heu-
tigen, digital vernetzten Welt miteinander kommunizieren werden hier die Grundla-
gen geschaen.

2.3.1 Client/Server

Es gibt unterschiedliche Arten wie ein Nachrichtenaustausch oder Dienstleistungen
zwischen Geräten in Netzwerken realisiert werden können. Eine davon ist die Client-
Server-Architektur, die das Standardkonzept im Internet, in Unternehmensnetzwer-
ken sowie im Privatbereich ist. Beispielsweise werden folgende Protokolle oder auch
Anwendungen genannt ,die diese Architektur nutzen:

   • Web

   • FTP

   • Telnet

   • E-Mail

   •   MQTT
Wir denieren einen Host, den sogenannten Server, der Daten und Dienste zur Ver-
fügung stellt. Hierbei könnte es sich um einen File- oder Webserver handeln. Dieser
nimmt Anfragen von weiteren Hosts entgegen, den sogenannten Clients, die bspw.
Daten von einem File- oder HTML-Code von einem Webserver anfordern. Als Bei-
spiel nehmen wir das Web als Anwendung, indem ein dauerhaft erreichbarer Webser-
ver die Anforderungen der Browser abarbeitet, die auf den Client-Rechnern laufen.
Der Client tätigt eine Anfrage an den Server für ein bestimmtes Objekt. Darauf-
hin antwortet der Webserver dem Client und schickt ihm das geforderte Objekt
zu. Hier ist schon das Request/Response-Verfahren zu erkennen, das im nächsten
Punkt ausführlicher erklärt wird. In der Client-Server-Architektur kommunizieren
die Clients nicht miteinander, genauso wenig die Server. Die Kommunikation ndet
nur zwischen Client und Server in eine Richtung statt. [4] Diese Architektur ist in
Abbildung 2.1 dargestellt.

                                        6
Abbildung 2.1:   Client-Server-Architektur

Eine weitere Architektur, wäre die Peer-to-Peer (P2P) Architektur. Auf diese wird
aber nur kurz eingegangen, da sie im wesentlichen nichts mit MQTT zutun hat und
keine Verwendung ndet. Im Gegensatz zur Client-Server-Architektur können hier
die Hosts direkt miteinander kommunizieren, das heiÿt, dass eine Kommunikation
in beide Richtungen möglich ist. Eine direkte Kommunikation zwischen zwei Hosts,
die nicht ständig miteinander verbunden sind, wird auch als Peer bezeichnet. Bei-
spielsweise werden folgende Protokolle mit dieser Architektur betrieben:

                                       7
• Dateiaustausch (BitTorrent)

   • Downloadbeschleunigung (Xunlei)

   • Internettelefonie (Skype)

   • IPTV

Siehe [5]

2.3.2 Request/Response

Nachdem in Punkt 2.3.1 die Architekturen vorgestellt wurden, beschäftigen sich die
nächsten zwei Unterpunkte mit den Kommunikationsmustern, die für den Austausch
von Nachrichten in Anwendungsprotokollen eingesetzt werden.

Um das Request/Response-Verfahren genauer zu verdeutlichen, verwenden wir an
dieser Stelle folgendes Beispiel:

   • Abwicklung der Kommunikation zwischen Webclient, Webseite und Webserver
     mittels HTTP-Protokoll.

                   Abbildung 2.2:   Request/Response-Verfahren

Wie bereits in Punkt 2.3.1 beschrieben, wird auf einem Webserver, der permanent
online ist, eine Webseite gehostet. Möchte ein Client diese Seite abrufen, so schickt
sein Browser ein HTTP-Request (Anfrage) für die angeforderten Objekte auf dieser
Seite an den Server. Der Server antwortet mit einem HTTP-Response (Antwort),
welche den HTML-Code enthält. Anschlieÿend interpretiert der Webbrowser den
HTML-Code und zeigt die Seite an. [6]

                                         8
2.3.3 Publish/Subscribe

Wie beim Request/Response-Verfahren nutzen die Clients einen zentralen Server,
den sogenannten Broker (Verteiler) für die Kommunikation. Untereinander kennen
sich die Clients nicht. Im Gegensatz zu HTTP muss man keinen Request tätigen
und auf das zugehörige Response warten, um eine Nachricht oder Objekte zu erhal-
ten. MQTT nutzt einen ereignisgesteuerten Ansatz, der mit den unten stehenden
Komponenten realisiert wird. [7]

Aufgaben des Brokers:
Wie bereits erwähnt, ist der Broker für die Verteilung oder auch Zuordnung der
Nachrichten zuständig. Er sorgt dafür, dass die von einem Client (Publisher) gesen-
deten Nachrichten, alle interessierten Clients (Subscriber) erreicht. [7]

Aufgaben des Subscribers:
Um überhaupt irgendeine Art von Nachrichten erhalten zu können, im Kontext
MQTT handelt es sich in der Regel um Sensordaten, muss sich der Client mit dem
Broker verbinden und ihm mitteilen, für welche Topics (Themen) er benachrichtigt
werden möchte. Dieser Vorgang wird als Subscribe (abonnieren oder vorbestellen)
bezeichnet. Der Subscriber könnte beispielsweise ein Nutzer sein, der auf seinem
Notebook die Temperaturdaten des Serverraums kontrollieren möchte. In Kapitel 4
(Installation) wird ein konkretes Beispiel gezeigt, wie die Nachrichten für den Client
angezeigt werden könnten. [7]

Aufgaben des Publishers:
Der Publisher erfasst Sensordaten und schickt sie anschlieÿend an den Broker. Zu-
sätzlich muss noch mitangegeben werden an welches Topic diese Nachricht geschickt
werden soll. Ein Publisher könnte beispielsweise ein Raspberry Pi mit angeschlosse-
nem Temperatur-, Feuchtigkeits-, oder Lichtsensor sein. [7]

An dieser Stelle ist schon ein wesentlicher Vorteil gegenüber HTTP zu erkennen.
Der Client, der Topics abonniert, wird automatisch darüber benachrichtigt, falls
neue Daten auf dem Broker vorliegen. Somit muss keine Anfrage gestartet werden,
um zu erfahren ob neue Daten vorhanden sind. [7]

                                          9
Abbildung 2.3:   Publish/Subscribe-Verfahren

                     10
3 Funktionsweise MQTT
3.1 Einsatzbereiche
Bevor auf die Funktionsweise detaillierter eingegangen wird, werden zunächst einige
Beispiele genannt, wo MQTT Verwendung ndet. Ursprünglich war die Entwick-
lung des leichtgewichtigen Protokolls für die Überwachung von Ölpipelines über das
damals schwach ausgebaute Netz vorgesehen. Mittlerweile erönen sich jedoch viele
weitere Einsatzmöglichkeiten. Zwar ist MQTT noch relativ unbekannt und in sei-
nen Anfangsjahren, was die praktische Nutzung angeht, allerdings gibt es diverse
Projekte und bekannte Beispiele, in denen MQTT erfolgreich eingesetzt wird oder
werden kann:
   • In einem 2007 umgesetzten Projekt von IBM mit dem Namen SiSi wurde
     akustische Sprache in Zeichensprache konvertiert. Die Steuerung des Avatars
     funktioniert hierbei über MQTT. [8]
   • Die Facebook-Messenger-App für Smartphones benutzt für das Abrufen und
     Versenden von Nachrichten MQTT. [9]
   • Im Projekt FlootNet wird MQTT zum Überwachen von Flüssen eingesetzt.
     [8]
   • Könnte als Kontrolle für Administratoren verwendet werden (Bspw.: Überwa-
     chung und Ermittlung der Innenwerte von Servern.
   • M2M: Vernetzung von Maschinen in Produktionen (Maschinen müssten da-
     durch nicht in das Unternehmensnetzwerk oder in ein Subnetz eingebunden
     werden. Nur ein kleines Netzwerk mit Broker, Maschine und Client)

3.2 Beschreibung des Standards
Die aktuelle Version des Protokolls ist 3.1.1. Seit 2013 wird die Standardisierung von
MQTT, bei der Standardisierungsorganisation OASIS (Organisation for the Ad-
vancement of Structured Information Standards) durchgeführt. [10] Bei der
Beschreibung des Standards beschränken wir uns nur auf die wichtigsten Aspekte:
   • Terminologie
   • MQTT Kontrollpaket-Format (Aufbau eines MQTT Datenpakets)
   • Sicherheit

                                         11
3.2.1 Terminologie

Da im Grundlagenkapitel schon einige Begriichkeiten wie Client oder Server be-
schrieben wurden, werden diese in diesem Kapitel nicht erneut aufgeführt.

Network Connection:
Ein Konstrukt, bereitgestellt durch das darunterliegende Transportprotokoll, das
von MQTT genutzt wird:

   • Verbindet Client mit Server.

   • Unterstützt das Senden von angeordneten, verlustfreien Datenströmen von
     Bytes in beide Richtungen.

Siehe [11]

Application Message:
Die tatsächlichen Nutzdaten einer Anwendung, die mittels MQTT über das Netz-
werk verschickt werden. Angekommende Nachrichten sind mit einem QoS level und
einem Topic verknüpft. [11]

Topic Name:
Topics sind frei wählbare Strings und können mit einem Slash '/' aufgebaut und
erweitert werden. Ein Topic Name könnte folgendermaÿen aussehen:
home/CpuTemperature oder home/MemoryUsage . An der Stelle wäre home
das Root-Topic und die darauolgenden die Kind-Topics. Jeder Subscriber kann
frei wählen, welches Topic er abonnieren möchte. Möchte man alle Topics von Root
abonnieren, kann die Wildcard(#) benutzt werden (home/#). Ansonsten muss
das konkrete Kind-Topic mitangegeben werden (home/CpuTemperature). Sind
die Nachrichten des Publishers beim Broker angekommen, schickt er eine Kopie der
Nachrichten an jeden Client, der das zugehörige Topic hat. Bei den Topic-Namen ist
zu beachten, dass zwischen Groÿ- und Kleinschreibung unterschieden wird. [7] und
[11]

Topic Filter:
Ist ein Ausdruck, der in einem Abonnement enthalten ist, um Interessierten Clients
die Topics anzuzeigen. Ein Topic Filter kann Wildcards miteinbeziehen. [11]

Session:
Eine Interaktion zwischen Client und Server. Einige Sitzungen dauern nur so lange
an, wie die Netzwerkverbindungen, andere bauen hintereinander mehrere Netzwerk-
verbindungen zwischen Client und Server auf. [11]

MQTT Control Packet:
Ein Paket mit Informationen, welches über das Netzwerk versendet wird. MQTT de-
niert 14 verschiedene Typen von Kontrollpaketen, von denen eines (das PUBLISH

                                       12
Paket) zum Mitteilen von Nachrichten genutzt wird. [11]

QoS (Quality of Service Levels):
Für die Nachrichtenübermittlung deniert MQTT drei QoS-Levels.

Qos 0 (Höchstens einmal):
Diese Servicequalitätsstufe ist für das Übertragen von Sensordaten geeignet. Es kön-
nen Nachrichtenverluste stattnden. Die Nachricht kommt beim Empfänger höchs-
tens einmal an.

QoS 1 (Mindestens einmal):
Bei dieser Servicequalitätsstufe ist das Ankommen der Nachricht beim Empfänger
sichergestellt. Der Empfänger kann möglicherweise, die Nachricht mehrfach erhalten.

QoS 2 (Genau einmal):
Bei diesem Level wird sichergestellt, dass die Nachricht beim Empfänger genau ein-
mal ankommt. QoS 2 könnte für Geldtransaktionen oder ähnliches mir hoher Prio-
rität verwendet werden, da die Nachrichten nicht mehrfach beim Empfänger an-
kommen und auch nicht verloren gehen. Doppelte Geldtransaktionen könnten fatale
Folgen haben.

Siehe [7]

3.2.2 MQTT Kontroll Paket Format

Unter MQTT werden Kontrollpakete (Control Packets) auch als Datenpakete oder
Pakete bezeichnet. Die Arbeitsweise dieses Protokolls erfolgt durch das Austauschen
einer Folge von Kontrollpaketen in einer denierten Richtung. Die Struktur eines
Paketes besteht aus drei Teilen und ist immer in dieser Reihenfolge aufgebaut. Die
Struktur ist in der Tabelle 3.1 dargestellt.

 Fixed header, in jedem MQTT Kontrollpaket enthalten
 Variable header, in manchen MQTT Kontrollpaketen enthalten
 Payload, in manchen MQTT Kontrollpaketen enthalten

                    Tabelle 3.1:   Aufbau MQTT Kontrollpaket

Siehe [12]

                                        13
Fixed header
Wie bereits erwähnt besitzt jedes Kontrollpaket einen            Fixed header.   Tabelle 3.2
zeigt den Aufbau des Fixed headers.

 Bit          7          6        5         4        3       2        1      0
 byte 1           Typ des Kontrollpakets                           Flags
 byte 2                           Restliche Paketlänge

                             Tabelle 3.2:   Aufbau: Fixed header

Der Fixed header beinhaltet folgende Informationen:
   • Bit sieben bis vier denieren den Nachrichtentyp (siehe Tabelle 3.3). [13]

   • Bit drei bis null repräsentieren Flags. Welche Informationen die Flags beschrei-
     ben, wird auf Seite 15 erklärt.

   • Die Restliche Paketlänge.
Siehe [14]

 Name               Wert Flussrichtung                      Beschreibung
 Reserviert         0           Verboten                    Reserviert
 CONNECT            1           Client zu Server            Client request um mit Server zu verbin-
                                                            den
 CONNACK            2           Server zu Client            Connect acknowledgement
 PUBLISH            3           Client zu Server     oder   Publish Nachricht
                                Server zu Client
 PUBACK             4           Client zu Server     oder   Publish acknowledgement
                                Server zu Client
 PUBREC             5           Client zu Server     oder   Publish received (QoS 2, Teil 1)
                                Server zu Client
 PUBREL             6           Client zu Server     oder   Publish release (QoS 2, Teil 2)
                                Server zu Client
 PUBCOMP            7           Client zu Server     oder   Publish complete (QoS 2, Teil 3)
                                Server zu Client
 SUBSCRIBE          8           Client zu Server            Client subscribe request
 SUBACK             9           Server zu Client            Subscribe acknowledgement
 UNSUBSCRIBE        10          Client zu Server            Unsubscribe request
 UNSUBACK           11          Server zu Client            Unsubscribe acknowledgement
 PINGREQ            12          Client zu Server            PING Request
 PINGRESP           13          Server zu Client            PING Response
 DISCONNECT         14          Client zu Server            Client beendet Verbindung
 Reserviert         15          Verboten                    Reserviert

                     Tabelle 3.3:     MQTT Kontrollpaket-Typen

                                                14
Anhand eines Beispiels soll gezeigt werden wie der Fixed header bei dem Nach-
richtentyp (Control Packet type) PUBLISH aussieht, welcher für die Übertragung
von Nutzdaten zuständig ist. In diesem Beispiel gehen wir davon aus, dass zwischen
Client und Broker mittels den Kontrollpakettypen CONNECT und CONNEC-
TACK eine Verbindung hergestellt wurde.
 Bit                      7       6        5      4       3       2       1       0
 byte 1                    Typ des Kontrollpakets (3)     DUP      QoS level      RETAIN
                                                          ag
                          0       0        1      1       X      X      X         X
 byte 2                                          Restliche Paketlänge

                           Tabelle 3.4:   PUBLISH-Paket

Siehe [15]

DUP ag:
Dieses Flag ist auf 1 gesetzt, wenn Client oder Server versuchen, eine PUBLISH-
Nachricht zurück zu schicken. Für alle Nachrichten mit dem QoS level 0 muss das
DUP ag auf 0 gesetzt sein. [15]

QoS level:
Mit diesem Flag wird die Priorität festgelegt, mit welcher die Nachrichten verschickt
werden sollen. Die QoS levels wurden im Punkt 3.2.1 Terminologie beschrieben.

RETAIN:
Sendet der Client ein PUBLISH-Paket, indem das RETAIN Flag auf 1 gesetzt ist,
muss der Broker die Nachricht und den QoS level speichern, damit es in Zukunft an
Subscriber geschickt werden kann, deren Topic Name mit dem Abonnement über-
einstimmt. [15]

Restliche Paketlänge:
Dieses Byte repräsentiert die verbleibende Länge innerhalb des aktuellen Pakets,
einschlieÿlich dem Variable header und dem Payload. [16]

Variable header:
Der Variable header besteht aus folgenden Feldern in gegebener Reihenfolge: Topic
Name und Paket Identier. [17]

Payload:
Das Payload beinhaltet die Nutzdaten, die via PUBLISH vermittelt werden. Der
Inhalt und das Format sind spezisch. Die Länge des Payloads lässt sich durch eine
Subtraktion von Variable header - Restliche Paketlänge errechnen. [18]

                                          15
3.2.3 Sicherheit

Wie andere Protokolle bietet auch MQTT Sicherheitsfeatures, um die Kommuni-
kation zwischen Client und Server sicherer zu gestalten. Zusätzlich wird unter die-
sem Punkt auch beschrieben, welche bestehenden Sicherheitstechnologien eingesetzt
werden können, um die Vertraulichkeit zwischen den Kommunikationspartnern zu
gewährleisten.

Authentikation der Clients am Server
MQTT stellt einen Authentikationsmechanismus bereit, indem, innerhalb eines
CONNECT-Pakets Felder wie Username und Password enthalten sind. Bei der
Entwicklung einer Anwendung, die MQTT nutzt, kann selbst entschieden werden, ob
dieser bereitgestellte Mechanismus genutzt wird, oder ob auf externe Sicherheitsme-
chanismen, wie bspw.: LDAP oder Betriebssysteminterne Mechanismen, zugegrien
wird.

Diesen Mechanismus zu nutzen reicht allein nicht aus, da beim Verbindungsaufbau
Username und Password in Klartext übermittelt werden. Wird TLS verwendet, sen-
den die Clients SSL-Zertikate an den Server, der authentiziert sie anhand der
gültigen Zertikate.

   • Eine VPN-Verbindung (Virtual Private Network) zwischen Clients und Ser-
     vern schat weitere Vertraulichkeit, indem nur Daten von autorisierten Clients
     empfangen werden.

   • Die Authentikation eines Servers am Client wird ebenfalls durch TLS mit
     dem Einsatz von SSL- Zertikaten realisiert.

Siehe [19]

Autorisierung der Clients am Server
Der Zugri auf Serverressourcen (bspw.: die Topics des Brokers) können durch
falsche Informationen der Clients eingeschränkt werden:

   • Username

   • Client Identier

   • Hostname / IP-Adresse

   • Resultat der Authentizierung

Siehe [20]

                                        16
3.3 Einordnung des MQTT-Protokolls
Um einen besseren Überblick über die Netzwerkkommunikation des MQTT-Protokolls
zu erhalten, wird nachfolgend kurz beschrieben, wie es unter den Netzwerkprotokoll-
Schichten eingeordnet ist. MQTT an sich ist ein Anwendungsprotokoll. Als ein sol-
ches nutzt es ein Protokoll aus der Transportschicht. Da MQTT eine feste Verbin-
dung zwischen den Clients und dem Server über das Internet erfordert, wird das TCP
verwendet. Folgendes Bild des Onlineportals heise.de zeigt eine solche Einordnung.
[21]

                     Abbildung 3.1:   MQTT im TCP-Stack

3.4 MQTT for Sensor Networks
Message Queue Telementry Transport for Sensor Networks (MQTT-SN) ist eine Va-
riante des Protokolls MQTT, das sich auf drahtlose Sensornetzwerke spezialisiert,
wodurch Anpassungen aufgrund von möglichen Unterbrechungen, geringerer Band-
breite und kleineren Nachrichtengröÿen nötig sind. Folgende Komponenten dienen
zur Realisierung eines solchen Netzwerks: [22, S. 5-6]

                    Abbildung 3.2:   MQTT-SN Komponenten

                                       17
Client:
Bei den MQTT-SN Clients handelt es sich, wie bei MQTT, um Sensoren, die ihre
Daten an einen Broker übermitteln. Die Besonderheit besteht darin, dass die Mo-
dule kabellos über MQTT-SN mit einem Gateway verbunden sind.

Gateway:
Wie bereits erwähnt, sind die Sensor-Clients mit dem MQTT-SN Gateway verbun-
den. Sofern in diesem kein Broker enthalten ist, werden die erhaltenen Daten an
einen solchen über MQTT weitergeleitet. Man kann das Gateway auf zwei unter-
schiedliche Arten betreiben. Ein Transparent Gateway baut für jeden MQTT-SN
Client eine eigene MQTT Verbindung mit dem Broker auf. Das Aggregating Ga-
teway hingegen sammelt die Daten der Clients und entscheidet, welche davon an
den Broker weitergeleitet werden sollen. Letzteres mag zwar in Hinsicht auf ein um-
fangreiches Sensor-Netzwerk vorteilhaft erscheinen, da nicht mehrere Verbindungen
gleichzeitig bearbeitet werden müssen, ist jedoch aber auch aufwändiger zu imple-
mentieren.

                      Abbildung 3.3:   MQTT-SN Gateways

Forwarder:
Ist ein Gateway von einem Sensor-Client aus nicht direkt erreichbar, so kann über
einen MQTT-SN Forwarder eine Verbindung zu diesem aufgebaut werden. Die Da-
ten werden somit unverändert an das Gateway übermittelt. Umgekehrt ist es auch
möglich, Daten an den Forwarder zu senden, der diese wiederum den Clients über-
gibt.

Vergleicht man MQTT-SN mit MQTT, so lassen sich unter anderen folgende Haupt-
unterschiede erkennen. [22, S. 4-5]

   • MQTT-SN Verbindungen basieren nicht auf TCP, sondern werden über kabel-
     lose Netzwerke wie Zigbee realisiert.

   • Um der geringeren Bandbreite gerecht zu werden, verwendet man für das to-
     pic der Publish-Nachricht anstatt Namen topic ids. Diese sind entweder vor-
     deniert oder werden nach einem Registratrionsverfahren auf dem Gateway
     hinterlegt.

                                        18
• Kurze topic names sind zwei Byte groÿ und neben der topic id ebenfalls erlaubt.

   • Über eine Suchfunktion können Clients ohne festgelegtes Gateway automatisch
     ein solches nden.

   • Da batteriebetriebene Systeme gelegentlich oine sind, ist ein keep-alive-Verfahren
     nötig. Dadurch werden Nachrichten an einen schlafenden Client im Gateway
     vermerkt und automatisch an diesen weitergeleitet, sobald er wieder online ist.

3.5 Vergleich mit anderen Protokollen
Obwohl jedes Anwendungsprotokoll seinen eigenen thematischen Schwerpunkt hat,
bietet sich ein Vergleich zwischen diesen an, um zu erfahren, welche Kombination
von Funktionen ein Protokoll benötigt, sodass dessen Zweck erfüllt werden kann.
Dadurch lassen sich sowohl Unterschiede als auch Gemeinsamkeiten feststellen. Die
Nachfolgende Tabelle zeigt einen Vergleich zwischen allgemein bekannten Anwen-
dungsprotokollen inklusive MQTT. [21]

 Protokoll               MQTT CoAP             FTP        HTTP/1.1 HTTP/2
 Transport               TCP        UDP        TCP        TCP          TCP
 Session                 x                     x                       x
 Request/Response                   x          x          x            x
 Client/Server           x          x          x          x            x
 Publish/Subscribe       x          x                                  push
 Message Broker          x
 Message Data            binary     binary     text       text         binary

               Tabelle 3.5:   Vergleich von Anwendungsprotokollen

                                        19
4 Installation
Nachdem die Funktionsweise des MQTT-Protokolls detailliert erklärt wurde und so-
mit bekannt ist, widmet sich dieses Kapitel der Installation und Konguration von
MQTT.

Die Eclipse Foundation leitete Anfang 2012 das Paho-Projekt. Das Ziel bestand dar-
in, eine Open-Source-Implementierung für M2M-Protokolle bereitzustellen. MQTT
existiert schon seit 1999, entwickelt durch IBM und Eurotech, welche auch die Initia-
limplementierung bereitgestellt haben. Die Referenzimplementierung des MQTT-
Protokolls kann für Clients (Publisher und Subscriber) in mehreren Programmier-
sprachen realisiert werden, bspw.: Java, C, C++, Python und JavaScript. [7]
In den nächsten Punkten wird gezeigt, wie die erste 'IoT-Anwendung' geschrieben
werden kann.

4.1 Beschreibung
Bekannt ist, dass MQTT einen geringen Protokoll-Overhead hat und somit für
breitbandschonende Kommunikation geeignet ist. In folgendem Beispiel wird ein
Raspberry Pi benutzt, aus diesem werden die CPU-Temperatur und die Ar-
beitsspeichernutzung ausgelesen, wobei es sich bei letzterem nicht um Sensorda-
ten handelt, aber dennoch geringe Datenmengen sind. Das Auslesen und versenden
der Daten wird mit einer Java-Implementierung realisiert. Das Raspberry Pi hat In-
ternetzugri und übernimmt die Rolle des Publishers. Die ermittelten Sensordaten
werden an einen öentlichen Broker geschickt. Der Subscriber, ein weiteres Gerät,
abonniert die CPU-Temperatur und Arbeitsspeichernutzung. Sobald die Daten beim
Broker angekommen sind, leitet dieser diese an den Subscriber weiter. Abbildung
4.1 - Beispiel.

                             Abbildung 4.1:    Beispiel

                                         20
4.2 Komponenten
Publisher:
Zum Einsatz kam ein Raspberry Pi 1 Model B mit einer SDHC-Karte (8 GB). Als
Betriebssystem wurde die Distribution Raspbian, die auf Debian basiert, genutzt.
Wie das Betriebssystem auf dem Raspberry Pi zu installieren ist, wird auf folgender
Seite ausführlich beschrieben:

https://www.raspberrypi.org/documentation/installation/installing-images/.
Um Java Programme kompilieren und ausführen zu können, muss das openjdk in-
stalliert werden, dass die Java-Plattform bereitstellt. Unter Linux geschieht das mit
folgendem Befehl: sudo apt-get install openjdk-7-jdk.

Broker:
Für den Austausch der Sensordaten wurde das öentliche MQTT-Dashboard
(http://mqtt-dashboard.com/dashboard) benutzt, welches von der Firma dc-
square für Testzwecke bereitgestellt wurde. Damit der Publisher Daten an diesen
Broker schicken kann, werden folgende Informationen benötigt:

   •   Broker: broker.mqttdashboard.com
   •   Port: 1883
Subscriber:
Der Subscriber wurde als Webdashboard mittels HTML und JavaScript umgesetzt.
Die empfangenen Daten werden in Diagrammen grasch dargestellt. Zusätzlich wird
angezeigt, ob der Publisher momentan On- oder Oine ist. In der unten stehen-
den Aufzählung wird beschrieben, welche JavaScript-Bibliotheken benötigt wer-
den, um den Subscriber zu implementieren. Editoren wie Notepad++ oder JS-
Designer werden ebenfalls benötigt, um die Java-Skripte zu erstellen.
   • Eclipse Paho Bibliothek, die MQTT über Websockets im Browser implemen-
     tiert. (https:// eclipse.org/paho/clients/js/)

   • Bootstrap Framework, dass Komponenten und grasche Elemente bereitstellt.
     (http:// getbootstrap.com/)

   • jQuery, beinhaltet Tools für JavaScript. (http://jquery.com/download/)

   • JustGage, stellt Diagramme bereit. (http://justgage.com/)

                                         21
4.3 Implementierung
     Der Unterpunkt Implementierung beschränkt sich auf die wichtigsten Codefrag-
     mente des Publishers und Subscribers. Hierbei handelt es sich um eine modizierte
     Version, die wir für unser Beispiel angepasst haben. Diese ist auf Bitbucket [23] ver-
     fügbar. Der Originalquellcode ist auf GitHub [24] verfügbar.

     Publisher:

1    import o r g . e c l i p s e . paho . c l i e n t . mqttv3 . ∗ ;
2    import com . p i 4 j . system . S y s t e m I n f o ;
                               Listing 4.1:      Einbindung der benötigten Bibliotheken

     Der Sensorclient benötigt wie der Subscriber die Eclipse Paho Bibliothek, jedoch kei-
     ne JavaScript- sondern eine Java Bibliothek. Damit die CPU-Temperatur und die
     Arbeitsspeichernutzung ermittelt werden kann, muss noch eine weitere Bibliothek
     eingebunden werden, die in Zeile 2 vorhanden ist. Diese ist auf GitHub verfügbar.
     (https://github.com/Pi4J/pi4j/tree/develop)

1    // O b j e k t V a r i a b l e n
2    p r i v a t e MqttClient c l i e n t ;
3    p u b l i c s t a t i c f i n a l S t r i n g BROKER_URL = " t c p : / / b r o k e r . mqttdashboard . com
            :1883 " ;
4
5    public       s t a t i c f i n a l S t r i n g TOPIC_CPU_TEMPERATURE = "home/ c p u t e m p e r a t u r e
        ";
6    public       s t a t i c f i n a l S t r i n g TOPIC_MEMORY_USED = "home/memoryused" ;
7    public       s t a t i c f i n a l S t r i n g TOPIC_MEMORY_FREE = "home/ memoryfree " ;
8    public       s t a t i c f i n a l i n t mb = 1024 ∗ 1 0 2 4 ;
                                        Listing 4.2:   Deklaration der Variablen

     Die Variable client wird benötigt, damit der Konstruktor später eine Instanz der
     Klasse MqttClient erzeugen kann. Die BROKER_URL deniert die Adresse des
     Brokers als String. Die restlichen Strings stellen die Topics dar. Der Integer mb
     wandelt die ermittelte Arbeitsspeichernutzung in die richtige Einheit um.

 1   public Publisher () {
 2     S t r i n g c l i e n t I d = U t i l s . getMacAddress ( ) + "−pub" ;
 3     try {
 4          // I n s t a n z    der     Klasse   MqttClient    erzeugen .
 5         c l i e n t = new M q t t C l i e n t (BROKER_URL, c l i e n t I d ) ;
 6       } c a t c h ( MqttException e ) {
 7         e . printStackTrace () ;
 8           System . e x i t ( 1 ) ;
 9       }
10   }
                                        Listing 4.3:   MqttClient-Objekt erzeugen

                                                            22
Der Konstruktor erhält als Parameter die Adresse des Brokers und eine eindeutige
     Client-ID. Diese setzt sich aus der MAC-Adresse des Rechners und einem String -pub
     zusammen. Der MQTT-Broker unterstützt nur eine ID pro Client. Verbindet sich ein
     zweiter, mit derselben ID, so bricht der Broker die Verbindung des älteren Clients ab.

1    p r i v a t e v o i d s t a r t ( ) throws NumberFormatException , IOException {
2        try {
3            MqttConnectOptions o p t i o n s = new MqttConnectOptions ( ) ;
4              options . setCleanSession ( f a l s e ) ;
5              o p t i o n s . s e t W i l l ( c l i e n t . g e t T o p i c ( "home/ s t a t u s " ) , " o f f l i n e " . g e t B y t e s
                      () , 1 , true ) ;
 6             c l i e n t . connect ( options ) ;
 7             c l i e n t . p u b l i s h ( "home/ s t a t u s " , " o n l i n e " . g e t B y t e s ( ) , 1 , t r u e ) ;
 8
 9            // P u b l i s h   data
10           while ( true ) {
11               publishCpuTemperature ( ) ;
12               Thread . s l e e p ( 5 0 0 ) ;
13               publishMemoryUsed ( ) ;
14               Thread . s l e e p ( 5 0 0 ) ;
15               publishMemoryFree ( ) ;
16               Thread . s l e e p ( 5 0 0 ) ;
17           }
18       } c a t c h ( MqttException e ) {
19         e . printStackTrace () ;
20           System . e x i t ( 1 ) ;
21       } catch ( InterruptedException e ) {
22         e . printStackTrace () ;
23       }
24   }
                                                 Listing 4.4:          start-Funktion

     Als nächstes wird eine Instanz der Klasse MqttOptions erzeugt, damit beim Ver-
     bindungsaufbau zum Broker mittels der connect -Methode diverse Eigenschaften in
     options festgelegt werden können. Ist setCleanSession auf false gesetzt, wird dem

     Broker mitgeteilt, dass mit einer alten Sitzung gearbeitet werden soll, falls der Client
     schon einmal mit diesem Broker verbunden war.
     Eine RETAINED MESSAGE wie in Zeile 5, gesetzt durch das true , ermöglicht
     es dem Subscriber (Webdashboard), die zuletzt versendeten Werte pro Topic an-
     zuzeigen, auch wenn der Publisher oine ist. An dieser Stelle wird das QoS level
     1 verwendet, damit sichergestellt ist, dass die Sensordaten ein- oder mehrfach an-
     kommen. In diesem Szenario sieht der Kommunikationsablauf zwischen Publisher,
     Broker und Subscriber folgendermaÿen aus:

          • Beim Start des Publishers wird sein letzer Wille an das Topic home/status
            mit der Nachricht oine an den Broker übergeben.

          • War der Verbindungsaufbau erfolgreich, wird die Nachricht                                              online       an das
            Topic home/status gesendet.

                                                                      23
• Anschlieÿend werden Sensordaten an die Topics
     home/cputemperature
     home/memoryused
     home/memoryfree gesendet.
   • Wird die Verbindung unterbrochen, so schickt der Publisher an den Broker die
     Nachricht oine in das Topic home/status . Der Subscriber (Webdashboard)
     ist somit informiert, dass der Publisher nicht mehr verbunden ist.

Anschlieÿend wird eine Endlosschleife durchgeführt, in der Methoden für die Er-
mittlung der CPU-Temperatur, des genutzten Arbeitsspeichers und des frei-
en Arbeitsspeichers aufgerufen, und an den Broker geschickt werden. Auf die
Methoden für die Ermittlung der Sensordaten wird nicht näher eingegangen, diese
benden sich auf GitHub.

https://github.com/goetzchr/webdashboard-with-mqtt/tree/master/sensor-
client/src/main/java/de/dcsquare/paho/client/publisher.
Wurden die restlichen Codefragmente übernommen, muss aus dem Quelltext noch
eine ausführbare Jar-Datei erstellt werden, damit diese auf dem Raspberry Pi aus-
geführt werden kann. Mit dem Befehl java -jar Publisher.java wird der Publisher
gestartet und mit Strg + C beendet.

                   Abbildung 4.2:   Publisher wird ausgeführt

                                       24
Subsrciber:

 1 
 2   
 3      MQTT L i v e Dashboard
 4        < s c r i p t s r c=" a s s e t s / j s / j q u e r y . j s ">
 5        < s c r i p t s r c=" l i b / b o o t s t r a p / j s / b o o t s t r a p . min . j s ">
 6        < s c r i p t s r c=" l i b / j u s t g a g e / r a p h a e l . 2 . 1 . 0 . min . j s ">
 7        < s c r i p t s r c=" l i b / j u s t g a g e / j u s t g a g e . 1 . 0 . 1 . min . j s ">
 8        < s c r i p t s r c=" l i b / paho / paho . j s ">
 9        < s c r i p t s r c=" j s /app . j s ">
10   
11 
                               Listing 4.5:        Einbindung der benötigten Bibliotheken

     Damit die ermittelten Sensordaten empfangen und grasch dargestellt werden kön-
     nen, muss zunächst eine HTML-Datei erstellt werden, in der die JavaScript-Bibliotheken
     eingebunden werden. Diese wurden im Punkt 4.2 Subscriber genannt. Die Einbin-
     dung der app.js in Zeile 9 beschreibt die eigentliche Funktionalität des Subscribers.

 1   var c l i e n t = new Messaging . C l i e n t ( " b r o k e r . mqttdashboard . com" , 8 0 0 0 , "
         dashboard " ) ;
 2   var cputemp ;
 3   var usedmem ;
 4   var freemem ;
                                               Listing 4.6:       Variablen - app.js

     Zeile 1 wird benötigt um den Broker zu denieren, von dem man Nachrichten erhal-
     ten möchte. An dieser Stelle kann auch eine IP-Adresse eingetragen werden, falls
     man einen eigenen Broker im lokalen Netzwerk betreibt. Die Variablen in den Zeilen
     2 bis 4 werden für das Speichern der erhaltenen Werte verwendet.

 1   var c l i e n t = new Messaging . C l i e n t ( " b r o k e r . mqttdashboard . com" , 8 0 0 0 , "
          dashboard " ) ;
 2   $ ( document ) . ready ( f u n c t i o n ( ) {
 3
 4       var o p t i o n s = {
 5
 6          // T i m e o u t
 7          timeout : 3 ,
 8
 9          // V e r b i n d u n g s a u f b a u   erfolgreich .
10          onSuccess : function () {
11
12               client    . s u b s c r i b e ( "home/ s t a t u s " ) ;
13               client    . s u b s c r i b e ( "home/ memoryfree " ) ;
14               client    . s u b s c r i b e ( "home/ c p u t e m p e r a t u r e " ) ;
15               client    . s u b s c r i b e ( "home/memoryused" ) ;
16          },
17

                                                                    25
18             // V e r b i n d u n g s a u f b a u   nicht   erfolgreich .
19             o n F a i l u r e : f u n c t i o n ( message ) {
20
21                 a l e r t ( " Connection f a i l e d : " + message . e r r o r M e s s a g e ) ;
22             }
23        };
                                                 Listing 4.7:    Topic-Subscription

     Dieses Codefragment beschreibt die Abonnierung der Topics bei erfolgreichem Ver-
     bindungsaufbau. War der Verbindungsaufbau nicht erfolgreich, wird die onFailure -
     Funktion aufgerufen.

1    // A u f r u f     bei     Nachrichtenempfang .
2    c l i e n t . onMessageArrived = f u n c t i o n ( message ) {
3
4         var t o p i c = message . d e s t i n a t i o n N a m e ;
5
6         i f ( t o p i c === "home/ s t a t u s " ) {
7
8              i f ( message . p a y l o a d S t r i n g === " o f f l i n e " ) {
9                  $ ( "#c l i e n t _ d i s c o n n e c t e d " ) . html ( ' Raspberry Pi P u b l i s h e r O f f l i n e ' ) .
                        removeClass ( " h i d e " ) . h i d e ( ) . f a d e I n ( " s l o w " ) ;
10                 $ ( "#c l i e n t _ c o n n e c t e d " ) . a d d C l a s s ( " h i d e " ) . h i d e ( ) ;
11             } else {
12                 $ ( "#c l i e n t _ c o n n e c t e d " ) . html ( ' Raspberry Pi P u b l i s h e r O n l i n e ' ) .
                        removeClass ( " h i d e " ) . h i d e ( ) . f a d e I n ( " s l o w " ) ;
13                 $ ( "#c l i e n t _ d i s c o n n e c t e d " ) . a d d C l a s s ( " h i d e " ) . h i d e ( ) ;
14             }
15        }
16        e l s e i f ( t o p i c === "home/ c p u t e m p e r a t u r e " ) {
17            setCPU ( message . p a y l o a d S t r i n g ) ;
18        }
19        e l s e i f ( t o p i c === "home/memoryused" ) {
20            setMEMU( message . p a y l o a d S t r i n g ) ;
21        }
22        e l s e i f ( t o p i c === "home/ memoryfree " ) {
23            setMEMF( message . p a y l o a d S t r i n g ) ;
24        }
25   };
                                                 Listing 4.8:    Topic-Subscription

     Werden Nachrichten empfangen, wird im Variable header des Pakets geprüft, in
     welches Topic die Daten gehören. Mit dem Befehl client.connect(options) erfolgt der
     Verbindungsaufbau zum Broker. In Abbildung 4.3 ist das Webdashboard des Subs-
     cribers dargestellt.

                                                                   26
Abbildung 4.3:   Subscriber - Webdashboard

                    27
5 Evaluierung
Durch die kurze Einführung in das Internet der Dinge wurde ein erster Eindruck
über die Einsatzmöglichkeiten von M2M-Protokollen wie MQTT vermittelt. Ebenso
konnten grundlegende Fragen über das Aufzeigen unterschiedlicher Kommunikati-
onsmuster geklärt werden. Diese hielten wir für besonders wichtig, damit der Leser
die Vorteile von MQTT erkennt und versteht warum von einem leichtgewichtigem
Protokoll die Rede ist. Durch die kurzgefasste Erarbeitung der Grundlagen kann
dies erreicht werden.

Mit Hilfe der Spezikation von MQTT.org und der bereitgestellten Kindle-Version
von entwickler.press über MQTT im IoT - Einstieg in die M2M-Kommunikation
konnte ein tiefer Einblick in den Aufbau und die Funktionsweise geworfen werden.
Diese zwei Quellen wurden auch als Hauptquellen für diese Ausarbeitung genutzt.
Bei der Recherche zur Literaturndung wurden zahlreiche Artikelserien und Beiträ-
ge gefunden, deren Inhalte jedoch fast identisch und somit unbrauchbar waren. An
dieser Stelle möchten wir den zweiten Teil der Artikelserie 'Anweundungsprotokol-
le im Vergleich - Gegenüberstellung' von Maik Woijcieszak besonders hervorheben.

Dieser Beitrag hat uns sehr geholfen, da zu Beginn noch Klärungsbedarf bestand, ob
das MQTT-Protokoll auf der Transport- oder Anwendungsschicht des TCP-Modells
angesiedelt ist.

Zusammenfassend konnten fast alle zuvor denierten Deadlines zur Ausfertigung die-
ser Arbeit erfolgreich eingehalten werden. Die Anpassung der Referenzimplementie-
rung für unser eigenes Beispiel in Kapitel 4 hatte mehr Zeit in Anspruch genommen
als geplant. Ursprünglich sollte noch ein lokaler Broker im eigenen Netz installiert
und konguriert werden, doch aus Zeitgründen wurde ein öentlicher Broker im
Internet genutzt.

                                        28
6 Fazit und Ausblick
Wenn man nun das Thema nochmals Revue passieren lässt, so kristallisieren sich
die Vorteile von MQTT schnell heraus. Es ist in der Tat ein geeignetes Nachrich-
tenprotokoll, was den M2M Datenverkehr über kurze Nachrichten angeht. Durch
die Priorisierung von Datenpaketen mit den QoS levels, lässt sich das Protokoll in-
dividuell auf die jeweilige Situation einstellen. Ein kompakter Header sorgt dafür,
dass Datenpakete auch bei stark begrenzter Bandbreite schnell und zuverlässig über-
mittelt werden. MQTT hat ein enormes Potential, die Community wächst und es
sind zahlreiche Bastlerprojekt im Internet aufzunden. Kommerziell gesehen ist der
Bekanntheitsgrad noch sehr gering, daher ndet MQTT nur begrenzt Verwendung.
Ebenso lässt sich neben den zahlreichen Internetquellen kaum Literatur über das
Protokoll nden, wodurch man auch erkennen kann, dass sich dieses Protokoll noch
in den Startlöchern bendet. Mit Sicherheit kann man davon ausgehen, dass der
Bekanntheitsgrad von MQTT im Laufe der nächsten Jahre über die zunehmende
Relevanz des Internets der Dinge ebenfalls ansteigen wird.

                                        29
Abbildungsverzeichnis
 2.1   Client-Server-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . 7
 2.2   Request/Response-Verfahren . . . . . . . . . . . . . . . . . . . . . . . 8
 2.3   Publish/Subscribe-Verfahren . . . . . . . . . . . . . . . . . . . . . . . 10

 3.1   Einordnung von MQTT . . . . . . . . . . . . . . . . . . . . . . . . . 17
 3.2   Verbindung zwischen MQTT-SN Komponenten . . . . . . . . . . . . 17
 3.3   Unterschiede von MQTT-SN Gateways . . . . . . . . . . . . . . . . . 18

 4.1   Installationsaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
 4.2   Ausführung des Publishers in einem LXTerminal . . . . . . . . . . . . 24
 4.3   Subscriber wird ausgeführt . . . . . . . . . . . . . . . . . . . . . . . . 27

                                        30
Tabellenverzeichnis
 3.1   Aufbau MQTT Kontrollpaket . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
 3.2   Aufbau: Fixed header . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
 3.3   MQTT Kontrollpaket-Typen . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
 3.4   PUBLISH-Paket . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
 3.5   Vergleich von Anwendungsprotokollen      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19

                                      31
Listings
 4.1   Einbindung der benötigten Bibliotheken         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
 4.2   Deklaration der Variablen . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
 4.3   MqttClient-Objekt erzeugen . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
 4.4   start-Funktion . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
 4.5   Einbindung der benötigten Bibliotheken         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
 4.6   Variablen - app.js . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
 4.7   Topic-Subscription . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
 4.8   Topic-Subscription . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26

                                        32
Literaturverzeichnis
 [1] Frequently asked questions.        Internet: http://mqtt.org/faq, visited
     03.06.2015.
 [2] The internet of things enables digital business. Internet: http://www.gartner.
     com/technology/research/internet-of-things/, visited 23.05.2015.
 [3] Zukunftsprojekt industrie 4.0. Internet: http://www.bmbf.de/de/9072.php,
     visited 23.05.2015.
 [4] James Kurose and Keith Ross. Computernetzwerke - Der Top-Down-Ansatz,
     chapter Architektur von Netzwerkanwendungen, pages 110111. Pearson Edu-
     cation Inc., 6., updt. edition.
 [5] James Kurose and Keith Ross. Computernetzwerke - Der Top-Down-Ansatz,
     chapter Architektur von Netzwerkanwendungen, pages 123124. Pearson Edu-
     cation Inc., 6., updt. edition.
 [6] James Kurose and Keith Ross. Computernetzwerke - Der Top-Down-Ansatz,
     chapter Überblick über HTTP, pages 111112. Pearson Education Inc., 6.,
     updt. edition.
 [7] Dominik Obermaier, Christian Götz, Klemens Edler, and Florian Pirchner.
     MQTT im IoT - Einstieg in die M2M-Kommunikation. entwickler.press, 2014.

     chapter 1 M2M-Kommunikation mit MQTT. [Kindle-Edition].
 [8] Projects. Internet: http://mqtt.org/projects, visited 03.06.2015.
 [9] Lucy Zhang. Building facebook messenger. Internet: https://www.facebook.
    com/notes/facebook-engineering/building-facebook-messenger/
    10150259350998920, visited 26.05.2015.
[10] Andrew   Banks    and   Rahul   Gupta.        Oasis   standard.      Internet:
    http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.
    html#_Toc398718008, visited 29.05.2015.
[11] Andrew Banks and Rahul Gupta.              Terminology.      Internet: http:
    //docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#
    _Toc398718010, visited 29.05.2015.
[12] Andrew Banks and Rahul Gupta. Structure of an mqtt control packet format.
     Internet: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.
     1-os.html#_MQTT_Control_Packet, visited 30.05.2015.

                                        33
[13] Andrew Banks and Rahul Gupta.       Mqtt control packet type. Internet:
    http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.
    html#_Toc398718021, visited 31.05.2015.
[14] Andrew Banks and Rahul Gupta.            Fixed header.       Internet: http:
    //docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#
    _Toc398718020, visited 31.05.2015.
[15] Andrew   Banks   and    Rahul   Gupta.     Publish     message.     Internet:
    http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.
    html#_Toc398718037, visited 31.05.2015.
[16] Andrew Banks and Rahul Gupta.          Remaining length. Internet:
    http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.
    html#_Toc398718023, visited 04.06.2015.
[17] Andrew   Banks   and    Rahul   Gupta.      Variable    header.     Internet:
    http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.
    html#_Toc398718039, visited 04.06.2015.
[18] Andrew   Banks    and   Rahul   Gupta.      Payload.       http:
                                                                 Internet:
    //docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#
    _Toc398718040, visited 04.06.2015.
[19] Andrew Banks and Rahul Gupta. Authentication of clients by the server.
     Internet: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.
     1-os.html#_Toc398718116, visited 07.07.2015.
[20] Andrew Banks and Rahul Gupta. Authorization of clients by the server.
     Internet: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.
     1-os.html#_Toc398718117, visited 07.07.2015.
[21] Maik Wojcieszak.        Internet-protokolle, teil 2: Anwendungsprotokol-
     le im vergleich.     Internet: http://www.heise.de/developer/artikel/
    Internet-Protokolle-Teil-2-Anwendungsprotokolle-im-Vergleich-2632571.
    html?artikelseite=3, visited 25.05.2015.
[22] Andy Stanford-Clark und Hong Linh. Mqtt for sensor networks (mqtt-sn) - pro-
     tocol specication version 1.2. Internet: http://mqtt.org/new/wp-content/
     uploads/2009/06/MQTT-SN_spec_v1.2.pdf, visited 25.05.2015.
[23] Modied sourcecode for publisher and subscriber.         Internet: https://
     bitbucket.org/masterblaster1/mqtt/src,.
[24] Original sourcecode for publisher and subscriber. Internet: https://github.
     com/goetzchr/webdashboard-with-mqtt,.

                                       34
Sie können auch lesen