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
- Abre MQTT.
- Escribe Host del bróker y Puerto.
- 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.
- 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í.
| Campo | Qué | Predeterminado |
|---|---|---|
| Host del bróker | La dirección IP o el nombre de host del bróker | 127.0.0.1 |
| Puerto | El puerto del bróker | 1883 |
| ID de cliente | El 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ña | Se 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 limpia | Activado: 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 QoS | Un 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 desconecto | Dar 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:
- En Agregar un filtro, escribe un filtro de temas.
- Elige su QoS.
- Pulsa Suscribirse o Enter.
Un filtro es un tema con comodines:
| Comodín | Representa | Ejemplo |
|---|---|---|
+ | exactamente un nivel | sensors/+/state coincide con sensors/door/state |
# | todos los niveles inferiores, solo como último carácter | sensors/# 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.
| QoS | Entrega |
|---|---|
| 0 | Como mucho una vez: se envía y se olvida |
| 1 | Al menos una vez: se confirma, puede llegar dos veces |
| 2 | Exactamente 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ón | Hace |
|---|---|
| Cargar en Publicar | Copia el tema, el valor, el QoS y el indicador de retención en Publicar |
| Esperar esto | Añ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 retenido | Quita el valor retenido (más abajo) |
| Guardar como señal | Guarda el tema y su último valor como señal en la carpeta Capturadas |
Publicar
- Conéctate.
- En Publicar, escribe el Tema y la Carga útil.
- 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.
- 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:
| Origen | Qué | Cuántos |
|---|---|---|
mqtt | Lo que publica la conexión de la pantalla; una publicación retenida vacía tiene el veredicto clears retained | todos |
mqtt | Mensajes que recibe la conexión | como máximo uno cada 200 ms |
mqtt-send | Una 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-wait | Mensajes que recibe la suscripción de un paso Esperar MQTT, aparte de las repeticiones retenidas | todos |
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;
1883cuando 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í quelocalhosty127.0.0.1cuentan 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
| Paso | Qué hace |
|---|---|
| Publicación MQTT | Conecta, publica un mensaje y se desconecta — sin nombre de usuario ni contraseña, una sesión limpia, en 15 segundos. Detalles |
| Esperar MQTT | Se 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 |
| Emulador | Un 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:
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 · qos1La 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é ves | Causa habitual |
|---|---|
… refused the connection — nothing is listening on that port | Ningú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.1 | No 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 clients | El bróker solo acepta MQTT 5. |
… rejected the client ID — choose another one | El id es demasiado largo o tiene caracteres que el bróker no acepta. |
… rejected the username or password | Credenciales incorrectas, o una contraseña sin nombre de usuario. |
… did not authorize this client — check its access rules | Las reglas de acceso del bróker rechazan a este cliente. |
… is unavailable right now — try again later | El bróker está activo pero no acepta clientes. |
Enter a client ID — brokers refuse an empty one | ID 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 rechazada | Las 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 conectar | Otro cliente se conectó con el mismo ID de cliente. |
| No aparece nada en el árbol | El 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.