Aller au contenu

MQTT ​

L'écran MQTT est un client MQTT pour regarder un broker et modifier ce qu'il contient. Connectez-vous, et par défaut il s'abonne à # : chaque topic que le broker détient s'accumule en un arbre avec sa dernière valeur. De là, vous publiez, effacez une valeur retenue, enregistrez un topic comme signal ou le transformez en étape d'expérience.

Signal Lab parle MQTT 3.1.1 sur TCP simple, avec QoS 0, 1 et 2 pour s'abonner, publier et la dernière volonté. Il n'y a pas de MQTT 5 ni de TLS : un broker qui n'accepte que des clients mqtts:// ou MQTT 5 ne peut pas être joint.

Connexion ​

  1. Ouvrez MQTT.
  2. Saisissez Hôte du broker et Port.
  3. Laissez Identifiant client tel quel, à moins que le broker n'en attende un précis. Ajoutez Utilisateur et Mot de passe seulement si le broker les demande.
  4. Appuyez sur Connecter.

Se connecter ouvre la connexion TCP et termine la poignée de main MQTT avant tout le reste : un mot de passe erroné ou un port fermé est donc signalé tout de suite. Les champs de connexion se verrouillent une fois connecté ; Déconnecter la ferme. La connexion est une tâche dans le bandeau de la console et peut y être arrêtée aussi.

ChampQuoiPar défaut
Hôte du brokerL'adresse IP ou le nom d'hôte du broker127.0.0.1
PortLe port du broker1883
Identifiant clientLe nom de votre client auprès du broker. Il ne doit pas être vide et doit y être unique : un second client avec le même identifiant déloge le premier.signal-lab- et six chiffres hexadécimaux aléatoires, nouveaux à chaque démarrage de l'application
Utilisateur, Mot de passeEnvoyés seulement si le broker en a besoin — en clair, puisqu'il n'y a pas de TLS. Un mot de passe sans nom d'utilisateur n'est pas envoyé du tout : MQTT 3.1.1 ne peut pas le transporter.vide
Keepalive (s)Secondes pendant lesquelles la connexion peut rester silencieuse. Signal Lab envoie un ping au broker toutes les moitiés de cette durée ; un broker déconnecte un client resté silencieux 1,5 fois cette durée. 0 désactive les pings.60
clean sessionActivé : chaque connexion démarre sans abonnement conservé ni message en file. Désactivé : le broker doit les conserver pour cet identifiant client entre les connexions.activé
Parcourir à la connexion et son QoSUn filtre auquel s'abonner dès que la connexion est établie ; # correspond à tous les topics. Vide : aucun.#, QoS 0
publier un message pour moi si je suis déconnectéDonner au broker une dernière volonté (ci-dessous)désactivé

Le broker a 6 secondes pour accepter la connexion TCP et 6 de plus pour répondre à la poignée de main.

La dernière volonté ​

Une dernière volonté est un message que le broker garde pour vous et publie lui-même si votre connexion meurt sans adieu convenable. La présence se construit souvent ainsi : un appareil publie online sur son topic d'état, et sa volonté met le même topic à off.

Avec publier un message pour moi si je suis déconnecté coché, définissez Publier où et Publier quoi (off par défaut). La volonté est publiée en QoS 2 et retenue. Sans topic, aucune volonté n'est envoyée.

S'abonner ​

Le filtre de balayage est souscrit à la connexion. Pour en ajouter d'autres :

  1. Dans Ajouter un filtre, saisissez un filtre de topic.
  2. Choisissez son QoS.
  3. Appuyez sur S’abonner ou sur Enter.

Un filtre est un topic avec des jokers :

JokerReprésenteExemple
+exactement un niveausensors/+/state correspond à sensors/door/state
#tous les niveaux en dessous, en dernier caractère seulementsensors/# correspond à sensors/door/state et sensors

Abonnements liste chaque filtre avec ce que le broker a accordé : qos0, qos1 ou qos2 — le broker peut accorder moins que ce que vous avez demandé — ou refusé. retirer se désabonne d'un filtre.

QoSRemise
0Au plus une fois : envoyé et oublié
1Au moins une fois : acquitté, peut arriver deux fois
2Exactement une fois : une poignée de main en deux temps ; une rediffusion n'est pas affichée deux fois

L'arbre des topics ​

Chaque message qui arrive entre dans Topics, un arbre des niveaux de topic. Un topic affiche sa dernière valeur, un R quand cette valeur est retenue, et le nombre de messages qu'il a reçus quand il y en a plus d'un. Cliquez sur un niveau pour l'ouvrir ou le fermer.

  • Saisissez du texte dans le champ au-dessus de l'arbre pour ne lister que les topics dont le chemin ou la dernière valeur contient ce texte.
  • Au-dessus de l'arbre figurent le nombre de topics, combien détiennent une valeur retenue et, une fois connecté, le broker sur lequel vous écoutez.
  • Les charges utiles sont affichées en texte ; les octets qui ne sont pas de l'UTF-8 apparaissent en caractères de remplacement.
  • Effacer vide l'arbre. Rien d'autre ne le fait : il reste tel quel quand vous changez d'écran ou vous vous déconnectez, jusqu'à la fermeture de l'application.

Les messages atteignent l'écran par lots, dix fois par seconde. Quand un broker envoie plus de 4000 messages en un dixième de seconde, les plus anciens de ce lot sont laissés hors de l'arbre et comptés comme « non affichés » au-dessus de lui.

Le volet d'un topic ​

Choisissez un topic avec une valeur pour le voir sous l'arbre : Valeur, QoS, retain, Octets, Messages et Vu en dernier. Ses boutons :

BoutonFait
Charger dans la publicationCopie le topic, la valeur, le QoS et l'indicateur retain dans Publication
Attendre ceciAjoute une étape Attendre MQTT sur ce topic, chez ce broker, n'importe quelle charge utile, délai de 2000 ms, à l'expérience ouverte
Effacer la valeur retenueRetire la valeur retenue (ci-dessous)
Enregistrer comme signalGarde le topic et sa dernière valeur comme signal dans le dossier Capturés

Publier ​

  1. Connectez-vous.
  2. Sous Publication, saisissez le Topic et la Charge utile.
  3. Choisissez le QoS, et cochez retain si le broker doit garder le message comme valeur du topic pour chaque client qui s'abonnera plus tard.
  4. Appuyez sur Publier.

La console confirme chaque publication : aussitôt pour le QoS 0, quand le broker l'a acquittée pour les QoS 1 et 2. Un topic de publication n'a pas de jokers et n'est pas vide : un topic contenant + ou # est refusé avant que quoi que ce soit ne soit envoyé, avec le même message qu'un signal, une étape et signallab send mqtt, et la connexion reste telle quelle. Seul un abonnement prend des filtres à jokers.

Effacer une valeur retenue ​

Une valeur retenue reste sur le broker jusqu'à ce qu'elle soit remplacée, et chaque client qui s'abonne la reçoit en premier — une valeur périmée est une raison classique qu'un appareil démarre dans le mauvais état. La seule façon de la retirer est de publier une charge utile vide avec retain activé.

Effacer la valeur retenue dans le volet d'un topic fait cela : appuyez dessus, puis sur L’effacer ?. Il publie la charge utile retenue vide en QoS 1 sur votre connexion. Il n'est disponible que connecté et quand la dernière valeur du topic est retenue. Vous pouvez faire de même à la main : une Charge utile vide avec retain cochée.

WARNING

Effacer modifie le broker pour tous les clients à la fois.

Dans l'Inspecteur ​

Avec la capture active, le trafic MQTT apparaît avec le protocole mqtt :

SourceQuoiCombien
mqttCe que la connexion de l'écran publie ; une publication retenue vide a le verdict clears retainedchacune
mqttLes messages que la connexion reçoitau plus un toutes les 200 ms
mqtt-sendUne publication qui a ouvert sa propre connexion : un signal envoyé alors que l'écran n'est pas connecté au broker du signal, une étape, signallab send mqtt (verdict one-shot)chacune
experiment-waitLes messages que reçoit l'abonnement d'une étape Attente MQTT, rediffusions retenues mises à partchacun

Le résumé se lit topic = payload, avec le QoS et retained quand ils s'appliquent. Voir Inspecteur.

Enregistrer et réutiliser ​

  • Enregistrer comme signal. Enregistrer… sous Publication garde le broker (le Hôte du broker et le Port de la connexion), le topic, la charge utile, le QoS et l'indicateur retain dans la bibliothèque de signaux ; Ctrl+S dans le volet de publication fait de même, et met à jour le signal une fois le volet lié à lui. Voir Signaux.
  • Envoyer un signal MQTT. Tant que cet écran est connecté au broker que nomme le signal (même hôte, casse ignorée, et même port ; 1883 quand le signal n'en donne aucun), un signal envoyé depuis la bibliothèque part par cette connexion, avec son identifiant client et ses identifiants. Sinon — non connecté, ou connecté à un autre broker — il ouvre une connexion à lui vers son propre broker — un identifiant client neuf, pas de nom d'utilisateur — publie, attend l'acquittement que réclame son QoS, et se déconnecte. Les noms ne sont pas résolus, donc localhost et 127.0.0.1 comptent comme des brokers différents. La bibliothèque ne conserve aucun mot de passe.
  • Dans une expérience. Un signal MQTT enregistré peut être choisi sous Signaux enregistrés dans le menu Ajouter un nœud de l'expérience, ce qui en fait une étape Publication MQTT.

Dans les expériences ​

ÉtapeCe qu'elle fait
Publication MQTTSe connecte, publie un message et se déconnecte — pas de nom d'utilisateur ni de mot de passe, une session propre, en 15 secondes. Détails
Attente MQTTS'abonne au démarrage de l'exécution et attend un message sur un filtre de topic dont la charge utile correspond ; les valeurs retenues rejouées à l'abonnement sont ignorées. Détails
ÉmulateurUn broker MQTT propre à l'exécution. Détails

Aucune des deux étapes ne s'authentifie, il leur faut donc un broker qui accepte les clients sans nom d'utilisateur.

Le broker émulé ​

Signal Lab peut aussi être le broker : un émulateur Broker MQTT achemine ce que les clients publient vers qui s'y est abonné — 3.1.1, TCP simple, QoS 0, 1 et 2, messages retenus, dernières volontés, une authentification facultative — et répond selon des règles, comme un appareil. Dirigez vos équipements et cet écran vers lui pour tester sans vrai broker. Voir Émulateurs.

Depuis la ligne de commande ​

signallab send mqtt publie un message avec une connexion à lui :

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

La deuxième ligne efface une valeur retenue. Sans port, le broker est sur 1883. Il n'utilise aucun identifiant. Il se termine avec 0 quand le broker a pris le message, 1 quand il n'a pas pu être joint ou l'a refusé. Voir Ligne de commande.

Problèmes ​

Ce que vous voyezCause habituelle
… refused the connection — nothing is listening on that portAucun broker à cette adresse et ce port.
… accepted the connection but did not answer in time — is it an MQTT broker?Quelque chose écoute là, mais ne parle pas MQTT, ou le parle en TLS.
… answered with something other than MQTT 3.1.1Ce n'est pas un broker MQTT, ou un broker qui a envoyé quelque chose que Signal Lab ne peut pas lire.
… does not accept MQTT 3.1.1 clientsLe broker n'accepte que MQTT 5.
… rejected the client ID — choose another oneL'identifiant est trop long ou contient des caractères que le broker n'accepte pas.
… rejected the username or passwordIdentifiants erronés, ou un mot de passe sans nom d'utilisateur.
… did not authorize this client — check its access rulesLes règles d'accès du broker refusent ce client.
… is unavailable right now — try again laterLe broker est en marche mais n'accepte pas de clients.
Enter a client ID — brokers refuse an empty oneIdentifiant client est vide.
A publish topic cannot contain the wildcards + or #Le topic de publication contient un + ou un #. Ils servent à s'abonner ; publiez sur un topic à la fois.
Un filtre affiche refuséLes règles d'accès du broker l'interdisent, ou le filtre est mal formé (# pas en dernier, + partageant un niveau avec d'autres caractères).
La connexion tombe un instant après la connexionUn autre client s'est connecté avec le même Identifiant client.
Rien n'apparaît dans l'arbreLe filtre de balayage est vide, ou le broker ne laisse rien voir à ce client.

Chaque message d'erreur est listé dans Messages d'erreur.