Saltar al contenido
Elausys

HyperVisu / Integraciones

Integración MQTT

Suscríbase a topics de estado y publique comandos mediante un broker MQTT: códec de payload, explorador de topics y QoS.

elausys · 21 agosto 2026
En esta página

Integración MQTT

MQTT conecta HyperVisu con el mundo de publicación/suscripción: Zigbee2MQTT, Tasmota, Shelly (modo MQTT), ESPHome, pasarelas de energía y cualquier firmware personalizado que se comunique con un broker MQTT. HyperVisu es un cliente MQTT: se suscribe a los topics en los que los dispositivos publican su estado y publica comandos en los topics que los dispositivos escuchan. No hay sondeos (polling): un dispositivo que cambia de estado publica de inmediato y el widget se actualiza al instante.

En el centro se ubica un broker. Puede ser uno que ya esté en funcionamiento (Mosquitto, EMQX, el incluido con una instalación de Zigbee2MQTT, …) o el broker integrado en HyperVisu, que el servidor puede ejecutar directamente para que los dispositivos se conecten a él (consulte «El broker MQTT integrado»). Todo lo expuesto en este artículo se aplica en ambos casos: el broker integrado es un broker estándar al que se accede mediante una conexión habitual.

Lo que necesita: la dirección y el puerto del broker, sus credenciales si las requiere, y los topics y el formato de payload del dispositivo (obtenidos de su documentación o leídos directamente del broker con el explorador de topics que se describe a continuación).

Conexiones. Active primero MQTT Protocol en la página Servicios (consulte «Servicios y protocolos»); por defecto está desactivado en un servidor nuevo. MQTT admite múltiples conexiones: una conexión por cada broker (consulte «Conexiones»). En Añadir conexión, seleccione la tarjeta MQTT: el cuadro de diálogo solicita un Nombre de instancia, la Dirección del broker, el Puerto, el ID de cliente y las credenciales, e incluye un botón Probar. El Certificado CA y las Opciones del broker (Keepalive, QoS por defecto, Topic de disponibilidad, Clean session) no se encuentran en este diálogo: se configuran en la conexión guardada, que se abre en su editor en cuanto hace clic en Crear conexión. El editor de conexiones contiene:

CampoDescripción
Dirección del brokerHost, o una URL completa: mqtt://, mqtts://, ws://, wss:// (un host simple implica mqtt://). Se conserva la ruta en la dirección; por ejemplo, ws://192.168.1.30/mqtt.
PuertoEl puerto de escucha: normalmente 1883 para MQTT estándar y 8883 para MQTT sobre TLS. Especifíquelo siempre: en el diálogo Añadir conexión, un puerto vacío se guarda como 1883 independientemente del esquema, y el campo Puerto tiene prioridad sobre el puerto indicado en la dirección.
Usuario / ContraseñaDejar vacío para un broker anónimo.
ID de clienteDejar vacío para derivar uno a partir de la dirección MAC del servidor.
Aceptar certificados autofirmadosVisible solo para mqtts:// / wss://. Desactivado por defecto: el certificado del broker debe estar firmado por una autoridad de confianza. Si se activa, el certificado no se verifica.
Certificado CAVisible solo para TLS: el certificado PEM de la autoridad que firmó el broker, cuando no es una entidad pública.
KeepaliveTiempo máximo que un enlace inactivo puede permanecer abierto antes de enviar un ping (por defecto 60 s).
QoS por defecto0 · como máximo una vez, 1 · al menos una vez o 2 · exactamente una vez: utilizado por todos los objetos que no definan el suyo propio.
Topic de disponibilidad / Anunciar disponibilidad de HyperVisuDónde publica HyperVisu su propio estado online / offline (por defecto hypervisu/status, retenido). El broker publica offline en su nombre si se pierde la conexión.
Clean sessionActivado (por defecto): el broker descarta las suscripciones si la conexión se interrumpe y HyperVisu se vuelve a suscribir al reconectarse. Desactívelo solo si el broker debe almacenar mensajes en cola mientras HyperVisu no esté disponible.

El botón Probar en una conexión MQTT realiza una comprobación real: el servidor se conecta al broker y espera su confirmación (en un plazo de 10 s). Un resultado correcto muestra Conexión establecida. En el diálogo Añadir conexión, Probar comprueba los valores introducidos antes de crear la conexión. En una conexión guardada, Probar verifica los datos almacenados, no los campos que aún no se hayan guardado: haga clic primero en Guardar conexión y luego en Probar. Una prueba correcta demuestra que la dirección, el puerto, las credenciales y la configuración TLS son aceptados por el broker; no confirma que un topic específico contenga datos.

El estado de la conexión muestra Conectado mientras el enlace con el broker esté activo. Si el broker deja de estar disponible, se reintenta la conexión cada pocos segundos indefinidamente; no requiere reiniciar el servidor.

📘 Nota: Tras crear o guardar una conexión, aparece Aplicar cambios con un contador en la barra lateral. La conexión ya está operativa sin este paso; al aplicar los cambios se recarga la configuración del servidor y se restablece el contador.

Editor de conexiones MQTT en navegador de escritorio.

Vinculación de un objeto (consulte «Vinculación MQTT» a continuación). Para cada objeto se introduce un Topic; la administración lo almacena como <conexión>:<topic>, lo que permite que dos brokers utilicen el mismo nombre de topic. La dirección del objeto determina su comportamiento:

DirecciónComportamiento
EntradaSe suscribe al topic (topic de estado). Se admiten comodines: + para un nivel, # para los restantes.
SalidaPublica en el topic (topic de comando). Debe ser un topic concreto, sin comodines.
Entrada/SalidaSe suscribe y publica en el mismo topic. Solo es adecuado para dispositivos que mantienen el estado retenido en un único topic; se recomienda utilizar dos objetos (uno de Entrada y uno de Salida).

El códec de payload —cómo se convierte el payload en un valor y viceversa— se define mediante la cadena de tipo de datos del objeto, generada por el editor a partir de los siguientes campos:

CampoAlmacenado comoSignificado
Formato de payload— / PATH=Valor sin procesar: la totalidad del payload es el valor. JSON: el valor se extrae en la Ruta JSON (state, sensor.temperature, values[0]).
Token ON / Token OFFON= / OFF=Para objetos booleanos: lo que el dispositivo escribe y espera para verdadero/falso (p. ej. ON / OFF). Sin tokens, se interpretan true/false, 1/0 y on/off en la entrada y se publica true/false.
Escala / OffsetSCALE= / OFFSET=Lectura: valor = raw × escala + offset; la publicación aplica la función inversa, raw = (valor − offset) ÷ escala. Un objeto de comando y su objeto de respuesta toman por tanto la misma escala.
Plantilla de payloadPUB=Plantilla de publicación opcional; {{value}} se sustituye por el valor, p. ej. {"state":"{{value}}"}. Dejar vacío para publicar el valor directamente.
QoSQOS=Por defecto del broker, 0, 1 o 2 para este comando.
Retener mensajes publicadosRETAIN=1Desactivado por defecto.
Intervalo mínimo (ms)THROTTLE=Los sensores de alta frecuencia se limitan a esta tasa (por defecto 100 ms); el último valor siempre se procesa. 0 desactiva la limitación.

La cadena tiene la estructura TIPO:parámetro:parámetro… — por ejemplo BOOL:PATH=state:ON=ON:OFF=OFF o FLOAT:SCALE=0.3937:PUB={"brightness":{{value}}}. Una cadena vacía significa «utilizar el payload sin procesar según el tipo del objeto». El editor de objetos no incluye un selector de tipo de datos: el tipo corresponde al indicado en el campo seleccionado en el explorador de topics (más adelante), y al hacer clic en un campo se adapta automáticamente el tipo del objeto. Los objetos de color (RGB) aceptan {"r","g","b"}, {"red","green","blue"}, [r,g,b], #RRGGBB y 255,128,0 en la entrada, y publican {"r":…,"g":…,"b":…} salvo que una plantilla especifique otro formato.

⚠️ Advertencia: Un comando retenido se vuelve a ejecutar cada vez que el dispositivo se reconecta al broker. Se debe retener el estado, no los comandos; el editor muestra una advertencia si se activa la retención en un objeto de salida.

Explorador de topics. MQTT es un protocolo cuyas direcciones pueden identificarse directamente en la red. En el editor de objetos, en Configuración del topic MQTT, haga clic en Escanear broker: el servidor escucha la totalidad del broker durante cuatro segundos e indica el número de topics detectados (los topics retenidos se reciben de inmediato, por lo que un escaneo rápido muestra la mayoría de los elementos útiles; para un dispositivo sin retención, genere una nueva lectura y escanee de nuevo). La lista se limita a un máximo de 500 topics. El editor de objetos no realiza escaneos parciales: abra Topic y escriba en Buscar topics… para filtrar los resultados, o introduzca el topic completo manualmente. Cada fila muestra el topic y su último payload, junto con una etiqueta de retenido. Seleccione un topic y:

  • en un payload JSON, cada campo se desglosa en Seleccione el valor que debe seguir este objeto: un solo clic define la ruta JSON, el tipo de objeto y, en booleanos, los tokens ON/OFF con la sintaxis exacta del dispositivo;
  • en un payload simple, Usar el payload sin procesar como establece el tipo.

Seleccione el topic antes de hacer clic en un campo: elegir otro topic restablece el formato del payload, la ruta JSON y los tokens. Esta acción no rellena Escala ni Offset.

También es posible introducir un topic que no haya aparecido en el escaneo: un topic de comando puede no haber sido publicado nunca, y un objeto de entrada puede requerir un comodín. Escríbalo en Topic y haga clic en Usar "…" en la lista.

Editor de objetos MQTT tras «Escanear broker».

Comportamientos a tener en cuenta

  • Estado instantáneo tras un reinicio. El broker reenvía los mensajes retenidos en cada conexión o reconexión, de modo que los widgets muestran sus valores sin esperar a la siguiente publicación del dispositivo.
  • Sin confirmaciones simuladas. Un comando solo se confirma cuando el dispositivo publica en su topic de estado (o el broker lo reenvía), exactamente igual que los objetos de estado en KNX. Si el dispositivo no responde, el widget no simula el cambio.
  • Comandos durante una pérdida de conexión. Los comandos con QoS 1 o 2 se almacenan en cola mientras el broker no esté accesible y se entregan al restablecerse el enlace; los comandos con QoS 0 enviados a un broker inaccesible fallan y se registran en el log.
  • Protección. Los payloads superiores a 64 KB se descartan con un aviso; se crea una única suscripción por cada filtro de topic distinto, con independencia de cuántos objetos lo compartan.

Ejemplo práctico: una lámpara regulable en Zigbee2MQTT

Zigbee2MQTT publica el estado de la lámpara en formato JSON en zigbee2mqtt/lamp ({"state":"ON","brightness":178}) y recibe comandos en zigbee2mqtt/lamp/set. La regulación de brillo va de 0 a 254.

  1. Cree una conexión MQTT para el broker (consulte «Conexiones»): dirección del broker 192.168.1.10, puerto 1883 y las credenciales del broker Zigbee2MQTT si son necesarias. Haga clic en Probar; debe confirmar la conexión.
  2. En Dispositivos, añada un widget de tipo Regulador llamado «Lámpara de oficina». En Protocolo, seleccione la conexión del broker por el nombre asignado. El dispositivo se genera con cuatro objetos: Conmutación ON/OFF, Respuesta de conmutación, Consigna de regulación y Respuesta de regulación.
  3. En Conmutación ON/OFF (comando de encendido/apagado): introduzca zigbee2mqtt/lamp/set en Topic y haga clic en Usar "…" en la lista. Configure Token ON como ON, Token OFF como OFF y Plantilla de payload como {"state":"{{value}}"}. Escriba los tokens manualmente: los textos en gris ON y OFF son solo sugerencias; sin ellos, el conmutador publicará true o false.
  4. En Respuesta de conmutación (estado de encendido/apagado): haga clic en Escanear broker, elija zigbee2mqtt/lamp y seleccione el campo state: el editor configurará la ruta JSON state y los tokens ON/OFF.
  5. En Consigna de regulación (comando de brillo): topic zigbee2mqtt/lamp/set, Plantilla de payload {"brightness":{{value}}}, Escala 0.3937, Offset 0.
  6. En Respuesta de regulación (estado de brillo): topic zigbee2mqtt/lamp, seleccione el campo brightness y configure la misma Escala 0.3937. Este factor equivale aproximadamente a 100/254: los valores recibidos se multiplican por él (Zigbee 0–254 pasa a 0–100 %) y los valores emitidos se dividen por él (0–100 % pasa a 0–254).
  7. Haga clic en Guardar objeto en cada uno de ellos, luego en Aplicar cambios en la barra lateral y confirme.
  8. Ajuste el brillo al 50 % en la aplicación. La lámpara recibe aproximadamente 127 y su respuesta devuelve cerca del 50 %. El deslizador se actualiza a partir del topic de estado y el accionamiento mediante un mando físico también actualiza la aplicación.

📘 Nota: El valor transmitido no se redondea: 50 % se publica como 127.000254. El editor de objetos no incluye un selector de tipo de datos, por lo que no es posible forzar un número entero en el objeto de comando. Asegúrese de que la lámpara admita valores decimales de brillo.

Vinculación MQTT

Los objetos MQTT se configuran en el cuadro de diálogo de ajustes del objeto (abra el objeto con Editar, consulte «Ajustes de objetos, registro y notificaciones»). La sección específica del protocolo se organiza en tres bloques:

Configuración del topic MQTT

CampoDescripción
TopicEl topic al que se suscribe este objeto (Entrada: un topic de estado; admite comodines + y #) o en el que publica (Salida: un topic de comando; sin comodines). Selecciónelo en la lista tras Escanear broker o escríbalo manualmente. La dirección almacenada es <conexión>:<topic>.
Escanear brokerEscucha en el broker durante unos segundos y muestra los topics detectados, cada uno con su Último payload y una etiqueta de retenido. Con un topic seleccionado, si el payload es JSON se muestran sus campos en Seleccione el valor que debe seguir este objeto; un clic completa la ruta JSON, el tipo de datos y los tokens ON/OFF. Si es un payload simple, ofrece Usar el payload sin procesar como .
Formato de payloadValor sin procesar (la totalidad del payload es el valor) o JSON con una Ruta JSON (state, sensor.temperature, values[0]).
Token ON / Token OFFObjetos booleanos: lo que el dispositivo escribe y espera para verdadero/falso (p. ej. ON / OFF).

Publicación (objetos de salida)

CampoDescripción
Plantilla de payloadOpcional. {{value}} se sustituye por el valor; dejar vacío para publicar el valor sin formato.
QoSPor defecto del broker, 0, 1 o 2: garantía de entrega para este comando.
Retener mensajes publicadosDesactivado por defecto. Un comando retenido se vuelve a ejecutar cada vez que el dispositivo se reconecta; retenga el estado, no los comandos.

Suscripción (objetos de entrada)

CampoDescripción
Intervalo mínimo (ms)Los sensores de alta frecuencia se limitan a esta tasa (por defecto 100 ms); el último valor siempre se procesa. 0 desactiva la limitación.
Escala / OffsetObjetos numéricos: valor = raw × escala + offset en la entrada, y la operación inversa al publicar.

Los campos se guardan como la cadena de tipo de datos del objeto (p. ej. BOOL:PATH=state:ON=ON:OFF=OFF); la sintaxis, el explorador de topics y un ejemplo práctico se detallan en la sección MQTT superior.

Ajustes de un objeto MQTT para el estado de regulación de brillo.

Preguntas frecuentes

¿Se necesita un broker MQTT independiente?

Es necesario contar con un broker, pero puede utilizarse uno existente o el broker integrado en HyperVisu. Solo debe crearse la conexión correspondiente hacia el broker elegido.

¿Cómo encontrar el topic de estado y el campo JSON correctos?

Utilice la función Escanear broker en el editor de objetos, seleccione un topic y elija el campo que debe seguir el objeto.

¿Puede un topic de comando contener comodines?

No. Las suscripciones entrantes pueden utilizar + y #, pero los comandos salientes requieren un topic concreto.

¿Es conveniente retener los mensajes de comando?

Por lo general, no. Los comandos retenidos se ejecutan de nuevo cada vez que el dispositivo se reconecta. Los mensajes de estado retenidos sí son útiles para restaurar los valores mostrados.

¿Por qué un comando no confirma de inmediato el estado del dispositivo?

HyperVisu espera la publicación de estado emitida por el dispositivo en lugar de simular la respuesta basándose únicamente en el comando enviado.

¿Requiere el servidor un reinicio cuando el broker vuelve a estar disponible?

No. El servidor reintenta automáticamente las conexiones fallidas con el broker y renueva las suscripciones al reconectarse.

Seguir explorando

Encuentre las demás guías de este producto en la documentación.

Volver a Integraciones