MQTT
Die Ansicht MQTT ist ein MQTT-Client, um einen Broker anzusehen und zu ändern, was in ihm steckt. Stellen Sie eine Verbindung her: Standardmäßig abonniert sie #, sodass jedes Topic, das der Broker hält, als Baum mit seinem letzten Wert entsteht. Von dort aus veröffentlichen Sie, löschen einen Retained-Wert, speichern ein Topic als Signal oder machen es zu einem Schritt eines Experiments.
Signal Lab spricht MQTT 3.1.1 über einfaches TCP, mit QoS 0, 1 und 2 zum Abonnieren, Veröffentlichen und für den Last Will. Es gibt kein MQTT 5 und kein TLS: Ein Broker, der nur mqtts:// oder MQTT-5-Clients annimmt, ist nicht erreichbar.
Verbinden
- Öffnen Sie MQTT.
- Geben Sie Broker-Host und Port ein.
- Lassen Sie Client-ID so, wie sie ist, es sei denn, der Broker erwartet eine bestimmte. Fügen Sie Benutzer und Passwort nur hinzu, wenn der Broker danach fragt.
- Drücken Sie Verbinden.
Das Verbinden öffnet die TCP-Verbindung und schließt den MQTT-Handshake ab, bevor etwas anderes geschieht; ein falsches Passwort oder ein geschlossener Port wird also sofort dort gemeldet. Die Verbindungsfelder sind gesperrt, solange die Verbindung steht; Trennen trennt sie. Die Verbindung ist ein Job in der Leiste der Konsole und lässt sich auch dort stoppen.
| Feld | Was | Standard |
|---|---|---|
| Broker-Host | IP-Adresse oder Hostname des Brokers | 127.0.0.1 |
| Port | Der Port des Brokers | 1883 |
| Client-ID | Der Name Ihres Clients beim Broker. Er darf nicht leer sein und muss dort eindeutig sein: Ein zweiter Client mit derselben ID wirft den ersten hinaus. | signal-lab- und sechs zufällige Hex-Ziffern, bei jedem Start der App neu |
| Benutzer, Passwort | Werden nur gesendet, wenn der Broker sie braucht — im Klartext, da es kein TLS gibt. Ein Passwort ohne Benutzername wird gar nicht gesendet: MQTT 3.1.1 kann keines übertragen. | leer |
| Keepalive (s) | Sekunden, die die Verbindung stumm bleiben darf. Signal Lab pingt den Broker nach der Hälfte davon; ein Broker trennt einen Client, der das 1,5-Fache dieser Zeit stumm bleibt. 0 schaltet das Pingen ab. | 60 |
| clean session | An: Jede Verbindung beginnt ohne gespeicherte Abonnements und ohne wartende Nachrichten. Aus bittet den Broker, sie für diese Client-ID zwischen den Verbindungen zu behalten. | an |
| Beim Verbinden scannen und sein QoS | Ein Filter, der abonniert wird, sobald die Verbindung steht; # ist jedes Topic. Leer: keiner. | #, QoS 0 |
| bei Abbruch für mich veröffentlichen | Dem Broker einen Last Will geben (unten) | aus |
Der Broker hat 6 Sekunden, um die TCP-Verbindung anzunehmen, und weitere 6, um den Handshake zu beantworten.
Der Last Will
Ein Last Will ist eine Nachricht, die der Broker für Sie behält und selbst veröffentlicht, wenn Ihre Verbindung ohne ordentlichen Abschied stirbt. Anwesenheit wird üblicherweise so gebaut: Ein Gerät veröffentlicht online auf sein Status-Topic, und sein Will setzt dasselbe Topic auf off.
Mit angehakten bei Abbruch für mich veröffentlichen setzen Sie Wohin veröffentlichen und Was veröffentlichen (standardmäßig off). Der Will wird mit QoS 2 und retained veröffentlicht. Ohne Topic wird kein Will gesendet.
Abonnieren
Der Scan-Filter wird beim Verbinden abonniert. Für mehr:
- Tippen Sie in Filter hinzufügen einen Topic-Filter.
- Wählen Sie seinen QoS.
- Drücken Sie Abonnieren oder Enter.
Ein Filter ist ein Topic mit Platzhaltern:
| Platzhalter | Steht für | Beispiel |
|---|---|---|
+ | genau eine Ebene | sensors/+/state passt auf sensors/door/state |
# | jede Ebene darunter, nur als letztes Zeichen | sensors/# passt auf sensors/door/state und sensors |
Abonnements listet jeden Filter mit dem, was der Broker gewährt hat: qos0, qos1 oder qos2 — der Broker darf weniger gewähren als angefragt — oder abgelehnt. abbestellen bestellt einen ab.
| QoS | Zustellung |
|---|---|
| 0 | Höchstens einmal: gesendet und vergessen |
| 1 | Mindestens einmal: bestätigt, kann zweimal ankommen |
| 2 | Genau einmal: ein zweistufiger Handshake; eine erneute Zustellung wird nicht zweimal angezeigt |
Der Topic-Baum
Jede eintreffende Nachricht landet in Topics, einem Baum der Topic-Ebenen. Ein Topic zeigt seinen letzten Wert, ein R, wenn dieser Wert retained ist, und bei mehr als einer, wie viele Nachrichten es hatte. Klicken Sie auf eine Ebene, um sie zu öffnen oder zu schließen.
- Tippen Sie in das Feld über dem Baum, um nur die Topics aufzulisten, deren Pfad oder letzter Wert den Text enthält.
- Über dem Baum stehen die Anzahl der Topics, wie viele einen Retained-Wert halten, und, solange die Verbindung steht, der Broker, auf den Sie hören.
- Nutzdaten werden als Text angezeigt; Bytes, die kein UTF-8 sind, erscheinen als Ersatzzeichen.
- Leeren leert den Baum. Sonst tut das nichts: Er bleibt, wie er ist, wenn Sie die Ansicht wechseln oder die Verbindung trennen, bis die App geschlossen wird.
Nachrichten erreichen die Ansicht in Stapeln, zehnmal pro Sekunde. Sendet ein Broker mehr als 4000 Nachrichten in einer Zehntelsekunde, werden die ältesten dieses Stapels aus dem Baum gelassen und über ihm als „nicht angezeigt“ gezählt.
Der Bereich eines Topics
Wählen Sie ein Topic mit einem Wert, um ihn unter dem Baum zu sehen: Wert, QoS, retain, Bytes, Nachrichten und Zuletzt gesehen. Seine Schaltflächen:
| Schaltfläche | Tut |
|---|---|
| In Veröffentlichen laden | Kopiert Topic, Wert, QoS und Retain-Flag in Veröffentlichen |
| Darauf warten | Fügt dem offenen Experiment einen Schritt Auf MQTT warten auf dieses Topic, an diesem Broker, beliebige Nutzdaten, 2000 ms Timeout, hinzu |
| Retained löschen | Entfernt den Retained-Wert (unten) |
| Als Signal speichern | Behält das Topic und seinen letzten Wert als Signal im Ordner Mitgeschnitten |
Veröffentlichen
- Stellen Sie eine Verbindung her.
- Geben Sie unter Veröffentlichen das Topic und die Nutzdaten ein.
- Wählen Sie den QoS und haken Sie retain an, wenn der Broker die Nachricht als Wert des Topics für jeden Client behalten soll, der später abonniert.
- Drücken Sie Veröffentlichen.
Die Konsole bestätigt jede Veröffentlichung: bei QoS 0 sofort, bei QoS 1 und 2, sobald der Broker sie bestätigt hat. Ein Topic zum Veröffentlichen hat keine Platzhalter und ist nicht leer: Ein Topic mit + oder # wird abgelehnt, bevor etwas gesendet wird, mit derselben Meldung, die ein Signal, ein Schritt und signallab send mqtt geben, und die Verbindung bleibt, wie sie war. Nur ein Abonnement nimmt Filter mit Platzhaltern an.
Einen Retained-Wert löschen
Ein Retained-Wert bleibt auf dem Broker, bis er ersetzt wird, und jeder Client, der abonniert, erhält ihn zuerst — ein veralteter ist ein klassischer Grund, warum ein Gerät im falschen Zustand startet. Der einzige Weg, ihn zu entfernen, ist, leere Nutzdaten mit gesetztem Retain zu veröffentlichen.
Retained löschen im Bereich eines Topics tut das: Drücken Sie es, dann Löschen?. Es veröffentlicht die leeren Retained-Nutzdaten mit QoS 1 über Ihre Verbindung. Es ist nur verfügbar, solange die Verbindung steht und wenn der letzte Wert des Topics retained ist. Von Hand geht dasselbe: leere Nutzdaten mit angehakten retain.
WARNING
Das Löschen verändert den Broker für alle Clients auf einmal.
Im Inspektor
Ist der Mitschnitt gestartet, erscheint MQTT-Verkehr mit dem Protokoll mqtt:
| Quelle | Was | Wie viele |
|---|---|---|
mqtt | Was die Verbindung der Ansicht veröffentlicht; eine leere Retained-Veröffentlichung hat das Urteil clears retained | jede einzelne |
mqtt | Nachrichten, die die Verbindung empfängt | höchstens eine alle 200 ms |
mqtt-send | Eine Veröffentlichung, die ihre eigene Verbindung mitbrachte: ein Signal, das gesendet wurde, während die Ansicht nicht mit dem Broker des Signals verbunden ist, ein Schritt, signallab send mqtt (Urteil one-shot) | jede einzelne |
experiment-wait | Nachrichten, die das Abonnement eines Schritts Auf MQTT warten empfängt, abgesehen von erneut zugestellten Retained-Werten | jede einzelne |
Die Zusammenfassung liest sich topic = payload, mit dem QoS und retained, wenn sie zutreffen. Siehe Inspektor.
Speichern und wiederverwenden
- Als Signal speichern. Speichern… unter Veröffentlichen behält Broker (den Broker-Host und Port der Verbindung), Topic, Nutzdaten, QoS und Retain-Flag in der Signalbibliothek; Ctrl+S im Bereich zum Veröffentlichen tut dasselbe und aktualisiert das Signal, sobald der Bereich daran gebunden ist. Siehe Signale.
- Ein MQTT-Signal auslösen. Während diese Ansicht mit dem Broker des Signals verbunden ist (derselbe Host, Groß- und Kleinschreibung egal, und derselbe Port;
1883, wenn das Signal keinen angibt), geht ein aus der Bibliothek ausgelöstes Signal über diese Verbindung hinaus, mit ihrer Client-ID und ihren Anmeldedaten. Andernfalls — nicht verbunden oder mit einem anderen Broker verbunden — öffnet es eine eigene Verbindung zu seinem eigenen Broker — eine neue Client-ID, kein Benutzername —, veröffentlicht, wartet auf die Bestätigung, die sein QoS verlangt, und trennt. Namen werden nicht nachgeschlagen,localhostund127.0.0.1gelten also als verschiedene Broker. Die Bibliothek speichert kein Passwort. - In einem Experiment. Ein gespeichertes MQTT-Signal lässt sich unter Gespeicherte Signale im Menü Knoten hinzufügen des Experiments wählen, wodurch es ein Schritt MQTT veröffentlichen wird.
In Experimenten
| Schritt | Was er tut |
|---|---|
| MQTT veröffentlichen | Verbindet, veröffentlicht eine Nachricht und trennt — ohne Benutzername oder Passwort, mit Clean Session, innerhalb von 15 Sekunden. Details |
| Auf MQTT warten | Abonniert beim Start des Durchlaufs und wartet auf eine Nachricht auf einem Topic-Filter, deren Nutzdaten passen; beim Abonnieren erneut zugestellte Retained-Werte werden ignoriert. Details |
| Emulator | Ein eigener MQTT-Broker des Durchlaufs. Details |
Keiner der beiden Schritte meldet sich an, sie brauchen also einen Broker, der Clients ohne Benutzername annimmt.
Der Broker-Emulator
Signal Lab kann auch der Broker sein: Ein Emulator MQTT-Broker leitet weiter, was Clients veröffentlichen, an jeden, der abonniert hat — 3.1.1, einfaches TCP, QoS 0, 1 und 2, Retained-Nachrichten, Wills, eine optionale Anmeldung — und antwortet nach Regeln, wie ein Gerät. Richten Sie Ihre Technik und diese Ansicht darauf, um ohne echten Broker zu testen. Siehe Emulatoren.
Von der Kommandozeile
signallab send mqtt veröffentlicht eine Nachricht mit einer eigenen Verbindung:
signallab send mqtt 127.0.0.1:1883 lab/light/1/set on --qos 1
signallab send mqtt 127.0.0.1:1883 lab/light/1/state "" --retain✔ lab/light/1/set → 127.0.0.1:1883 · 2 B · qos1Die zweite Zeile löscht einen Retained-Wert. Ohne Port liegt der Broker auf 1883. Es werden keine Anmeldedaten verwendet. Der Befehl endet mit 0, wenn der Broker die Nachricht annahm, mit 1, wenn er nicht erreichbar war oder sie abgelehnt hat. Siehe Kommandozeile.
Probleme
| Was Sie sehen | Übliche Ursache |
|---|---|
… refused the connection — nothing is listening on that port | Kein Broker auf dieser Adresse und diesem Port. |
… accepted the connection but did not answer in time — is it an MQTT broker? | Dort hört etwas, aber es spricht kein MQTT oder spricht es über TLS. |
… answered with something other than MQTT 3.1.1 | Kein MQTT-Broker, oder ein Broker, der etwas gesendet hat, das Signal Lab nicht lesen kann. |
… does not accept MQTT 3.1.1 clients | Der Broker nimmt nur MQTT 5. |
… rejected the client ID — choose another one | Die ID ist zu lang oder enthält Zeichen, die der Broker nicht annimmt. |
… rejected the username or password | Falsche Anmeldedaten oder ein Passwort ohne Benutzername. |
… did not authorize this client — check its access rules | Die Zugriffsregeln des Brokers lehnen diesen Client ab. |
… is unavailable right now — try again later | Der Broker läuft, nimmt aber keine Clients an. |
Enter a client ID — brokers refuse an empty one | Client-ID ist leer. |
A publish topic cannot contain the wildcards + or # | Das Topic, an das veröffentlicht werden soll, enthält ein + oder #. Diese sind zum Abonnieren; veröffentlichen Sie jeweils an ein Topic. |
| Ein Filter zeigt abgelehnt | Die Zugriffsregeln des Brokers verbieten ihn, oder der Filter ist fehlerhaft (# nicht zuletzt, + teilt sich eine Ebene mit anderen Zeichen). |
| Die Verbindung bricht kurz nach dem Verbinden ab | Ein anderer Client hat sich mit derselben Client-ID verbunden. |
| Im Baum erscheint nichts | Der Scan-Filter ist leer, oder der Broker lässt diesen Client nichts sehen. |
Jede Fehlermeldung steht unter Fehlermeldungen.