MQTT - Aufbau
Message Queue Telemetry Transport - leichtgewichtiges, offenes Netzwerkprotokoll für M2M, also für Maschine-to-Maschine und IoT-Kommunikation
Architektur:
Broker(Server): Zentraller Vermittler, welcher alle Nachrichten empfängt, nach Topic filter und an Subscriber weiterleitet
Clients: Geräte, die sich per TCP mit dem Broker verbinden, kann Publisher und Subscriber gleichzeitig sein
Netzwerkebene: OSI 5-7, basiert auch TCP/IP Ports 1883 und 8883 secure
Wie funktioniert MQTT
Event-Driven publish/Subscribe-Prinzip:
Client stellt TCP-Verbindung zum Broker her (connect)
Publisher sendet Nachricht an Topic (Publish)
Broker empfängt und prüft (Wer hat das Topic aboniert?)
Broker leitet nachricht an passende Subscriber weiter
Drei Arten der Entkopplung
Space: Publisher & Subscripper kennen sich nicht (keine iP nötig) Broker macht die Arbeit
Time: Müssen nicht gleichzeitig online sein (Broker kann nachrichten zwischenspeichern)
Synchronisation: Operationen blokieren sich nicht (nichts wird blokiert)
CONNECT → CONNACK — Verbindungsaufbau
PUBLISH — Nachricht senden (+ QoS-Bestätigungen)
SUBSCRIBE → SUBACK — Topic abonnieren
UNSUBSCRIBE → UNSUBACK — Abo beenden
PINGREQ → PINGRESP — Keep-Alive
DISCONNECT — Verbindung trennen
Pub/Sub-Modell
Publisher: Client, der Daten an an Topic sendet
Subscriber: Client, der ein Topic aboniert und Daten empfängt
Broker: Vermittler, der Topics verwaltet und Nachrichten verteilt
Bei HTTP fragt der Client aktiv beim Server an. Bei MQTT pushed der Broker automatisch, sobald neue Daten vorliegen — der Subscriber muss nicht pollen.
Topics:
Sind hierarische Strings, die als Addresse bzw. Filter dienen, also wie ein Dateipfad mit /
Wildcards:
single Level: Ersetzt eine Ebene also mit +
multi level: # ersetzt alle ebenen, nur am Ende erlaubt
-> Wildcard gelten nur für Subscribe
QoS - Level:
Drei Level
At most once (fire and forget) QoS 0
Keine Bestätigung, Nachricht kann verloren gehen (Publish und fertig)
At least one QoS 1
Sender speichert Nachricht bis Pubback kommt, Duplikate möglich
Also Publish -> PublAck
Exactly once QoS 2
4-Wege-Handshake garantiert kein Verlust und keine Duplikate
PUBLISH → PUBREC → PUBREL → PUBCOMP
Adafruit MQTT
leichtgewichtige C++ Bibliothek für Mikrocontroller
Wichtige Klassen:
Basis Klasse
Adafruit_MQTT — Basis-Klasse (Verbindungslogik)
Adafruit_MQTT_Client — TCP-Client-Implementierung
Adafruit_MQTT_Publish — Objekt für ein Publish-Topic
Adafruit_MQTT_Subscribe — Objekt für ein Subscribe-Topic
Grundstruktur im Code:
1. WiFi-Verbindung herstellen
2. MQTT-Client mit Broker-IP, Port, User, Passwort erstellen
3. Publish-/Subscribe-Objekte für Topics anlegen
4. Im loop(): Verbindung prüfen, Nachrichten senden/empfangen
mqtt.connected() // Prüft ob verbunden (bool)
mqtt.ping() // Keep-Alive senden
sub.lastread // Letzter empfangener Wert
sub.setCallback(fn) // Callback-Funktion setzen // Was passiert, wenn der Wert reinkommt
Quellcode erkennen
Überblick Was macht der Code insgesammt?
Initialisierung was wird eingebunden: also mit Include, welche Konstanten werden definiert
Setup: Wifi-Verbindung, MQTT-Erstellung
Loop-Phase; Verbindungscheck -> Daten lesen -> Publish/Subscribe
Cyber-Physisches-System
Cyber-Physisches System (CPS):
Ein System, das physische Objekte (Sensoren, Aktoren) mit digitaler Verarbeitung (Software, Netzwerk) koppelt. Die physische Welt wird erfasst, digital verarbeitet und über Aktoren zurück beeinflusst.
Einordnung in Industrie 4.0 / IIoT:
Embedded System Lokales System ohne Netzwerk (z.B. Arduino + Sensor + LED) — Projekt I im Unterricht
IoT-System Embedded System + Netzwerkanbindung (z.B. ESP32 + MQTT + Broker) — Projekt II im Unterricht
CPS IoT-System + zentrale Datenerfassung, -analyse und Rückkopplung — das Gesamtsystem
IIoT = Industrial Internet of Things — CPS im industriellen Kontext (Produktion, Fertigung, Logistik)
Last changed17 days ago