← Startseite
📡

Vorlesung 7

MQTT & Publish/Subscribe
Wie tausend Sensoren zur selben App sprechen — ohne Chaos

Verteilte Systeme
Prof. Dr. Alexandra Mikityuk
HTW Berlin

MQTT Publish/Subscribe IoT

Lernziele fĂŒr heute

  • Verstehen, warum HTTP fĂŒr IoT-GerĂ€te nicht reicht — und was Publish/Subscribe besser macht
  • Die drei Rollen Publisher · Broker · Subscriber sauber unterscheiden können
  • Die drei QoS-Stufen einordnen und wissen, wann ihr welche nehmt
  • Mit mosquitto_pub / mosquitto_sub oder Python einen ersten Pub/Sub-Test fahren
đŸ€”

Denkt mal kurz mit


Stellt euch vor: 1.000 Sensoren in einer Fabrik. 50 Apps wollen ihre Daten sehen. Ihr baut das mit HTTP aus VL 6.

💭 Was wird damit richtig unangenehm?

RĂŒckblick — HTTP war Anrufen. Heute: Radio hören.

Letzte VL: HTTP & REST — Client fragt, Server antwortet. Funktioniert prima fĂŒrs Web. Aber stellt euch das mal mit 1.000 Sensoren vor:

📞 HTTP-Modell

Der Server kann den Client nicht von sich aus ansprechen. Wer wissen will „ist was Neues da?", muss regelmĂ€ĂŸig nachfragen — das heißt Polling.

  • App pollt z.B. alle 5s → viele Requests, auch wenn nix passiert
  • Sensor und App mĂŒssen sich direkt kennen (URL, Auth)
  • Bei N Sensoren × M Apps → N × M Verbindungen
  • Keine eingebaute „eins-zu-viele"-Verteilung

đŸ“» Pub/Sub-Modell (Push)

Sensoren senden, wenn's was Neues gibt. Wer interessiert ist, abonniert.

  • Daten fließen nur, wenn sich etwas Ă€ndert
  • Geringe Latenz: sofortige Benachrichtigung
  • Sensoren wissen nichts ĂŒber die EmpfĂ€nger
  • Wenig Overhead — perfekt fĂŒr kleine GerĂ€te
Heute lernen wir das Pub/Sub-Modell — und sein bekanntester Vertreter heißt MQTT.

Die Idee — kennt ihr aus dem Alltag

Publish/Subscribe ist kein neues Konzept. Drei Beispiele aus eurem Leben:

📰 Zeitungs-Abo

Ihr abonniert die Zeitung. Der Verlag druckt und verteilt. Ihr wisst nicht, wer noch abonniert hat — das ist auch egal.

đŸ“» Radio-Sender

Der Sender weiß nicht, wer gerade hört. Er broadcastet. Wer das Programm möchte, schaltet ein — alle anderen verpassen es nichts.

đŸ“ș YouTube-Channel

Creator lÀdt Video hoch (publish), Abonnenten kriegen Benachrichtigung (subscribe). YouTube ist der Mittelsmann.

Gemeinsam: Sender und EmpfĂ€nger kennen sich nicht direkt. Es gibt einen Vermittler dazwischen — im Pub/Sub heißt der Broker.

Die drei Rollen in einem Pub/Sub-System

đŸ“€
Publisher
sendet Daten
→
🏱
Broker
vermittelt + speichert
→
đŸ“„
Subscriber
empfÀngt Daten

đŸ“€ Publisher

Schickt Nachrichten zu einem Topic — z.B. ein Sensor schickt Temperatur. Weiß nicht, wer das liest.

🏱 Broker

Das HerzstĂŒck. Nimmt Nachrichten an, sortiert sie nach Topic, schickt sie an alle, die abonniert haben.

đŸ“„ Subscriber

Sagt dem Broker: „Ich will alles vom Topic X." Wartet dann passiv auf neue Nachrichten.

SchlĂŒssel-Wort: Entkopplung. Publisher und Subscriber kennen sich nicht — können auch zu unterschiedlichen Zeiten online sein. Der Broker macht's möglich.

Was ist MQTT?

Message Queuing Telemetry Transport — ein leichtgewichtiges Pub/Sub-Protokoll.

📜 Historie

  • 1999: IBM + Cirrus Link entwickeln MQTT — Aufgabe: Öl-Pipelines per Satellit ĂŒberwachen
  • 2014: OASIS-Standard (Version 3.1.1)
  • 2019: ISO/IEC 20922 + Version 5.0
  • Open Source Broker: mosquitto.org — auf jedem Linux installierbar

⚙ Steckbrief

  • LĂ€uft ĂŒber TCP (Port 1883, mit TLS Port 8883)
  • Leichtgewichtig: Mini-Header (~2 Byte), lĂ€uft auf Mikrocontrollern
  • Daten-agnostisch: Payload ist Bytes — JSON, Text, BinĂ€r, was ihr wollt
  • Implementierungen fĂŒr C, Python, Java, Go, JS, 

Warum so erfolgreich? Klein genug fĂŒr Sensoren mit Batterie + Mikrocontroller, robust genug fĂŒr Industrie-Telemetrie. Heute Standard im IoT.

Mini-Beispiel — Smart Home Temperatur

Konkretes Szenario: ein Sensor im Wohnzimmer, eine App auf dem Handy, ein Broker dazwischen.

đŸŒĄïž
Sensor
Wohnzimmer
→
publish
home/wz/temp
🏱
Broker
mosquitto
→
subscribed
home/wz/temp
đŸ“±
App
Handy

1ïžâƒŁ Sensor publiziert

# alle 60 Sekunden:
publish("home/wz/temp", "22.3")

Sensor weiß nicht, ob die App da ist. Schickt einfach zum Broker.

2ïžâƒŁ App abonniert

# beim Start:
subscribe("home/wz/temp")
# danach: jede neue Temperatur kommt rein

App muss nicht pollen — Broker schiebt die Werte aktiv durch.

Topic-Designs aus echten Systemen

Sechs Branchen, sechs Topic-Hierarchien — alle nach dem gleichen Muster grob → fein.

🏠 Smart Home

home/livingroom/temperature
home/kitchen/smoke
home/garage/door/state
home/all/lights/control

🏭 Fabrik

factory/line-A/machine-3/temp
factory/line-A/machine-3/rpm
factory/quality/line-B/defects
factory/energy/total/kwh

đŸ„ Krankenhaus

hospital/ward-3/bed-12/hr
hospital/ward-3/bed-12/spo2
hospital/icu/alerts/critical
hospital/pharmacy/inventory

🚩 Verkehr

traffic/berlin/junction-5/light
traffic/berlin/A100/flow
traffic/berlin/A100/incident
traffic/berlin/parking/p3/free

🚛 LKW-Flotte

fleet/truck-42/location
fleet/truck-42/fuel
fleet/truck-42/door/cargo
fleet/dispatcher/orders/new

đŸŒ± Smart Garden

garden/zone-A/moisture
garden/zone-A/light
garden/weather/forecast
garden/pump/zone-A/control
Gemeinsames Muster: domain / standort / gerĂ€t / messwert. Sucht euch eine Konvention und haltet sie konsequent durch — sonst wird die Wildcard-Suche spĂ€ter ein Albtraum.

Topic-Strings — wie Datei-Pfade

Topics sind hierarchische Strings, getrennt mit / — fast wie ein Datei-Pfad. So bringt ihr Ordnung in tausende Nachrichten.

Beispiel fĂŒr ein Smart Home

home/livingroom/temperature      ← konkret: Wohnzimmer
home/livingroom/humidity         ← anderes Sensor-Topic
home/kitchen/temperature         ← anderer Raum
home/garage/door/state           ← tiefer geschachtelt
factory/line-A/machine-3/status   ← industrielles Beispiel
Konvention: Hierarchie geht vom Groben zum Feinen — standort / bereich / gerĂ€t / messwert. Klein-buchstaben, keine Leerzeichen.
Wichtig: Topics werden bei der ersten Nachricht implizit erzeugt — kein „Setup" beim Broker nötig. Einfach publizieren, fertig.
đŸ€”

Denkt mal kurz mit


Ihr betreut ein Smart Building: 50 RĂ€ume, jeder mit 5 Sensoren.

Das sind 250 Topics insgesamt. Eine Monitoring-App will alle Temperaturen sehen.

💭 WĂŒrdet ihr im Code wirklich 50 mal subscribe(...) aufrufen?

Wildcards — nicht nur ein Topic abonnieren

Was, wenn ihr alle Temperaturen aus allen RĂ€umen wollt? DafĂŒr gibt's zwei Joker-Zeichen.

➕ Single-Level: +

Ersetzt genau eine Ebene des Topic-Pfads.

home/+/temperature

Matcht:

  • home/livingroom/temperature ✓
  • home/kitchen/temperature ✓
  • home/garage/door/state ✗ (eine Ebene zu tief)

#ïžâƒŁ Multi-Level: #

Ersetzt alles ab dieser Position. Darf nur am Ende stehen.

home/#

Matcht:

  • home/livingroom/temperature ✓
  • home/garage/door/state ✓
  • factory/line-A/machine-3 ✗ (anderer Stamm)
Anwendung: Eine Monitoring-App abonniert factory/# — und kriegt alles, was in der Fabrik passiert. Eine Raum-App nimmt home/livingroom/+.

Wildcard-Praxis — matcht's oder matcht's nicht?

Vier Subscribe-Patterns links, sieben publizierte Topics rechts. Welche Nachrichten kriegt wer?

🎯 Vier Abonnent:innen

  • A: home/livingroom/temperature
  • B: home/+/temperature
  • C: home/kitchen/#
  • D: home/#

📡 Sieben publizierte Nachrichten

TopicABCD
home/livingroom/temperature✅✅—✅
home/kitchen/temperature—✅✅✅
home/kitchen/smoke——✅✅
home/kitchen/fridge/temp——✅✅
home/garage/door———✅
factory/line-A/temp————
home————
⚠ SubtilitĂ€ten: + matcht genau eine Ebene — home/kitchen/fridge/temp hat zu viele fĂŒr home/+/temperature. Und home/# matcht nicht nur „home" allein — es braucht mindestens eine Ebene danach.

Hands-on — mosquitto im Terminal

Auf jedem Linux/Mac mit zwei Befehlen testbar. Probiert das daheim aus!

đŸ“„ Terminal 1 — Subscriber

# Installation (einmalig):
$ brew install mosquitto    # Mac
$ apt install mosquitto-clients  # Linux

# Auf Topic hören:
$ mosquitto_sub -h "test.mosquitto.org" \
                -t "htw/test/#"

Bleibt offen, wartet auf Nachrichten.

đŸ“€ Terminal 2 — Publisher

# Eine Nachricht senden:
$ mosquitto_pub -h "test.mosquitto.org" \
                -t "htw/test/temp" \
                -m "22.3"

# im ersten Terminal seht ihr:
22.3

Nachricht erscheint sofort im Subscriber.

Public Broker zum Testen: test.mosquitto.org (Port 1883, ohne Passwort). Praktisch fĂŒr die Lab-Übung — keine eigene Installation nötig.

Python — der „Hello, MQTT!"-Code

In Python heißt die Standard-Library paho-mqtt — pip install paho-mqtt. Hier ein minimaler Subscriber:

đŸ“„ Subscriber

import paho.mqtt.client as mqtt

def on_message(client, userdata, msg):
    print(f"{msg.topic}: {msg.payload.decode()}")

client = mqtt.Client()
client.on_message = on_message
client.connect("test.mosquitto.org", 1883)
client.subscribe("htw/test/#")
client.loop_forever()

đŸ“€ Publisher

import paho.mqtt.client as mqtt
import time, random

client = mqtt.Client()
client.connect("test.mosquitto.org", 1883)

while True:
    temp = 20 + random.random() * 5
    client.publish("htw/test/temp", str(temp))
    time.sleep(5)
Das war's. Mehr braucht ihr fĂŒr einen funktionierenden IoT-Prototypen nicht. Vergleicht mal mit dem HTTP-Code aus letzter VL — da musstet ihr Flask hochziehen + Routen registrieren.

Volles Smart Home — wie alles zusammenspielt

Drei Sensoren publizieren, drei Konsumenten abonnieren mit unterschiedlichen Wildcards — der Broker macht den Rest.

đŸ“€ Publisher (Sensoren)

  • đŸŒĄïž Temp-Sensor Wohnzimmer: home/livingroom/temp
  • đŸšȘ Garagentor: home/garage/door
  • đŸ”„ Rauchmelder KĂŒche: home/kitchen/smoke

đŸ“„ Subscriber (Apps)

  • đŸ“± Handy-App: home/# → bekommt alles
  • 📊 Dashboard: home/+/temp → nur Temperaturen
  • 🚹 Sirene: home/+/smoke + home/garage/door → nur Alarm-relevantes

🔀 Wer kriegt was beim Broker?

Sensor publiziert aufđŸ“± Handy📊 Dashboard🚹 Sirene
home/livingroom/temp✅✅—
home/garage/door✅—✅
home/kitchen/smoke✅—✅
Pointe: Sensoren Ă€ndern sich nicht, wenn eine neue App dazukommt. Eine neue Smart-Lampe abonniert einfach home/livingroom/temp — und schaltet ab 25°C auf rot. Niemand muss umkonfiguriert werden.
đŸ€”

Denkt mal kurz mit


Drei verschiedene MQTT-Nachrichten gehen unterwegs verloren. Bei welcher davon ist das schlimm — und warum?

đŸŒĄïž Temperatur

Sensor publiziert alle 60s.
Eine Messung geht verloren.

Schlimm?

🚹 Einbruchsalarm

Bewegungsmelder schlÀgt an.
Die Sirene kriegt's nicht mit.

Schlimm?

💳 Bezahlung

BestÀtigung wird dupliziert.
Kunde zahlt 2× das Gleiche.

Schlimm?

💭 Soll MQTT fĂŒr alle drei dieselbe Garantie bieten? Oder braucht ihr verschiedene „Sicherheitsstufen" pro Nachricht?

Quality of Service — wie sicher soll's ankommen?

MQTT bietet drei Zustellungs-Garantien. Denkt sie wie verschiedene Versand-Arten:

📹 QoS 0 — fire & forget

„At most once"

Wie eine Postkarte: rausgeschickt, fertig. Kann verloren gehen, kein Re-Try.

Nutzt fĂŒr: Temperatur-Sensor — nĂ€chste Messung kommt eh in 60s.

đŸ“© QoS 1 — at least once

Mindestens 1×

Wie ein Einschreiben: EmpfĂ€nger bestĂ€tigt. Kommt sicher an — aber evtl. mehrfach.

Nutzt fĂŒr: Alarm-Nachricht — soll garantiert ankommen, Duplikat egal.

📩 QoS 2 — exactly once

Genau 1×

Wie Einschreiben mit RĂŒckschein + ZĂ€hler. 4-Wege-Handshake, kein Duplikat.

Nutzt fĂŒr: Banking, Bestellungen — wo Duplikate schaden wĂŒrden.

Faustregel: QoS 0 als Default — sparsam mit Bandbreite. Höher gehen nur, wenn ihr eine konkrete BegrĂŒndung habt. QoS 2 ist teuer (4 Pakete pro Nachricht statt 1).

QoS im Code — drei Zeilen, drei Garantien

In Python ist QoS ein einzelner Parameter — sowohl beim Publish als auch beim Subscribe.

đŸ“€ Publisher mit QoS

# QoS 0 — Temperaturmessung
client.publish("home/wz/temp",
              "22.3", qos=0)

# QoS 1 — Bewegungsalarm
client.publish("home/door/alarm",
              "intrusion", qos=1)

# QoS 2 — Bezahlvorgang
client.publish("shop/payment",
              payload_json, qos=2)

đŸ“„ Subscriber mit QoS

# Subscriber wÀhlt maximalen QoS
client.subscribe("home/+/temp", qos=0)
client.subscribe("home/+/alarm", qos=1)
client.subscribe("shop/payment", qos=2)

# Effektiver QoS = min(pub, sub)
# Publisher=2, Subscriber=1 → tatsĂ€chl. 1
Wichtig: Der effektive QoS ist immer das Minimum aus Publisher- und Subscriber-Wahl. Wenn der Publisher mit QoS 2 sendet, der Subscriber aber nur QoS 0 anfordert, kommt's als QoS 0 raus.
Default in paho-mqtt: qos=0, wenn ihr nichts angebt. Bewusst, weil's der hÀufigste Fall ist.

Vier nĂŒtzliche MQTT-Extras

Funktionen, die euch das Leben leichter machen — kurz im Überblick:

💓 Keep-Alive

Client sendet alle X Sekunden ein Mini-Ping. Wenn er ausfÀllt, merkt's der Broker und markiert ihn offline.

đŸ’Ÿ Retained Messages

Broker speichert die letzte Nachricht pro Topic. Neue Subscriber kriegen sofort den letzten Stand — perfekt fĂŒr „aktuelle Temperatur".

💀 Last Will

Wenn ein Client ungeplant abstĂŒrzt, schickt der Broker eine vorher hinterlegte „Abschieds-Nachricht" — andere können reagieren.

🔍 $SYS-Topics

Broker veröffentlicht eigene Statistiken (Clients, Bytes, Uptime) unter $SYS/.... Praktisch zum Monitoring.

Take-away: Ihr braucht das nicht alles auf einmal. Aber gut zu wissen, dass MQTT diese Mechanismen schon eingebaut hat — nicht selbst ĂŒber HTTP nachbasteln mĂŒssen.

Retained Messages in Aktion — die Zeitleiste

Was passiert, wenn ein neuer Subscriber spĂ€t einsteigt? Genau dafĂŒr gibt's Retained Messages.

Szenario: Temperatursensor + Dashboard

ZeitWas passiertBroker speichertDashboard sieht
t=0sSensor: publish("home/temp", "22.1", retain=True)22.1noch nicht da
t=60sSensor: publish("home/temp", "22.3", retain=True)22.3 (ersetzt)noch nicht da
t=120sSensor: publish("home/temp", "22.5", retain=True)22.5 (ersetzt)noch nicht da
t=150sđŸ“± Dashboard startet + abonniert home/temp22.522.5 — sofort!
t=180sSensor: publish("home/temp", "22.6", retain=True)22.622.6

⚠ Ohne Retain

Dashboard startet → Broker hat nichts gespeichert → leeres Display, bis der Sensor das nĂ€chste Mal sendet (in bis zu 60s!).

✅ Mit Retain

Dashboard startet → Broker liefert sofort den letzten Wert → Display sofort gefĂŒllt. Perfekt fĂŒr aktuelle-Stand-Anzeigen.

Faustregel: Status-Werte (Temperatur, TĂŒrzustand, Online-Status) → retain=True. Events (Knopfdruck, Alarm) → retain=False.

MQTT vs. HTTP — wann nehme ich was?

HTTP / RESTMQTT
KommunikationsmodellRequest / Response (Pull)Publish / Subscribe (Push)
Overhead pro Nachricht~ 200-500 Byte (Header)~ 2-5 Byte (Mini-Header)
Wer ist „dumm"?Client kennt Server-URLNiemand kennt jemanden direkt
Stateful?Zustandslos — jede Anfrage neuPersistente Sessions möglich
Latenz fĂŒr UpdatesHoch (Polling)Sehr niedrig (Push)
StÀrkeWeb-APIs, anfragen + transformierenIoT, Telemetrie, viele kleine GerÀte
Tools / Debuggingcurl, Browser, Postmanmosquitto-CLI, MQTT-Explorer
Kombi-Hinweis: In der Praxis nutzen viele Systeme beide — HTTP fĂŒr Konfiguration + REST-API, MQTT fĂŒr Echtzeit-Telemetrie. Schließen sich nicht aus.

Wo MQTT heute wirklich lÀuft

🏠 Smart Home

Home Assistant, Zigbee2MQTT, Tasmota — die meisten Bastler-Stacks im DIY-IoT.

🏭 Industrie 4.0

Sensoren in Maschinen, SPS-Kopplung, OPC-UA-Bridges — MQTT ist hier de-facto Standard.

🚗 Connected Cars

BMW, Daimler & Co nutzen MQTT fĂŒr Telemetrie zwischen Fahrzeug und Backend (Position, Status).

đŸ›°ïž Satelliten-Telemetrie

Der ursprĂŒngliche Einsatzfall — bis heute aktiv. Wenig Bandbreite, viele Sensoren.

đŸ“± Mobile Push

Facebook Messenger nutzt MQTT seit Jahren fĂŒr Chat-Push auf Handys (akkuschonend).

đŸŒĄïž Wetterstationen

DIY und kommerziell — Sensor-Netze melden Messwerte an zentrale Dashboards.

Gemeinsam: Viele Sender, wenige EmpfĂ€nger, kleine Nachrichten, oft schwache GerĂ€te. Genau das Profil, fĂŒr das MQTT designt wurde.

Deep-Dive — Fabrik-Linie mit MQTT

Eine konkrete Fertigungslinie. So sieht's in echt aus — und ihr seht direkt, warum Wildcards goldwert sind.

🏭 Topic-Hierarchie

# Pattern: factory/{line}/{machine}/{sensor}
factory/line-A/machine-1/temp
factory/line-A/machine-1/rpm
factory/line-A/machine-1/state
factory/line-A/machine-2/temp
factory/line-A/machine-2/rpm
factory/line-B/machine-1/temp
factory/line-B/machine-1/rpm
factory/line-B/machine-2/temp

2 Linien × 2 Maschinen × 3 Sensoren = 12 Topics

đŸ‘„ Wer abonniert wie?

  • đŸ§‘â€đŸ’Œ Schichtleitung Linie A:
    factory/line-A/# — alles aus Linie A
  • đŸŒĄïž Temperatur-Monitor:
    factory/+/+/temp — nur Temperaturen
  • 🔧 Wartung Maschine 1:
    factory/+/machine-1/# — beide Linien, nur Maschine 1
  • 📊 Werks-Dashboard:
    factory/# — alles fĂŒr die Übersicht
Skalierung: Wenn morgen Linie C dazukommt mit 5 neuen Maschinen — kein Code muss geĂ€ndert werden. Die Dashboards mit factory/# oder factory/+/+/temp picken automatisch alles Neue mit auf.
Genau deshalb ist MQTT in der Industrie so beliebt — System wĂ€chst, Topic-Struktur skaliert mit, ohne Re-Architecting.

🧠 Quiz 1 — QoS wĂ€hlen

Ihr habt einen Sensor, der Bewegungsalarme im Hauseingang sendet. Welcher QoS-Level passt?

AQoS 0 — die Nachricht kann auch verloren gehen, ist nicht so wichtig.
BQoS 1 — Alarm muss ankommen, Duplikat ist akzeptabel.
CQoS 2 — egal welche Kosten, Hauptsache exakt einmal.

✅ Lösung — QoS wĂ€hlen

BQoS 1 — Alarm muss ankommen, Duplikat ist akzeptabel.
BegrĂŒndung: Bei Alarmen ist „at least once" der Sweet Spot — Verlust wĂ€re ein Sicherheitsproblem, ein Duplikat löst halt zweimal denselben Alarm aus (kein Drama). QoS 2 wĂ€re Overkill und teurer (4 Pakete statt 2).

🧠 Quiz 2 — Topic-Design

Eine Monitoring-App will alle Temperatur-Werte aus allen RĂ€umen im Haus empfangen. Welches Subscribe-Topic ist korrekt?

Ahome/livingroom/temperature
Bhome/+/temperature
Chome/#
D+/+/temperature

✅ Lösung — Topic-Design

Bhome/+/temperature
Warum nicht C? home/# matcht alles — auch TĂŒrsensoren, Licht, etc. Zu breit. Warum nicht D? Es matcht auch factory/line/temperature — verlĂ€sst das Haus. B ist prĂ€zise: nur Temperatur, nur im Haus, in beliebigen RĂ€umen.

🧠 Quiz 3 — Architektur-Frage

Eine IoT-Wetterstation publiziert alle 60s ihre Temperatur. Eine Dashboard-App soll (1) sofort beim Start den aktuellen Wert sehen und (2) sofort wissen, wenn die Station ausfÀllt. Welche zwei MQTT-Features braucht ihr?

AKeep-Alive + $SYS-Topics — Broker meldet den Offline-Status.
BRetained Message + Last Will — letzte Temperatur sofort verfĂŒgbar, beim Crash automatische „offline"-Nachricht.
CQoS 2 + Wildcards — exakt einmal Zustellung schĂŒtzt vor Ausfall.
DPersistent Session + Subscribe — Session bleibt offen, alles wird zwischengespeichert.

✅ Lösung — Architektur-Frage

BRetained Message + Last Will — letzte Temperatur sofort verfĂŒgbar, beim Crash automatische „offline"-Nachricht.
Warum B? Retained Message löst Punkt 1 — neuer Subscriber kriegt sofort den letzten gespeicherten Wert. Last Will löst Punkt 2 — beim Verbindungs­abbruch der Station schickt der Broker automatisch die hinterlegte „offline"-Nachricht an alle Subscriber. Genau dafĂŒr wurden beide Mechanismen gebaut.

Take-aways aus heute

  • Publish/Subscribe entkoppelt Sender + EmpfĂ€nger — ein Broker sitzt dazwischen und vermittelt.
  • MQTT = leichtgewichtiges Pub/Sub-Protokoll ĂŒber TCP, ideal fĂŒr IoT mit vielen kleinen GerĂ€ten.
  • Topics sind hierarchische Strings (home/wz/temp). Wildcards: + (eine Ebene), # (alles drunter, nur am Ende).
  • 3 QoS-Stufen: 0 = Postkarte, 1 = Einschreiben, 2 = Einschreiben+BestĂ€tigung. Default = 0.
  • Tools: mosquitto_pub/mosquitto_sub im Terminal, paho-mqtt in Python.
  • MQTT vs. HTTP: Push vs. Pull — beide haben ihren Platz, ihr könnt sie kombinieren.

Fragen?

Im Übung: Pub/Sub-System mit mosquitto + Python — Sensor zu App.

Prof. Dr. Alexandra Mikityuk
HTW Berlin · BĂŒro Raum 308
Probiert test.mosquitto.org aus — kostet nichts und lĂ€uft sofort!

© 2026 HTW Berlin · Verteilte Systeme

1 /