Wie sagt ein Sensor es dem Handy?
Ein Türsensor, ein Thermometer und dein Handy sind drei verschiedene Geräte. Der Sensor soll nicht wissen müssen, dass es dein Handy gibt, und das Handy soll nicht ständig nachfragen müssen. Ein kleines Nachrichtensystem namens MQTT löst das: Die Geräte geben ihre Nachrichten bei einer Vermittlungsstelle ab, und wer sich dafür interessiert, holt sie dort ab.
Am Ende dieser Lektion
Notiz
Ich kann mithilfe von Topics die Nachrichten lesen, die Geräte an einen MQTT-Broker senden.
Schlüsselwörter
- Broker: die Vermittlungsstelle, die jede Nachricht annimmt und weitergibt.
- Veröffentlichen (publish): eine Nachricht mit einem Topic als Etikett an den Broker schicken.
- Abonnieren (subscribe): dem Broker sagen, welche Topics du hören willst.
- Topic: das Etikett einer Nachricht, geschrieben wie ein Pfad, zum Beispiel
home/door/state. - Gehaltene Nachricht (retained): die letzte Nachricht eines Topics, die der Broker behält und jedem gibt, der sich später anmeldet.
- Platzhalter (wildcard): ein Zeichen in einem Abonnement, das auf mehr als ein Topic passt.
Zum Einstieg: was du schon weißt
Notiz
Antworte im Kopf. 1. Woraus besteht der Pfad /home/kim/notes.txt? 2. Wenn du einen Brief einwirfst, musst du dann wissen, wer ihn liest? 3. Wofür steht das * in *.txt, wenn du Dateien auflistest? Alle drei Ideen kommen in dieser Lektion wieder vor. Antworten: aus Ordnernamen und einer Datei, getrennt durch Schrägstriche; nein, die Adresse genügt; für beliebige Zeichen.
Bevor du anfängst
Notiz
Klicke oben in der Leiste dieser Lektion auf Lab starten und warte, bis dort steht, dass es läuft. Es gibt zwei Container: sensors, der ununterbrochen veröffentlicht, und broker, der die Nachrichten weitergibt. Im Browser öffnet sich nichts, also nutze das Terminal, in dem docker exec broker einen Befehl im Broker ausführt. Jede Schaltfläche Ausführen unten tippt ihren Befehl ins Terminal deines Labs, einen nach dem anderen in derselben Sitzung. Wenn du zuschauen oder eigene Befehle tippen willst, klicke in der Leiste auf Terminal öffnen (neuer Tab).
Ein Abonnent hört, was veröffentlicht wird
Dieser Befehl abonniert home/#, also alle Topics unterhalb von home. -v gibt vor jeder Nachricht das Topic aus, -C 8 hört nach 8 Nachrichten auf und -W 10 nach 10 Sekunden, sodass er immer endet. Jede Zeile besteht aus einem Topic, einem Leerzeichen und einem Wert. Du siehst die vier Topics der Sensoren: Die beiden Temperaturen und die Luftfeuchtigkeit sind ganze Zahlen, und der Türzustand ist open oder closed. Die ersten Zeilen, die ankommen, sind gehaltene Nachrichten, den Grund siehst du weiter unten. Die genauen Zahlen hängen von der Sekunde ab, in der du auf Ausführen geklickt hast, deine sehen also anders aus.
docker exec broker mosquitto_sub -t 'home/#' -v -C 8 -W 10Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Topic ist ein Pfad, und ein Platzhalter passt auf einen Teil davon
Topics werden Ebene für Ebene geschrieben, wie Ordner. # passt auf alle Ebenen darunter, wie eben benutzt. + passt auf genau eine Ebene. home/+/temperature passt deshalb auf die Temperatur in jedem Raum: drei Zeilen, jede beginnt mit home/kitchen/temperature oder home/livingroom/temperature und endet mit einer ganzen Zahl. Luftfeuchtigkeit und Tür erscheinen nicht, weil sie nicht zum Muster passen.
docker exec broker mosquitto_sub -t 'home/+/temperature' -v -C 3 -W 10Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine gehaltene Nachricht wartet auf den späten Abonnenten
Dieser Befehl hört auf die Tür und will nur eine Nachricht. Er antwortet sofort mit einer Zeile, home/door/state gefolgt von open oder closed, weil der Türsensor seine Nachrichten als gehalten markiert: Der Broker behält die letzte und gibt sie jedem, der abonniert. Vergleiche jetzt mit der Luftfeuchtigkeit, die nicht gehalten wird. Ein neuer Abonnent hört nichts, bis der Sensor das nächste Mal veröffentlicht, die Antwort kann also bis zu eine Sekunde länger dauern, und dann ist es eine Zeile mit einer ganzen Zahl.
docker exec broker mosquitto_sub -t home/door/state -v -C 1 -W 5Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
docker exec broker mosquitto_sub -t home/livingroom/humidity -v -C 1 -W 5Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Prüfe dich
Tipp
Warum antwortete die Tür sofort und die Luftfeuchtigkeit musste warten? Antwort: Die Türnachrichten werden gehalten, der Broker hatte die letzte also schon, während die Luftfeuchtigkeit nur in dem Moment ankommt, in dem sie veröffentlicht wird.
Du kannst auch selbst veröffentlichen
Jeder, der den Broker erreicht, kann veröffentlichen. Dieser Befehl veröffentlicht hello from me unter einem eigenen Topic, home/notes/first, und -r macht es zu einer gehaltenen Nachricht. Er gibt nichts aus. Lies sie dann zurück: Die Antwort lautet jedes Mal genau home/notes/first hello from me, weil deine die letzte Nachricht in diesem Topic ist.
docker exec broker mosquitto_pub -t home/notes/first -r -m 'hello from me'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
docker exec broker mosquitto_sub -t home/notes/first -v -C 1 -W 3Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele denken, ein Abonnent frage den Sensor nach einem Messwert. Das tut er nicht. Der Sensor veröffentlicht, wann er will, und der Broker gibt die Nachricht nur an den weiter, der in diesem Moment abonniert hat, und genau dafür gibt es gehaltene Nachrichten. Und „gehalten“ heißt nicht „für immer aufbewahrt“: Die nächste Nachricht in diesem Topic ersetzt sie, und der Broker dieses Labs vergisst alles, wenn er stoppt.
Was dieses Lab weglässt
Ein echtes Gerät verbindet sich über ein Netzwerk mit einem Broker. Es meldet sich mit Name und Passwort oder mit einem Zertifikat an, und die Verbindung ist verschlüsselt, damit unterwegs niemand die Nachrichten lesen oder ändern kann. Dieses Lab lässt all das weg: Der Broker lässt jeden in deiner Kopie alles lesen und schreiben. Das ist hier nur sicher, weil nichts außerhalb deiner Kopie ihn erreichen kann. Richte einen echten Broker nicht so ein.
Abschlusskontrolle
Tipp
Antworte, ohne zurückzublättern. 1. An wen schickt ein Sensor seine Nachricht? 2. Was ist ein Topic? 3. Worauf passt home/+/temperature, und worauf passt home/#? 4. Was macht eine gehaltene Nachricht? Antworten: an den Broker, nie direkt an einen Abonnenten; das Etikett einer Nachricht, geschrieben wie ein Pfad; auf die Temperatur in irgendeinem einzelnen Raum und auf alle Topics unterhalb von home; der Broker behält die letzte und gibt sie jedem, der sich später anmeldet.
Für Lehrkräfte
Tipp
Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab bearbeitet wird: Die Schritte und die Ausführen-Schaltflächen sind die Lektion, und das Lab ist die Kopie jedes Lernenden. Das Lab besteht aus zwei Containern in einem Netzwerk, einem handelsüblichen MQTT-Broker und einem Skript mit erfundenen Sensoren, und nichts hier bewertet sich selbst: Die Lernenden geben die Befehle ab, die sie ausgeführt haben, mit dem, was sie ausgaben, und einen Satz dazu, wofür eine gehaltene Nachricht da ist. Kernpunkte: 1. Ein Broker sitzt zwischen denen, die veröffentlichen, und denen, die abonnieren. 2. Ein Topic ist ein Pfad, und + und # sind Platzhalter. 3. Eine gehaltene Nachricht ist die letzte, aufbewahrt für späte Abonnenten. Häufiger Fehler: zu glauben, ein Abonnent frage den Sensor nach einem Wert. Material: das Lab und sein Terminal. Tipp: Lassen Sie vorhersagen, wie viele Zeilen ein Platzhalter ausgibt, bevor der Befehl läuft. Die Messwerte folgen einem festen Zyklus, aber wo er gerade steht, hängt davon ab, wann ein Lernender auf Ausführen klickt, zwei Lernende sehen also verschiedene Zahlen. Das Lab lässt die Anmeldung und die Verschlüsselung weg, die ein echtes Netzwerk braucht, eine gute Frage für die Klasse.