Saltar al contenido

MQTT ​

La pantalla MQTT es un cliente MQTT para mirar un bróker y cambiar lo que contiene. Conéctate y, de forma predeterminada, se suscribe a #: cada tema que guarda el bróker se forma como un árbol con su último valor. Desde ahí publicas, borras un valor retenido, guardas un tema como señal o lo conviertes en un paso de un experimento.

Signal Lab habla MQTT 3.1.1 sobre TCP sin cifrar, con QoS 0, 1 y 2 para suscribirse, publicar y la última voluntad. No hay MQTT 5 ni TLS: un bróker que solo acepte clientes mqtts:// o MQTT 5 no se puede alcanzar.

Conectar ​

  1. Abre MQTT.
  2. Escribe Host del bróker y Puerto.
  3. Deja ID de cliente como está, salvo que el bróker espere uno concreto. Añade Usuario y Contraseña solo si el bróker los pide.
  4. Pulsa Conectar.

Conectar abre la conexión TCP y completa la negociación MQTT antes que nada, así que una contraseña equivocada o un puerto cerrado se indica ahí mismo. Los campos de conexión se bloquean mientras está conectado; Desconectar la cierra. La conexión es una tarea en la franja de la consola y también se puede detener allí.

CampoQuéPredeterminado
Host del brókerLa dirección IP o el nombre de host del bróker127.0.0.1
PuertoEl puerto del bróker1883
ID de clienteEl nombre de tu cliente en el bróker. No puede estar vacío y debe ser único allí: un segundo cliente con el mismo id expulsa al primero.signal-lab- y seis dígitos hexadecimales aleatorios, nuevos cada vez que se inicia la aplicación
Usuario, ContraseñaSe envían solo si el bróker los necesita — en texto plano, ya que no hay TLS. Una contraseña sin nombre de usuario no se envía: MQTT 3.1.1 no puede transportarla.vacío
Keepalive (s)Segundos que la conexión puede estar en silencio. Signal Lab hace ping al bróker cada mitad de ese tiempo; un bróker descarta a un cliente que calla 1,5 veces ese tiempo. 0 desactiva el ping.60
sesión limpiaActivado: cada conexión empieza sin suscripciones guardadas ni mensajes en cola. Desactivado pide al bróker que las conserve para este id de cliente entre conexiones.activado
Explorar al conectar y su QoSUn filtro al que se suscribe en cuanto la conexión está lista; # es todos los temas. Vacío: ninguno.#, QoS 0
publicar un mensaje por mí si me desconectoDar una última voluntad al bróker (más abajo)desactivado

El bróker tiene 6 segundos para aceptar la conexión TCP y 6 más para responder a la negociación.

La última voluntad ​

Una última voluntad es un mensaje que el bróker guarda por ti y publica por su cuenta si tu conexión muere sin una despedida correcta. La presencia suele construirse así: un dispositivo publica online en su tema de estado, y su voluntad pone ese mismo tema en off.

Con publicar un mensaje por mí si me desconecto marcada, define Dónde publicar y Qué publicar (off de forma predeterminada). La voluntad se publica con QoS 2 y retenida. Sin un tema, no se envía ninguna voluntad.

Suscribirse ​

El filtro de exploración se suscribe al conectar. Para más:

  1. En Agregar un filtro, escribe un filtro de temas.
  2. Elige su QoS.
  3. Pulsa Suscribirse o Enter.

Un filtro es un tema con comodines:

ComodínRepresentaEjemplo
+exactamente un nivelsensors/+/state coincide con sensors/door/state
#todos los niveles inferiores, solo como último caráctersensors/# coincide con sensors/door/state y sensors

Suscripciones enumera cada filtro con lo que concedió el bróker: qos0, qos1 o qos2 — el bróker puede conceder menos de lo que pediste — o rechazada. quitar cancela la suscripción a uno.

QoSEntrega
0Como mucho una vez: se envía y se olvida
1Al menos una vez: se confirma, puede llegar dos veces
2Exactamente una vez: una negociación en dos pasos; una reentrega no se muestra dos veces

El árbol de temas ​

Cada mensaje que llega va a Temas, un árbol de los niveles de tema. Un tema muestra su último valor, una R cuando ese valor está retenido, y cuántos mensajes ha tenido cuando hay más de uno. Haz clic en un nivel para abrirlo o cerrarlo.

  • Escribe en el campo sobre el árbol para listar solo los temas cuya ruta o último valor contenga el texto.
  • Sobre el árbol están el número de temas, cuántos guardan un valor retenido y, mientras estás conectado, el bróker en el que escuchas.
  • Las cargas útiles se muestran como texto; los bytes que no son UTF-8 se muestran como caracteres de reemplazo.
  • Borrar vacía el árbol. Nada más lo hace: se queda como está cuando cambias de pantalla o te desconectas, hasta que se cierra la aplicación.

Los mensajes llegan a la pantalla en lotes, diez veces por segundo. Cuando un bróker envía más de 4000 mensajes en una décima de segundo, los más antiguos de ese lote se dejan fuera del árbol y se cuentan como "no mostrados" sobre él.

El panel de un tema ​

Elige un tema con un valor para verlo bajo el árbol: Valor, QoS, retain, Bytes, Mensajes y Visto por última vez. Sus botones:

BotónHace
Cargar en PublicarCopia el tema, el valor, el QoS y el indicador de retención en Publicar
Esperar estoAñade un paso Esperar un mensaje MQTT sobre este tema, en este bróker, cualquier carga útil, con 2000 ms de tiempo de espera, al experimento abierto
Borrar retenidoQuita el valor retenido (más abajo)
Guardar como señalGuarda el tema y su último valor como señal en la carpeta Capturadas

Publicar ​

  1. Conéctate.
  2. En Publicar, escribe el Tema y la Carga útil.
  3. Elige el QoS y marca retain si el bróker debe guardar el mensaje como valor del tema para cada cliente que se suscriba después.
  4. Pulsa Publicar.

La consola confirma cada publicación: al instante para QoS 0, cuando el bróker la ha confirmado para QoS 1 y 2. Un tema para publicar no tiene comodines y no está vacío: un tema con + o # se rechaza antes de enviar nada, con el mismo mensaje que dan una señal, un paso y signallab send mqtt, y la conexión se queda como estaba. Solo una suscripción acepta filtros con comodines.

Borrar un valor retenido ​

Un valor retenido permanece en el bróker hasta que se sustituye, y cada cliente que se suscribe lo recibe primero — uno obsoleto es un motivo clásico de que un dispositivo arranque en el estado equivocado. La única forma de quitarlo es publicar una carga útil vacía con retain activado.

Borrar retenido en el panel de un tema hace eso: púlsalo y luego ¿Borrarlo?. Publica la carga útil retenida vacía con QoS 1 en tu conexión. Solo está disponible mientras estás conectado y cuando el último valor del tema está retenido. Puedes hacer lo mismo a mano: una Carga útil vacía con retain marcado.

WARNING

Borrar cambia el bróker para todos los clientes a la vez.

En el Inspector ​

Con la captura activada, el tráfico MQTT aparece con el protocolo mqtt:

OrigenQuéCuántos
mqttLo que publica la conexión de la pantalla; una publicación retenida vacía tiene el veredicto clears retainedtodos
mqttMensajes que recibe la conexióncomo máximo uno cada 200 ms
mqtt-sendUna publicación que trajo su propia conexión: una señal enviada mientras la pantalla no está conectada al bróker de la señal, un paso, signallab send mqtt (veredicto one-shot)todas
experiment-waitMensajes que recibe la suscripción de un paso Esperar MQTT, aparte de las repeticiones retenidastodos

El resumen dice topic = payload, con el QoS y retained cuando corresponden. Consulta Inspector.

Guardar y reutilizar ​

  • Guardar como señal. Guardar… bajo Publicar guarda el bróker (el Host del bróker y el Puerto de la conexión), el tema, la carga útil, el QoS y el indicador de retención en la biblioteca de señales; Ctrl+S en el panel de publicación hace lo mismo, y actualiza la señal una vez que el panel está vinculado a ella. Consulta Señales.
  • Enviar una señal MQTT. Mientras esta pantalla está conectada al bróker que nombra la señal (mismo host, sin distinguir mayúsculas, y mismo puerto; 1883 cuando la señal no da ninguno), una señal enviada desde la biblioteca sale por esa conexión, con su id de cliente y sus credenciales. En caso contrario — no estás conectado, o lo estás a otro bróker — abre una conexión propia a su propio bróker — un id de cliente nuevo, sin nombre de usuario — publica, espera la confirmación que su QoS requiere y se desconecta. Los nombres no se resuelven, así que localhost y 127.0.0.1 cuentan como brókeres distintos. La biblioteca no guarda ninguna contraseña.
  • En un experimento. Una señal MQTT guardada se puede elegir en Señales guardadas en el menú Agregar nodo del experimento, lo que la convierte en un paso Publicación MQTT.

En experimentos ​

PasoQué hace
Publicación MQTTConecta, publica un mensaje y se desconecta — sin nombre de usuario ni contraseña, una sesión limpia, en 15 segundos. Detalles
Esperar MQTTSe suscribe cuando empieza la ejecución y espera un mensaje en un filtro de temas cuya carga útil coincida; los valores retenidos repetidos al suscribirse se ignoran. Detalles
EmuladorUn bróker MQTT propio de la ejecución. Detalles

Ninguno de los dos pasos inicia sesión, así que necesitan un bróker que acepte clientes sin nombre de usuario.

El emulador de bróker ​

Signal Lab también puede ser el bróker: un emulador Bróker MQTT encamina lo que publican los clientes a quien se haya suscrito — 3.1.1, TCP sin cifrar, QoS 0, 1 y 2, mensajes retenidos, últimas voluntades, un inicio de sesión opcional — y responde según reglas, como un dispositivo. Apunta tu equipo y esta pantalla a él para probar sin un bróker real. Consulta Emuladores.

Desde la línea de comandos ​

signallab send mqtt publica un mensaje con una conexión propia:

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 segunda línea borra un valor retenido. Sin un puerto, el bróker está en 1883. No usa credenciales. Termina con 0 cuando el bróker aceptó el mensaje, 1 cuando no se pudo alcanzar o lo rechazó. Consulta Línea de comandos.

Problemas ​

Qué vesCausa habitual
… refused the connection — nothing is listening on that portNingún bróker en esa dirección y puerto.
… accepted the connection but did not answer in time — is it an MQTT broker?Algo escucha allí, pero no habla MQTT, o lo habla sobre TLS.
… answered with something other than MQTT 3.1.1No es un bróker MQTT, o un bróker que envió algo que Signal Lab no puede leer.
… does not accept MQTT 3.1.1 clientsEl bróker solo acepta MQTT 5.
… rejected the client ID — choose another oneEl id es demasiado largo o tiene caracteres que el bróker no acepta.
… rejected the username or passwordCredenciales incorrectas, o una contraseña sin nombre de usuario.
… did not authorize this client — check its access rulesLas reglas de acceso del bróker rechazan a este cliente.
… is unavailable right now — try again laterEl bróker está activo pero no acepta clientes.
Enter a client ID — brokers refuse an empty oneID de cliente está vacío.
A publish topic cannot contain the wildcards + or #El tema al que publicar tiene un + o un #. Esos son para suscribirse; publica en un tema a la vez.
Un filtro muestra rechazadaLas reglas de acceso del bróker lo prohíben, o el filtro está mal formado (# no al final, + compartiendo nivel con otros caracteres).
La conexión se corta un momento después de conectarOtro cliente se conectó con el mismo ID de cliente.
No aparece nada en el árbolEl filtro de exploración está vacío, o el bróker no deja ver nada a este cliente.

Cada mensaje de error se enumera en Mensajes de error.