Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Publish und Subscribe mit Themenfiltern

Nach dieser Lektion: Ich kann erklären, wie Publish und Subscribe arbeiten, und Themenfilter mit + und # anwenden.

Lektion, 55 Min.2 BefehleMQTT-Nachrichten-Lab: wie Geräte mit einem Broker sprechen, im Browser

Wie Publish und Subscribe Nachrichten verteilt

Publish und Subscribe heißt: Ein Gerät veröffentlicht eine Nachricht unter einem Thema, und andere Geräte abonnieren dieses Thema. Der Broker verbindet beide, sie kennen sich nicht.

So kann eine Heizung die Temperatur lesen, die ein Sensor sendet, ohne dass einer vom anderen weiß. Themenfilter legen fest, welche Nachrichten ein Abonnement erreichen.

Am Ende dieser Lektion

Notiz

Ich kann erklären, wie Publish und Subscribe arbeiten, und Themenfilter mit + und # anwenden.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Publisheine Nachricht unter einem Thema veröffentlichen
Subscribeein Thema oder einen Filter abonnieren
Themenfilterein Muster, das mehrere Themen erfassthome/+/temperature
Plus-Zeichensteht für genau eine Ebene+
Rautezeichensteht für alle Ebenen darunter, nur am Ende#
Retainedder Broker behält die letzte Nachricht eines Themas

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Sendende und Lesende kennen sich nicht

Ein Gerät veröffentlicht (Publish) eine Nachricht an den Broker. Ein anderes Gerät abonniert (Subscribe) ein Thema beim Broker.

Kommt eine Nachricht an, gibt der Broker sie an alle weiter, die dieses Thema abonniert haben. Das kann ein Gerät sein, zehn oder keines. Der Sensor muss das nicht wissen.

Einen Broker im Kleinen nachbauen

Code: python
# Ein Broker im Kleinen: wer abonniert, bekommt die Nachricht
abos = {"licht": "home/door/state", "heizung": "home/kitchen/temperature"}
nachricht = "home/door/state"
for name in abos:
    if abos[name] == nachricht:
        print(name, "erhält die Nachricht", nachricht)
print("Der Sender kennt keinen von beiden.")
# Fügen Sie ein drittes Abonnement mit demselben Thema hinzu.

Ein Filter kann mehrere Themen erfassen

Ein Abonnement nennt ein Thema oder einen Themenfilter. Das Zeichen + steht für genau eine Ebene. Das Zeichen # steht für alle Ebenen darunter und darf nur am Ende stehen.

Der Filter home/+/temperature passt auf die Temperatur in jedem Raum. Der Filter home/# passt auf alles unter home, auch auf home selbst.

Beispiel: welcher Filter auf welches Thema passt

FilterThemaPasst?
home/+/temperaturehome/kitchen/temperatureja
home/+/temperaturehome/door/statenein
home/#home/door/stateja
home/+home/door/statenein, das Thema hat drei Ebenen
home/#homeja, # passt auch auf null Ebenen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Einen Filter Ebene für Ebene prüfen

Code: python
# Ein Filter und ein Thema, Ebene für Ebene
muster = "home/+/temperature"
thema = "home/kitchen/temperature"
m = muster.split("/")
t = thema.split("/")
print("Ebenen im Filter:", len(m))
print("Ebenen im Thema:", len(t))
for i in range(len(m)):
    if m[i] == "+":
        print("Ebene", i, ": Platzhalter, passt auf", t[i])
    elif m[i] == t[i]:
        print("Ebene", i, ": gleich")
    else:
        print("Ebene", i, ": verschieden")

Der Filter mit Plus erfasst alle Temperaturen

Der nächste Befehl abonniert den Filter home/+/temperature und hört nach drei Nachrichten auf. Er erfasst die Küche und das Wohnzimmer, aber nicht die Luftfeuchte und nicht die Tür.

Die Antwort hat drei Zeilen. Jede beginnt mit home/kitchen/temperature oder home/livingroom/temperature, dahinter steht eine ganze Zahl. Die Zahlen hängen vom Zeitpunkt ab.

Alle Temperaturen mit einem Filter abonnieren

Befehl
docker exec broker mosquitto_sub -t 'home/+/temperature' -v -C 3 -W 10

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine gespeicherte Nachricht wartet auf Späte

Normalerweise erhält ein Abonnement nur Nachrichten, die nach dem Abonnieren veröffentlicht werden. Eine Nachricht, die als retained (gespeichert) gesendet wurde, behält der Broker.

Wer später abonniert, bekommt sie sofort. Die Tür im Lab meldet so ihren Zustand. Die Antwort ist eine Zeile: home/door/state und dahinter open oder closed.

Den letzten Zustand der Tür sofort lesen

Befehl
docker exec broker mosquitto_sub -t home/door/state -v -C 1 -W 5

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

So veröffentlicht man selbst eine Nachricht

Zum Veröffentlichen gibt es das Werkzeug mosquitto_pub. Ein Beispiel, hier nur gezeigt und nicht gestartet, sieht so aus:

docker exec broker mosquitto_pub -t home/notes/beispiel -r -m hallo

Die Option -t nennt das Thema, -m die Nutzlast und -r macht die Nachricht retained. Eigene Nachrichten senden Sie in der Abgabe des Labs.

Ein häufiger Fehler

Warnung

Viele denken, + passe auf beliebig viele Ebenen. Das Zeichen + steht aber für genau eine Ebene. Für mehrere Ebenen brauchen Sie # am Ende. Zählen Sie darum zuerst die Ebenen von Filter und Thema.

Über dieses Lab und seinen Quellcode: MQTT-Nachrichten-Lab: wie Geräte mit einem Broker sprechen, im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.