Anuncio

Qué es MQTT y Mosquitto Broker: Guía del Protocolo IoT [Explicado]

Imagina una torre de control en un aeropuerto con 500 aviones intentando aterrizar a la vez. Si cada piloto tuviera que llamar al controlador, esperar respuesta, confirmar la pista y despedirse, el sistema colapsaría. Necesitan un sistema rápido, breve y eficiente.

En tu casa inteligente pasa exactamente lo mismo. Tienes bombillas, interruptores, sensores de temperatura, cámaras y el servidor de Home Assistant. Si todos intentaran «hablar» a la vez usando protocolos pesados, tu red Wi-Fi se saturaría y notarías ese molesto retraso (lag) al pulsar un interruptor.

Aquí es donde entra el salvador silencioso: MQTT. Es el idioma universal que permite que un sensor de 5€ se comunique instantáneamente con un servidor de última generación, usando menos datos de los que caben en un tweet.

¿Qué es MQTT? El estándar de facto para el Internet de las Cosas (IoT)

MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería extremadamente ligero diseñado para situaciones donde el ancho de banda es limitado o la conexión es inestable. Aunque ahora es la estrella de la domótica, fue inventado por IBM en 1999 para monitorizar oleoductos vía satélite. Necesitaban algo que no gastara datos y fuera a prueba de bombas.

En tu ecosistema domótico (Home Assistant, Zigbee2MQTT, Tasmota), MQTT actúa como el «pegamento» que une marcas y tecnologías diferentes. Si un dispositivo habla MQTT, puede integrarse en tu sistema, sea de la marca que sea.

Ilustración minimalista sobre fondo blanco de una red MQTT. Un cubo central (Broker) está conectado mediante líneas finas a iconos de una bombilla, un termostato y un teléfono móvil, representando la topología de estrella. Topología típica de una red MQTT: Los dispositivos no se conectan entre sí, sino que todos pasan a través del Broker central.

Origen y propósito: ¿Por qué no usar HTTP?

La web que usas ahora mismo funciona sobre HTTP. Es genial para enviar fotos y textos grandes, pero es terrible para un sensor de puerta que funciona con pilas. ¿Por qué?

HTTP es un protocolo «hablador»: requiere abrir conexión, enviar cabeceras grandes, esperar respuesta y cerrar conexión. Para enviar un simple «ON», HTTP gasta mucha energía y tiempo.

MQTT, en cambio, mantiene una conexión abierta «dormida» y tiene una cabecera minúscula (apenas 2 bytes). Veamos la diferencia real:

Característica HTTP (Web tradicional) MQTT (IoT Domótico) 🏆
Modelo Petición / Respuesta (Cliente-Servidor) Publicación / Suscripción (Desacoplado)
Peso del mensaje Pesado (Cabeceras grandes) Pluma (Mínimo 2 bytes)
Consumo de batería Alto (Mata dispositivos a pilas) Muy Bajo (Ideal para sensores)
Velocidad Lenta (Handshake constante) Instantánea (Tiempo real)

La arquitectura Publicación/Suscripción (Pub/Sub) explicada

Esta es la parte más importante para entender cómo configurar tu sistema. MQTT no funciona como una llamada telefónica (1 a 1), sino como la Radio o Twitter.

  • El Broker (Mosquitto): Es la antena repetidora o la oficina de correos. Su único trabajo es recibir mensajes y repartirlos. No piensa, solo reparte. En nuestro caso, suele ser el software Eclipse Mosquitto instalado en Proxmox o Home Assistant.
  • El Publicador (Publisher): Es quien genera la noticia. Ejemplo: Un sensor de temperatura Zigbee que dice «Estoy a 22ºC». El sensor no sabe quién le escucha, él simplemente grita el dato al Broker.
  • El Suscriptor (Subscriber): Es quien quiere recibir la noticia. Ejemplo: Home Assistant o una pantalla en la pared. Le dicen al Broker: «Avísame cada vez que alguien hable de temperatura».

💡 El poder del «Desacoplamiento»

Gracias a esta arquitectura, si Home Assistant se reinicia, el sensor de temperatura no falla ni se bloquea; sigue enviando sus datos al Broker. Cuando Home Assistant vuelva, se reconectará y recibirá los datos. Esto hace que el sistema sea infinitamente más robusto.

La mejor forma de aprender MQTT es con dispositivos que lo soporten nativamente y sean baratos para «cacharrear», como los basados en ESP32 o la familia Shelly.

El rol del Cliente (Publisher/Subscriber)

En el mundo MQTT, la palabra «Cliente» es engañosa. No nos referimos solo a tu móvil o tu ordenador. Un cliente es cualquier dispositivo o software que se conecta al Broker.

Esto significa que tanto un pequeño sensor de temperatura de 3€ (que funciona con una pila de botón) como tu potente servidor Home Assistant son, a ojos del sistema, exactamente iguales: ambos son clientes.

Un cliente puede asumir dos papeles, a menudo simultáneamente:

  • Publisher (El que habla): Envía datos. Por ejemplo, un sensor de puerta que publica «ABIERTA» en el tema casa/puerta/estado.
  • Subscriber (El que escucha): Espera datos. Por ejemplo, tu bombilla inteligente está suscrita al tema casa/cocina/luz/comando esperando recibir un «ON» para encenderse.

💡 La doble vida de Home Assistant

Home Assistant es el cliente más activo de tu red. Actúa como Suscriptor para enterarse de lo que hacen tus sensores (escuchar) y como Publicador para enviar órdenes a tus luces (hablar). Todo ocurre a través del mismo cable virtual hacia el Broker.

El rol del Broker (El intermediario)

Si los clientes son los músicos, el Broker es el director de orquesta. Es una pieza de software (normalmente Eclipse Mosquitto) que se ejecuta en tu servidor (Raspberry Pi, NUC o Proxmox).

El Broker es el componente más crítico de la infraestructura. Sus responsabilidades son:

  1. Autenticación: Verifica que quien intenta conectarse tiene usuario y contraseña (¡vital para la seguridad!).
  2. Filtrado: Recibe millones de mensajes pero solo entrega los que interesan. Si el sensor del baño envía la humedad, el Broker se asegura de enviárselo solo a quien se haya suscrito a «humedad del baño», ignorando al resto.
  3. Gestión de sesiones: Si un dispositivo se desconecta brevemente, el Broker puede guardar sus mensajes pendientes (según la configuración QoS) para entregárselos cuando vuelva.
Diagrama de flujo de datos MQTT: Un sensor envía una flecha roja (publicación) al Broker central, y este distribuye flechas verdes (suscripción) hacia Home Assistant y un teléfono móvil.
Visualización del modelo Pub/Sub: El sensor «Publica» datos y el Broker se encarga de repartirlos únicamente a los dispositivos «Suscritos».

Es importante entender que el Broker no guarda el histórico de datos a largo plazo (para eso está la base de datos de Home Assistant). El Broker vive en el «ahora». Su misión es la velocidad, no el almacenamiento.

Dado que el Broker es el corazón de las comunicaciones, debe ejecutarse en un hardware que esté conectado por cable de red para evitar latencias.

Anatomía de un mensaje MQTT: Conceptos técnicos

Para dominar MQTT, debes entender que cada mensaje se compone de dos partes inseparables: la «dirección de envío» (Topic) y el «contenido del paquete» (Payload). Si fallas en una, el mensaje se pierde en el vacío.

Los Tópicos (Topics): Entendiendo la jerarquía

El Tópico es la ruta que define de qué trata el mensaje. Imagina la estructura de carpetas de tu ordenador o una dirección URL. En MQTT, usamos barras / para separar niveles jerárquicos.

Una estructura típica en domótica se ve así:

casa / cocina / luz_techo / estado

  • Nivel 1 (Raíz): casa (Define la ubicación o el sistema).
  • Nivel 2: cocina (La habitación).
  • Nivel 3: luz_techo (El dispositivo).
  • Nivel 4: estado (La función específica).

Buenas prácticas de nomenclatura (Case sensitive, estructura)

Cuando configures dispositivos DIY (como ESPHome o Tasmota), tú decides los tópicos. Sigue estas reglas de oro para evitar dolores de cabeza:

  • Case Sensitive (Sensible a mayúsculas): Casa/Luz es un tópico diferente a casa/luz. Para evitar errores, usa siempre minúsculas.
  • Evita espacios y caracteres especiales: No uses tildes, ñ, ni espacios en blanco. Usa guiones bajos (_) para separar palabras. (Ej: cuarto_niños ❌ -> cuarto_ninos ✅).
  • No empieces con barra (/): Aunque es válido, añadir una barra al principio (/casa/luz) crea un nivel «vacío» innecesario que complica la gestión en algunos brokers.

Uso de Wildcards: El signo más (+) y la almohadilla (#)

Los «comodines» o Wildcards son herramientas potentes que usamos al suscribirnos (escuchar), nunca al publicar. Permiten escuchar varios canales a la vez sin tener que escribir uno por uno.

Comodín Nombre Función y Ejemplo
+ Single Level (Un nivel) Sustituye a un solo segmento de la ruta.
Ej: casa/+/temperatura escuchará la temperatura de la cocina, del salón y del baño, pero no escuchará casa/cocina/humedad.
# Multi Level (Multinivel) Sustituye a todo lo que venga después.
Ej: casa/cocina/# escuchará absolutamente todo lo que pase en la cocina (luces, sensores, persianas…).

⚠️ ¡Cuidado con la almohadilla (#)!

Suscribirse al tópico raíz # significa «escuchar todo lo que pasa en la red». Si tienes muchos dispositivos, esto puede saturar tu cliente MQTT Explorer o incluso bloquear Home Assistant si no está bien configurado. Úsalo solo para depurar errores (debugging).

Payload: ¿Qué datos podemos enviar? (JSON, Texto, Binario)

Si el Tópico es el sobre de la carta, el Payload es lo que va escrito dentro. Es la información real. MQTT es «agnóstico» con los datos, lo que significa que le da igual lo que envíes mientras sean bytes.

  • Texto plano / Números: Lo más simple.Ejemplo: ON, OFF, 25.5. Es fácil de leer, pero si un sensor tiene temperatura, humedad y batería, necesitarías enviar 3 mensajes a 3 tópicos distintos.
  • JSON (El estándar de facto): Permite enviar múltiples datos en un solo mensaje estructurado.Ejemplo: {"temp": 22.5, "hum": 60, "bat": 90}. Es el formato que usa Zigbee2MQTT por defecto.
  • Binario: Se pueden enviar imágenes o archivos, pero no se recomienda en domótica porque puede saturar el Broker.
Captura de pantalla de la interfaz de MQTT Explorer mostrando un mensaje expandido con formato JSON que incluye variables de temperatura, calidad de señal y batería.
Visualización de un mensaje MQTT estructurado en JSON: Permite enviar múltiples valores (batería, temperatura, estado) en un solo tópico.

Si te interesa profundizar en la programación de estos mensajes y cómo estructurar datos JSON para tus propios proyectos con Arduino o ESP32, hay guías excelentes disponibles.

Gestión de Estado y Fiabilidad (Nivel Intermedio/Experto)

Hasta ahora hemos visto cómo enviar datos, pero ¿qué pasa si el cable de red se desconecta justo en el milisegundo en que envías una orden? ¿O si Home Assistant se reinicia y se pierde el estado de tus luces?

MQTT tiene mecanismos integrados para sobrevivir a redes inestables y garantizar que la información crítica siempre llegue a su destino.

Calidad de Servicio (QoS): Garantizando la entrega

El QoS (Quality of Service) es un acuerdo entre el emisor y el Broker sobre «cuánto esfuerzo» deben poner para asegurar que el mensaje llegue. Existen tres niveles, y elegir el correcto es vital para no saturar tu red Wi-Fi innecesariamente.

QoS 0: «At most once» (Dispara y olvida)

Es el modo más rápido y ligero. El cliente envía el mensaje y lo borra de su memoria inmediatamente. No espera confirmación. Si el mensaje se pierde por el camino, se perdió para siempre.

  • Analogía: Enviar una carta ordinaria por correos. Probablemente llegue, pero si no lo hace, nadie te avisará.
  • Uso ideal: Sensores de temperatura o humedad que envían datos cada 30 segundos. Si se pierde una lectura, no importa, llegará otra en medio minuto.

QoS 1: «At least once» (Entrega garantizada, posible duplicado)

Es el estándar en domótica (usado por defecto en Tasmota y Zigbee2MQTT). El emisor guarda el mensaje hasta que el Broker le responde con un «ACK» (Recibido). Si no recibe respuesta en un tiempo, lo vuelve a enviar.

  • Analogía: Carta certificada. Sabes que llegará, pero si el cartero se lía, podría entregarte la misma carta dos veces.
  • Uso ideal: Encender una luz o abrir una puerta de garaje. Es crítico que la orden llegue. Home Assistant sabe gestionar si recibe la orden dos veces (simplemente la luz sigue encendida), así que los duplicados no son problema.

QoS 2: «Exactly once» (La opción más segura y lenta)

Garantiza que el mensaje llega y, además, asegura que no hay duplicados. Requiere un «baile» de 4 pasos entre cliente y servidor. Es muy pesado para dispositivos IoT pequeños.

  • Uso ideal: Transacciones bancarias o sistemas industriales críticos. Rara vez se usa en domótica doméstica.

Persistencia de datos: Mensajes Retenidos (Retained Messages)

Imagina que reinicias Home Assistant. Cuando arranca, se conecta al Broker, pero… ¡no sabe si la luz de la cocina está encendida o apagada! Tendría que esperar a que el sensor envíe una actualización, lo cual podría tardar horas.

Para solucionar esto, existe el «Retain Flag». Cuando un dispositivo envía un mensaje marcado como Retained, el Broker hace dos cosas:

  1. Lo entrega a los suscriptores actuales (como siempre).
  2. Se guarda una copia del último valor en su memoria.

Cuando un nuevo suscriptor (como tu Home Assistant recién reiniciado) se conecta y se suscribe a ese tema, el Broker le entrega inmediatamente el mensaje retenido («La luz está ON»). Así, tu dashboard se actualiza al instante sin esperar.

Captura de pantalla de MQTT Explorer donde se resalta el indicador de "Retained" (flag retenido) activo en un mensaje de estado.
El indicador «Retained» confirma que el Broker guardará este último mensaje para enviarlo inmediatamente a cualquier nuevo suscriptor que se conecte.

⚠️ El peligro de los «Mensajes Fantasma»

El flag Retain es un arma de doble filo. Si un sensor envía un error retenido y luego lo tiras a la basura, el Broker seguirá enviando ese error «fantasma» a Home Assistant eternamente cada vez que reinicies.
Solución: Para borrar un mensaje retenido, debes enviar un mensaje vacío a ese mismo tópico con el flag Retain activado.

Last Will and Testament (LWT): Detectando desconexiones inesperadas

MQTT mantiene una conexión viva (Keep Alive), pero si alguien corta el cable de alimentación de tu sensor, este no tiene tiempo de enviar un mensaje de «Estoy Apagado». Para el sistema, el sensor parecería estar vivo, pero congelado.

El LWT (Última Voluntad y Testamento) es un mensaje que el cliente configura en el momento de conectarse al Broker. Le dice: «Oye Broker, si en algún momento dejo de responderte sin despedirme educadamente, por favor publica ESTE mensaje en ESTE tema en mi nombre».

Gracias al LWT, cuando desenchufas un dispositivo Tasmota o Shelly, ves casi al instante que pasa a estado «Unavailable» en Home Assistant, porque el Broker ha ejecutado su última voluntad.

Para que el LWT funcione correctamente en caso de corte de luz general, tu Broker (el servidor) debe seguir encendido. Un SAI es el mejor amigo de la fiabilidad MQTT.

Eclipse Mosquitto: Instalación y Puesta en Marcha

Ya conocemos la teoría. Ahora vamos a ensuciarnos las manos. El software que vamos a utilizar es Eclipse Mosquitto, un broker de código abierto que se ha convertido en el estándar absoluto de la industria por ser ligero, robusto y gratuito.

Instalación de Mosquitto Broker (Linux, Windows y Docker)

Mosquitto es multiplataforma. Puedes instalarlo en tu PC de juegos con Windows, en un servidor Linux empresarial o en una Raspberry Pi.

  • Linux (Debian/Ubuntu/Raspberry Pi OS): Tan simple como escribir sudo apt install mosquitto mosquitto-clients. Se instalará como un servicio del sistema que arranca automáticamente.
  • Windows: Descargas el instalador `.exe` desde su web oficial. Es útil para pruebas rápidas, pero no recomendamos Windows para un servidor domótico 24/7 debido a las actualizaciones forzadas y reinicios.
  • Docker (La opción recomendada): Si usas Proxmox, un NAS Synology o CasaOS, Docker es el camino. Te permite aislar el Broker, actualizarlo fácilmente y moverlo de máquina sin perder la configuración.

Despliegue rápido con Docker Compose

Si tienes Docker instalado, crea un archivo llamado docker-compose.yml con el siguiente contenido. Esto levantará un servidor Mosquitto persistente en segundos:

version: '3'
services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto
    restart: unless-stopped
    ports:
      - "1883:1883"  # Puerto estándar MQTT
      - "9001:9001"  # Puerto WebSockets (Opcional)
    volumes:
      - ./config:/mosquitto/config
      - ./data:/mosquitto/data
      - ./log:/mosquitto/log
Captura de pantalla de una terminal Linux ejecutando el comando docker-compose up -d para desplegar el contenedor de Mosquitto, mostrando los estados "Created" y "Started" en verde.
Ejecución exitosa del despliegue: El comando -d (detached) levanta el servicio Mosquitto en segundo plano.

Configuración esencial del archivo mosquitto.conf

Aquí es donde la mayoría de guías antiguas fallan. Desde la versión 2.0, Mosquitto viene «cerrado» por defecto: solo acepta conexiones desde el propio ordenador (localhost) y requiere autenticación obligatoria.

Para que tus dispositivos (que están fuera del servidor) puedan conectarse, debes editar el archivo mosquitto.conf que se encuentra en tu carpeta /config:

persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log

## SECCIÓN CRÍTICA ##
listener 1883
allow_anonymous true 

⚠️ ¡Atención a la seguridad!

La línea allow_anonymous true permite que cualquiera en tu red Wi-Fi se conecte sin contraseña. Para pruebas está bien, pero para producción debes cambiarlo a false y crear un archivo de contraseñas (password_file) para evitar intrusos.

Herramientas de diagnóstico imprescindibles: MQTT Explorer

Trabajar con MQTT sin una herramienta visual es como intentar arreglar un cableado eléctrico con los ojos vendados. Necesitas ver qué está pasando por «los cables».

MQTT Explorer es la navaja suiza gratuita que todo domótico debe tener instalada en su PC. Sus funciones clave son:

  • Vista en Árbol: Organiza todos los tópicos jerárquicamente. Puedes ver al instante si tu sensor está enviando a casa/salon o home/livingroom.
  • Gráficas en tiempo real: Al pinchar en un valor numérico, te dibuja una gráfica de su evolución histórica reciente.
  • Modo «Chivato»: Te permite publicar mensajes manualmente. Útil para simular que eres un sensor y ver si Home Assistant reacciona a tus órdenes.

Captura de pantalla del software MQTT Explorer mostrando una estructura de árbol de tópicos Zigbee2MQTT a la izquierda y un gráfico lineal de evolución de temperatura a la derecha. El panel derecho de MQTT Explorer genera gráficas automáticas de los valores numéricos, ideal para detectar fluctuaciones en sensores de temperatura o humedad.

Recuerda que para ejecutar Mosquitto y Docker de forma fluida y estable, un Mini PC dedicado es la inversión más inteligente frente a las tarjetas SD de las Raspberry Pi.

Seguridad en Mosquitto: Blindando tu red IoT (Nivel Experto)

Por defecto, MQTT es un protocolo diseñado para la confianza: «Si estás en la red, eres amigo». En 2024, esa mentalidad es peligrosa. Si un atacante entra en tu Wi-Fi o expones el puerto 1883 a Internet por error, podría abrir tu garaje o encender tu calefacción en agosto.

Vamos a aplicar capas de seguridad («cebolla») para que tu Broker sea un búnker inexpugnable.

Autenticación básica: Configuración de usuario y contraseña

Ya mencionamos esto en la instalación, pero vamos a profundizar. Mosquitto incluye una utilidad llamada mosquitto_passwd para crear archivos de contraseñas encriptados (Hashed). Nunca debes guardar contraseñas en texto plano.

Para crear un nuevo usuario (o sobrescribir el archivo):

mosquitto_passwd -c /mosquitto/config/pwfile mi_usuario

Para añadir un segundo usuario (sin borrar el anterior):

mosquitto_passwd -b /mosquitto/config/pwfile sensor_jardin clave123

Una vez creado, asegúrate de que tu mosquitto.conf apunta a este archivo y, lo más importante, deshabilita el acceso anónimo:

password_file /mosquitto/config/pwfile
allow_anonymous false
Captura de terminal Linux ejecutando el comando mosquitto_passwd para crear un usuario, mostrando el resultado del archivo con el hash de la contraseña encriptada.
Seguridad ante todo: Al usar mosquitto_passwd, las credenciales se guardan como «hashes» ilegibles, protegiendo tu red de miradas indiscretas.

Listas de Control de Acceso (ACLs): ¿Quién puede leer/escribir qué?

Tener contraseña es como tener la llave del edificio, pero las ACL (Access Control Lists) son las llaves de cada habitación. ¿Por qué tu bombilla del salón necesita tener permiso para abrir la puerta del garaje?

Las ACLs permiten limitar qué tópicos puede tocar cada usuario. Se configuran en un archivo de texto (ej. acl_file) que se referencia en la configuración principal.

Ejemplo de archivo ACL robusto:

# El administrador (Home Assistant) puede hacer todo
user admin_ha
topic readwrite #

# El sensor del salón solo puede publicar su temperatura
user sensor_salon
topic write casa/salon/temperatura

# La pantalla del pasillo solo puede leer estados, no cambiar nada
user tablet_pasillo
topic read casa/#

Implementar esto evita que un dispositivo hackeado (como una bombilla barata con seguridad nula) sea usado para atacar el resto de tu casa.

Cifrado SSL/TLS: Protegiendo los datos en tránsito

Si la autenticación protege el acceso, el cifrado SSL protege el viaje. Sin SSL, cualquiera que capture tráfico en tu red (usando Wireshark) puede ver los mensajes MQTT en texto plano, incluyendo usuarios y contraseñas.

Al activar SSL, Mosquitto deja de usar el puerto 1883 y pasa a usar el 8883 (el estándar seguro). El contenido del mensaje se vuelve ilegible para los espías.

Generación de certificados autofirmados vs. Let’s Encrypt

Para activar el candadito verde (SSL), necesitas certificados digitales. Tienes dos caminos:

Tipo de Certificado Pros y Contras Uso Recomendado
Autofirmados (Self-Signed) ✅ Gratis y caducidad larga (10 años).
❌ Tus dispositivos no confiarán en él nativamente (requiere instalar la CA en cada cliente).
Redes locales cerradas (LAN) donde controlas todos los clientes.
Let’s Encrypt (Públicos) ✅ Confianza automática global.
❌ Requiere dominio propio y renovar cada 90 días (complejo en redes locales sin Internet).
Si expones tu Broker a Internet (no recomendado) o usas DNS internos.

⚠️ El coste oculto del SSL en IoT

El cifrado requiere potencia de cálculo. Dispositivos antiguos o muy básicos como el ESP8266 o la primera generación de Sonoff pueden sufrir retardos importantes (latencia) o incluso bloqueos al intentar desencriptar SSL/TLS.
Consejo Pro: En una red local segura (VLAN IoT aislada), a menudo es mejor usar MQTT plano (puerto 1883) para los sensores pequeños y dejar el SSL solo para las conexiones externas.

La mejor seguridad es una buena segmentación de red. Usar un router capaz de crear VLANs aísla tus dispositivos IoT de tus ordenadores personales.

Escenarios Avanzados y Arquitecturas Complejas

Si has llegado hasta aquí, ya tienes un broker seguro y funcional. Pero, ¿qué pasa si tienes una segunda vivienda? ¿O si quieres mostrar datos en una web pública sin exponer tu servidor? MQTT es increíblemente flexible y permite arquitecturas que van más allá de un simple «servidor único».

Mosquitto Bridge: Conectando múltiples brokers (Edge to Cloud)

Imagina que tienes una casa de vacaciones con su propio Home Assistant y quieres recibir alertas críticas (como una fuga de agua) en tu casa principal. Podrías exponer ambos a Internet, pero eso es inseguro.

La solución elegante es el Bridging (Puenteo). Consiste en conectar dos Brokers MQTT entre sí. Uno actúa como «satélite» y envía (o recibe) una selección de mensajes al broker «central».

Para configurar un puente, solo necesitas añadir unas líneas al final del mosquitto.conf del broker satélite:

# Definición de la conexión
connection puente_casa_playa
address mi-dominio-ddns.com:8883

# Mapeo de tópicos (Qué enviamos y qué recibimos)
# Sintaxis: topic [patron] [direccion] [qos] [prefijo-local] [prefijo-remoto]
topic alarmas/# out 1 casa/playa/ casa/playa/

Con esta configuración, cualquier mensaje que publiquen tus sensores de la playa en casa/playa/alarmas/... viajará automáticamente a través de Internet (cifrado por el puerto 8883) y aparecerá en el broker de tu casa principal. Es magia.

💡 Edge Computing

Esta arquitectura se usa en la industria. El broker «Edge» (en la fábrica o casa remota) procesa los datos rápidos y solo envía al «Cloud» (tu casa principal) los resúmenes o alarmas importantes, ahorrando ancho de banda y datos móviles 4G.

WebSockets sobre MQTT: Conectando dashboards web directamente

MQTT funciona sobre TCP puro, un protocolo que los navegadores web (Chrome, Firefox) no entienden directamente. Si quieres crear un panel de control web personalizado en HTML/JavaScript que se actualice en tiempo real sin recargar la página, necesitas WebSockets.

Habilitarlo en Mosquitto es tan sencillo como abrir un listener extra en la configuración:

# Puerto estándar (Para sensores y HA)
listener 1883
protocol mqtt

# Puerto WebSockets (Para navegadores y Apps Web)
listener 9001
protocol websockets

Ahora, librerías de JavaScript como Paho MQTT pueden conectarse al puerto 9001 y suscribirse a tus tópicos. Es la base de muchos dashboards modernos.

Monitorización del rendimiento y logs del Broker

¿Tu red va lenta? ¿Hay algún dispositivo «spammenando» mensajes y saturando el broker? Mosquitto tiene un sistema de auto-diagnóstico integrado llamado $SYS Topics.

Si te suscribes al tópico $SYS/# con MQTT Explorer, verás las constantes vitales de tu servidor en tiempo real. Los más útiles son:

  • $SYS/broker/clients/connected: Número total de dispositivos conectados ahora mismo. Si este número oscila violentamente, tienes dispositivos que se están desconectando y reconectando (boot loop).
  • $SYS/broker/load/messages/received/1min: Carga de trabajo. Si ves miles de mensajes por minuto en una casa normal, alguien está configurado incorrectamente.
  • $SYS/broker/uptime: Tiempo que lleva el broker encendido sin reinicios.
Captura de pantalla de MQTT Explorer con la rama de sistema $SYS desplegada, mostrando estadísticas en tiempo real como clientes conectados, uptime y carga del broker.
Los tópicos que empiezan por $SYS son mensajes internos del servidor: te dicen cuánta memoria consume o cuántos clientes hay conectados en ese instante.

Para visualizar estos datos 24/7, muchos usuarios avanzados montan una pequeña pantalla dedicada en su rack o mesa de trabajo.

Integración en el ecosistema Domótico

Un broker MQTT aislado es como una oficina de correos vacía. Su verdadero poder se desata cuando conectamos los «habitantes» de nuestra casa inteligente. Vamos a ver cómo configurar los tres grandes actores de la domótica DIY.

Conectando Node-RED con Mosquitto

Node-RED es el mejor amigo de MQTT. Su naturaleza visual basada en flujos encaja perfectamente con el concepto de «tuberías» de datos.

Para conectar Node-RED a tu nuevo broker Mosquitto:

  1. Arrastra un nodo «mqtt in» (para escuchar) o «mqtt out» (para publicar).
  2. Haz doble clic y pulsa el icono del lápiz junto a «Add new mqtt-broker».
  3. En la pestaña Connection: Pon la IP de tu servidor (ej: 192.168.1.100) y el puerto 1883.
  4. En la pestaña Security: Introduce el usuario y contraseña que creaste con mosquitto_passwd.

Una vez configurado, verás un pequeño punto verde «Connected» debajo del nodo. A partir de ahí, cualquier mensaje que llegue al tópico que configures saldrá por el conector del nodo listo para ser procesado.

MQTT Discovery en Home Assistant

Antiguamente, para añadir un sensor MQTT a Home Assistant, tenías que escribir líneas y líneas de código YAML en el archivo configuration.yaml. Un horror.

Hoy en día existe MQTT Discovery. Es un estándar que permite que un dispositivo se «presente» a Home Assistant automáticamente. El truco está en enviar un mensaje de configuración a un tópico específico, normalmente bajo la ruta homeassistant/.

Cómo funciona la magia:

Si tu dispositivo envía este JSON al tópico homeassistant/sensor/mi_jardin/config:

{
  "name": "Temperatura Jardín",
  "device_class": "temperature",
  "state_topic": "casa/jardin/sensor1",
  "unit_of_measurement": "°C",
  "unique_id": "jardin_temp_01"
}

Home Assistant creará automáticamente una entidad llamada «Temperatura Jardín» y empezará a escuchar el tópico casa/jardin/sensor1. Sin tocar ni una línea de YAML.

💡 Truco de Persistencia

Los mensajes de Discovery deben enviarse con el flag Retain = True. ¿Por qué? Porque si reinicias Home Assistant, este olvidará los dispositivos descubiertos. Al tener el mensaje retenido, el Broker se lo volverá a «recordar» nada más arrancar.

Interfaz de configuración de Home Assistant mostrando la integración de MQTT y el listado de dispositivos detectados automáticamente mediante MQTT Discovery. Gracias a MQTT Discovery, Home Assistant configura automáticamente los sensores sin que tengas que escribir código YAML manualmente.

Microcontroladores: ESP32 y ESP8266 (Librería PubSubClient)

Si eres un «maker» y te gusta crear tus propios sensores, la librería estándar para Arduino IDE es PubSubClient (de Nick O’Leary). Es ligera, estable y funciona en casi cualquier placa.

Un esquema básico de código para un ESP32 sería:

  1. Conectar al Wi-Fi.
  2. Conectar al Broker (client.connect("ID_Cliente", "User", "Pass")).
  3. En el loop(), mantener la conexión y publicar datos: client.publish("casa/taller/temp", "25.0").

El ESP32 es la mejor opción actual para nodos MQTT DIY: tiene doble núcleo, Wi-Fi y Bluetooth, y cuesta muy poco.

Conclusión: MQTT, el sistema nervioso de tu hogar

Si has llegado hasta aquí, ya entiendes por qué MQTT no es «una opción más», sino la columna vertebral de la domótica moderna. Mientras que otros protocolos luchan por enviar un simple «Hola», MQTT mueve miles de datos por segundo en tu red sin despeinarse.

Al implementar un Broker Mosquitto centralizado, ganas tres superpoderes:

  • Independencia: Tus dispositivos no dependen de la nube de ningún fabricante chino. Son tuyos.
  • Velocidad: La latencia pasa de segundos a milisegundos.
  • Interoperabilidad: Puedes hacer que una bombilla de IKEA hable con un sensor Xiaomi y un termostato DIY, usando MQTT como traductor universal.

🏆 El Consejo Final

No tengas miedo a la pantalla negra de la terminal. Configurar Mosquitto te llevará 15 minutos, pero te ahorrará años de frustraciones con dispositivos Wi-Fi que se desconectan o servidores que van lentos. Es la mejor inversión de tiempo que puedes hacer por tu casa inteligente.


Preguntas Frecuentes sobre MQTT

¿Cuántos dispositivos soporta Mosquitto?

Muchos más de los que podrás comprar. Una Raspberry Pi 4 corriendo Mosquitto puede gestionar fácilmente más de 10.000 clientes conectados y decenas de miles de mensajes por segundo. Para un uso doméstico (50-200 dispositivos), el consumo de CPU es prácticamente cero.

¿Es mejor MQTT o usar las integraciones nativas de Home Assistant?

Depende. Las integraciones nativas son más fáciles (clic y listo), pero MQTT es más robusto. Si usas MQTT (por ejemplo, vía Zigbee2MQTT), separas la capa de hardware de la capa de control. Si reinicias Home Assistant, tu red Zigbee sigue viva en MQTT. Si usas la integración nativa ZHA, todo muere hasta que HA arranca. Nosotros preferimos MQTT por su estabilidad.

¿Puedo acceder a mi Broker desde fuera de casa?

Técnicamente sí (abriendo el puerto 1883/8883 en el router), pero NUNCA deberías hacerlo sin medidas de seguridad extremas (SSL + Usuario/Pass). La forma segura de conectar desde fuera es usando una VPN (como WireGuard o Tailscale) para entrar a tu red local como si estuvieras en el sofá.

¿Qué pasa si dos dispositivos publican en el mismo Tópico?

Se produce una «guerra de estados». Si el Sensor A dice «ON» y el Sensor B dice «OFF» en el mismo tópico casa/luz, la luz parpadeará o cambiará aleatoriamente. Asegúrate siempre de que cada dispositivo tenga un unique_id o tópico base diferente.

¿Te ha sido útil? ¡Compártelo con otros!

Únete a la Comunidad

Síguenos en nuestras redes para ver tutoriales en vídeo, ideas de decoración y trucos rápidos para tu hogar inteligente.

Deja un comentario