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

Sensordaten aus MQTT-Nachrichten lesen

Nach dieser Lektion: Ich kann aus einer MQTT-Nachricht das Thema und den Messwert lesen.

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

Wie ein Sensor seine Messwerte meldet

Eine MQTT-Nachricht (MQTT steht für Message Queuing Telemetry Transport) besteht aus einem Thema und einer Nutzlast. Das Thema sagt, woher ein Messwert kommt, die Nutzlast ist der Messwert selbst.

So melden Temperaturfühler, Türkontakte und Zähler in einem Haus ihre Werte. Wer das Format lesen kann, kann jeden Sensor auswerten, der so sendet.

Am Ende dieser Lektion

Notiz

Ich kann aus einer MQTT-Nachricht das Thema und den Messwert lesen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Sensorein Gerät, das etwas misst und den Wert sendet
Nachrichtein Thema mit einer Nutzlast
Themader Name, unter dem eine Nachricht läuft (Topic)home/door/state
Nutzlastder Inhalt der Nachricht, immer ein Text (Payload)21
Brokerder Server, der Nachrichten annimmt und weitergibt

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

Eine Nachricht hat ein Thema und eine Nutzlast

Ein Sensor schickt seine Nachricht an den Broker. Der Broker ist ein Server, der Nachrichten annimmt und weitergibt. Der Sensor weiß nicht, wer sie liest.

Jede Nachricht hat ein Thema und eine Nutzlast. Das Thema ist wie die Adresse, die Nutzlast ist der Inhalt, zum Beispiel eine Zahl oder das Wort open.

Beispiel: die vier Themen im Lab

ThemaWas es meldetForm der Nutzlast
home/livingroom/temperatureTemperatur im Wohnzimmerganze Zahl
home/livingroom/humidityLuftfeuchte im Wohnzimmerganze Zahl
home/kitchen/temperatureTemperatur in der Kücheganze Zahl
home/door/stateZustand der Türopen oder closed

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

Das Lab hat einen Broker und vier Sensoren

Das Lab startet zwei Container: einen Broker und einen Container, der die Sensoren spielt. Es gibt kein Browserfenster, Sie nutzen das Terminal.

Der Befehl hört alle Themen unter home ab. Die Option -v zeigt das Thema vor jedem Wert, -C 8 hört nach 8 Nachrichten auf und -W 10 nach 10 Sekunden. Die Zahlen hängen vom Moment ab, in dem Sie starten.

Acht Nachrichten aller Sensoren lesen

Befehl
docker exec broker mosquitto_sub -t 'home/#' -v -C 8 -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.

Ein Thema besteht aus Ebenen wie ein Pfad

Ein Thema ist in Ebenen geschrieben, die ein Schrägstrich trennt, wie ein Pfad. Das Thema home/kitchen/temperature hat drei Ebenen: den Ort, den Raum und die Größe.

So können Sie ein Thema zerlegen. In Python trennt split("/") die Ebenen, und die Nutzlast steht hinter dem ersten Leerzeichen der Zeile.

Beispiel: eine Zeile zerlegen

TeilWertWie man ihn findet
Ganze Zeilehome/kitchen/temperature 19Ausgabe von mosquitto_sub -v
Themahome/kitchen/temperaturealles vor dem ersten Leerzeichen
Nutzlast19alles danach
Raumkitchenzweite Ebene des Themas

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

Thema und Nutzlast aus einer Zeile holen

Code: python
# Eine Zeile, wie mosquitto_sub sie mit -v ausgibt: Thema, Leerzeichen, Nutzlast
zeile = "home/kitchen/temperature 19"
position = zeile.find(" ")
thema = zeile[:position]
nutzlast = zeile[position + 1:]
teile = thema.split("/")
print("Thema:", thema)
print("Nutzlast:", nutzlast)
print("Raum:", teile[1])
print("Größe:", teile[2])
zahl = int(nutzlast)
print("Zahl plus 1:", zahl + 1)
print("Text plus 1:", nutzlast + "1")
# Ändern Sie die Zeile in "home/door/state open". Was ergibt int(nutzlast)?

Ein häufiger Fehler

Warnung

Viele denken, die Nutzlast sei schon eine Zahl. Sie kommt aber als Text an: "19" plus "1" ergibt "191". Wandeln Sie sie mit int() um, bevor Sie rechnen, und prüfen Sie vorher, ob es eine Zahl ist. Die Tür meldet ein Wort.

Ein einzelnes Thema liefert nur diese Werte

Wer nur einen Wert braucht, nennt das Thema genau. Der nächste Befehl hört nur die Temperatur im Wohnzimmer ab und hört nach drei Nachrichten auf.

Die Antwort hat drei Zeilen. Jede beginnt mit home/livingroom/temperature, dahinter steht eine ganze Zahl. Welche Zahlen es sind, hängt vom Zeitpunkt ab.

Drei Temperaturen aus dem Wohnzimmer lesen

Befehl
docker exec broker mosquitto_sub -t home/livingroom/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.

Mehrere Messwerte eines Themas mitteln

Code: python
# Mehrere Messwerte desselben Themas mitteln
zeilen = [
    "home/livingroom/temperature 20",
    "home/livingroom/humidity 41",
    "home/livingroom/temperature 22",
    "home/livingroom/temperature 21",
]
summe = 0
anzahl = 0
for zeile in zeilen:
    position = zeile.find(" ")
    if zeile[:position] == "home/livingroom/temperature":
        summe = summe + int(zeile[position + 1:])
        anzahl = anzahl + 1
print("Messwerte:", anzahl)
print("Mittelwert:", summe / anzahl)

Ü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.