2.1. MQTT Broker

Ein Broker ist die Server Instanz in der MQTT Struktur. Hier werden alle Daten hin gesendet und verwaltet. Broker haben die Aufgabe, sowohl Subscribern als auch Publishern die Möglichkeit zu geben, sich zu verbinden. Ist eine Verbindung (TCP) aufrecht, kann der Datenaustausch beginnen.

Ein Besipiel für ein MQTT System kann der folgenden Abbildung entnommen werden:

MQTT.svg

2.1.1. Topics

In dem eben genannten Beispiel wird das Wort Topic häufig verwendet. Eine Topic ist ein Pfad zu einem Datenpunkt bei MQTT. An Topics können (normalerweise homogene) Daten von Publishern gesendet werden. Ebenso können sich Subscriber auf eine Topic registrieren und erhalten somit immer neue Daten, die an diese Topic gesendet werden. Eine einfache Beispieltopic für Temperaturdaten in einem kleinen Netzwerk wäre tel/temp. tel/dht11 in dem obigen Beispiel ist ein Schnittpunkt für Daten eines DHT11 Temperatursensors, mehr dazu im Publisher Beispiel.

Bemerkung

tel steht in diesen Beispielen für Telemetrie.

Einen Broker kann man ganz einfach starten. Dazu gibt es ätlich viele Projekte, die einen MQTT Broker zur Verfügung stellen. Eine Liste mit vielen dieser Produkte kann hier gefunden werden.

In unserem Beispiel beschränken wir uns auf die Standardmethodik: mosquitto. Das mosquitto paket kommt mit einem Systemd Service, der direkt einen vorkonfigurierten MQTT Broker zur verfügung stellt:

# Install mosquitto broker
sudo apt install mosquitto
# (Re)start service
sudo systemctl restart mosquitto.service
# Check up on the service to make sure it is running
sudo systemctl status mosquitto.service

Wichtig

Diese Beispiele zur installation sind für Debian Systeme verfasst.

Bemerkung

Auf MacOS können die meisten dieser Anleitungen mit brew nachverfolgt werden.

Nun, da ein MQTT Broker läuft, kann ein Publisher oder Subscriber implementiert werden. Da die Daten, welche über MQTT usgetauscht werden hauotsächlich Byte Strings sind, ist die Sprache, in der der Programmcode für Publisher und Subscriber verfasst wird, nebensächlich und normalerweise unabhängig.

Ein in Python implementierter Subscriber zum Beispiel kann Daten eines Rust Publishers empfangen und ein in Swift geschriebener Subscriber dieselben Daten.