Zum Inhalt springen

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 ​

  1. Öffnen Sie MQTT.
  2. Geben Sie Broker-Host und Port ein.
  3. 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.
  4. 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.

FeldWasStandard
Broker-HostIP-Adresse oder Hostname des Brokers127.0.0.1
PortDer Port des Brokers1883
Client-IDDer 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, PasswortWerden 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 sessionAn: 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 QoSEin Filter, der abonniert wird, sobald die Verbindung steht; # ist jedes Topic. Leer: keiner.#, QoS 0
bei Abbruch für mich veröffentlichenDem 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:

  1. Tippen Sie in Filter hinzufügen einen Topic-Filter.
  2. Wählen Sie seinen QoS.
  3. Drücken Sie Abonnieren oder Enter.

Ein Filter ist ein Topic mit Platzhaltern:

PlatzhalterSteht fürBeispiel
+genau eine Ebenesensors/+/state passt auf sensors/door/state
#jede Ebene darunter, nur als letztes Zeichensensors/# 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.

QoSZustellung
0Höchstens einmal: gesendet und vergessen
1Mindestens einmal: bestätigt, kann zweimal ankommen
2Genau 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ächeTut
In Veröffentlichen ladenKopiert Topic, Wert, QoS und Retain-Flag in Veröffentlichen
Darauf wartenFügt dem offenen Experiment einen Schritt Auf MQTT warten auf dieses Topic, an diesem Broker, beliebige Nutzdaten, 2000 ms Timeout, hinzu
Retained löschenEntfernt den Retained-Wert (unten)
Als Signal speichernBehält das Topic und seinen letzten Wert als Signal im Ordner Mitgeschnitten

Veröffentlichen ​

  1. Stellen Sie eine Verbindung her.
  2. Geben Sie unter Veröffentlichen das Topic und die Nutzdaten ein.
  3. 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.
  4. 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:

QuelleWasWie viele
mqttWas die Verbindung der Ansicht veröffentlicht; eine leere Retained-Veröffentlichung hat das Urteil clears retainedjede einzelne
mqttNachrichten, die die Verbindung empfängthöchstens eine alle 200 ms
mqtt-sendEine 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-waitNachrichten, die das Abonnement eines Schritts Auf MQTT warten empfängt, abgesehen von erneut zugestellten Retained-Wertenjede 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, localhost und 127.0.0.1 gelten 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 ​

SchrittWas er tut
MQTT veröffentlichenVerbindet, veröffentlicht eine Nachricht und trennt — ohne Benutzername oder Passwort, mit Clean Session, innerhalb von 15 Sekunden. Details
Auf MQTT wartenAbonniert 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
EmulatorEin 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:

bash
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
text
✔ lab/light/1/set → 127.0.0.1:1883 · 2 B · qos1

Die 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 portKein 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.1Kein MQTT-Broker, oder ein Broker, der etwas gesendet hat, das Signal Lab nicht lesen kann.
… does not accept MQTT 3.1.1 clientsDer Broker nimmt nur MQTT 5.
… rejected the client ID — choose another oneDie ID ist zu lang oder enthält Zeichen, die der Broker nicht annimmt.
… rejected the username or passwordFalsche Anmeldedaten oder ein Passwort ohne Benutzername.
… did not authorize this client — check its access rulesDie Zugriffsregeln des Brokers lehnen diesen Client ab.
… is unavailable right now — try again laterDer Broker läuft, nimmt aber keine Clients an.
Enter a client ID — brokers refuse an empty oneClient-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 abgelehntDie 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 abEin anderer Client hat sich mit derselben Client-ID verbunden.
Im Baum erscheint nichtsDer Scan-Filter ist leer, oder der Broker lässt diesen Client nichts sehen.

Jede Fehlermeldung steht unter Fehlermeldungen.