Title: M1.2.1: Allgemeines zu MQTT
Course: LF07 - Cyber-physische Systeme ergänzen - FI/ITSE - Raspberry Pi > Section: LS7.1: Messdatenerfassungssysteme funktional zusammenführen

Allgemeines zu MQTT

MQTT steht für Message Queuing Telemetry Transport. Das Protokoll wird insbesondere für die Machine-to-Machine (M2M) Kommunikation verwendet. Es vereinfacht die Interaktion von Geräten (z.B. Sensoren und Aktoren). MQTT arbeitet standarmäßig auf den Ports 1883 und 8883.

MQTT besteht aus einem zentralen Server, dem sogenannten Broker, und Clients. Einen Broker kann man sich wie einen Datenspeicher vorstellen, der irgendwo auf der Welt liegen kann und lediglich über das IP-Protokoll erreichbar sein muss. Auf dem Broker ist eine bestimmte Software installiert, die Daten entgegennimmt, speichert und auf Anfrage ausgibt.

Alle Clients kennen den Broker, aber keine weiteren Clients. Clients selbst können Informationen in sogenannten Topics veröffentlichen (publish) oder abonnieren (subscribe). Andere Bezeichnungen dafür sind auch Consumer (Abonnenten) und Producer (Publizierer). Eine Nachricht besteht dann aus einem Topic und dem eigentlichen Nachrichteninhalt. Der Inhalt der Nachricht ist formatgebunden.

Das folgende Bild veranschaulicht den Ablauf prinzipiell. Dabei fungiert Client A als Subscriber (abonniert Informationen des sensor1) und Client B als Publisher (liefert die Daten von sensor1). Die ...ACK-Nachrichten sind jeweils Quittungen.

Die Informationen selbst werden hierarchisch ablegt. Beispiel:

In MQTT wird dies für drone1 so dargestellt.

- sensors/drone1/altitude
- sensors/drone1/speed/rotor/1
- sensors/drone1/speed/rotor/2
- sensors/drone1/speed/rotor/3
- sensors/drone1/speed/rotor/4
- sensors/drone1/remainingbattery

Man kann durch + und # bestimmte Bereiche zusammenfassen, um leichter mit einer großen Anzahl von Topics arbeiten zu können.

Mit + wird eine Hierarchieebene ersetzt werden. Beispiel:

- sensors/+/altitude

Hierbei werden von allen Drohnen (drone1 und drone2) die Höhensensoren altitude ausgewählt.

Mit # wird alles aber einer bestimmten Hierarchieebene (und darunter liegend) ausgewählt. Beispiel:

- sensors/drone1/#

Hierbei werden alles Sensoren der Drohne drone1 ausgewählt.

Der Einsatzbereich für MQTT ist sehr vielfältig, zum Beispiel auch in der Hausautomation. Siehe dazu zum Beispiel: https://heise.cloudimg.io/width/763/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/2/5/8/4/8/0/5/image-1519374752206624-72d56e0651a99741.jpeg

Weitere Informationsquellen:

MQTT-Grundlagenartikel aus der c't: https://www.heise.de/hintergrund/MQTT-Protokoll-fuer-Datenaustausch-in-Industrie-und-Hausautomation-4284072.html
Dieses ist ein Bezahlartikel, das Bild ist noch öffentlich. Der Artikel zeigt die Grundlagen gut auf.

Adafruit IO MQTT API: https://io.adafruit.com/api/docs/mqtt.html#adafruit-io-mqtt-api

Quick Guide to The Mosquitto.conf File With Examples http://www.steves-internet-guide.com/mossquitto-conf-file/