Automatización IoT

Home Assistant con broker MQTT externo: conéctate a un broker en la nube por TLS

Dos formas probadas de usar Home Assistant con un broker MQTT externo: conectar la integración directamente a un broker en la nube por TLS, o hacer un bridge del complemento Mosquitto local para que los dispositivos sigan funcionando sin conexión.

Dos casas y una cabaña de vacaciones que comparten un broker en la nube en una configuración de Home Assistant con broker MQTT externo
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

Configurar Home Assistant con un broker MQTT externo saca el broker fuera de tu casa, de modo que los dispositivos de una segunda residencia, un taller o el piso de un familiar pueden hablar con el mismo Home Assistant sin redirección de puertos ni VPN. En esta guía conectarás Home Assistant a un broker en la nube por TLS, organizarás los topics para varias ubicaciones y, como alternativa, harás un bridge del complemento Mosquitto local con la nube para que los dispositivos locales sigan funcionando cuando se caiga internet.

Por qué usar un broker externo

El complemento Mosquitto es la opción por defecto por algo: es local, rápido y sencillo. Se vuelve incómodo cuando los dispositivos no están en la LAN de tu casa:

  • Un sensor en una segunda vivienda tiene que llegar a tu red doméstica, lo que implica redirección de puertos, DNS dinámico y exponer un broker a internet, o ejecutar una VPN en hardware alimentado por batería.
  • Varias instancias de Home Assistant (la tuya, la de tus padres) no pueden compartir fácilmente un mismo conjunto de dispositivos.
  • Otras aplicaciones, como un stack de Grafana en un servidor o una app móvil, necesitan su propia vía de acceso.

Un broker externo invierte la dirección. Todos los clientes, incluido Home Assistant, se conectan hacia fuera al mismo broker MQTT en la nube. No hay nada escuchando dentro de tu casa y todas las ubicaciones son iguales.

Enfoque Dispositivos locales sin internet Dispositivos remotos Complejidad
Solo Mosquitto local Funcionan Necesitan VPN o redirección de puertos Baja
Directo al broker en la nube Dejan de reportar hasta reconectar Funcionan en cualquier lugar Baja
Mosquitto local con bridge a la nube Funcionan Funcionan en cualquier lugar Media

Elige la conexión directa si la mayoría de los dispositivos son remotos o valoras la sencillez. Elige el bridge si automatizaciones locales críticas (luces, calefacción) dependen de dispositivos MQTT de la casa.

Opción 1: conectar Home Assistant directamente al broker en la nube

Crea el broker y las credenciales

Regístrate en el portal de ConnectMQ, crea un broker y anota el usuario, la contraseña y el client ID generados. Crea credenciales separadas para Home Assistant y para cada dispositivo remoto, así podrás revocar una sin tocar las demás.

Antes de tocar Home Assistant, prueba las credenciales desde un ordenador:

mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -u YOUR_USERNAME -P YOUR_PASSWORD -i YOUR_CLIENT_ID \
  -t "sites/#" -v

En macOS con Homebrew, sustituye --capath /etc/ssl/certs por --cafile apuntando a un bundle de CA, por ejemplo $(brew --prefix)/etc/ca-certificates/cert.pem. Si el comando se conecta y se queda esperando en silencio, las credenciales y la ruta TLS son correctas.

Configura la integración

  1. En tu perfil de usuario de Home Assistant, activa el Modo avanzado. Sin él, las opciones de client ID y TLS están ocultas.
  2. Ve a Ajustes > Dispositivos y servicios > Añadir integración > MQTT (o reconfigura tu entrada MQTT existente).
  3. Introduce:
    • Broker: broker.connectmq.com
    • Puerto: 8883
    • Usuario / Contraseña: las credenciales de Home Assistant
    • Client ID: el client ID emitido, exactamente igual
    • Validación del certificado del broker: Auto
    • Transporte: TCP
    • Protocolo MQTT: 5 (o 3.1.1; ambos están soportados)
  4. Envía el formulario y comprueba que la integración aparece como conectada.

La validación Auto usa el almacén de CA del sistema, que confía en el certificado de Let's Encrypt que presenta el broker. Nunca elijas Off para una conexión por internet. Si tu red bloquea el puerto 8883 de salida, cambia el transporte a WebSockets con el puerto 8084 y la ruta /mqtt; funciona sobre un tráfico similar a HTTPS que la mayoría de los firewalls permiten. Más información en MQTT sobre WebSocket.

Un dispositivo remoto

Un ESP32 remoto publica en el mismo broker con sus propias credenciales:

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>

WiFiClientSecure net;
PubSubClient mqtt(net);

void setup() {
  WiFi.begin("CABIN_WIFI", "CABIN_WIFI_PASSWORD");
  while (WiFi.status() != WL_CONNECTED) delay(250);
  net.setCACert(ISRG_ROOT_X1);   // raíz de Let's Encrypt, cadena PEM definida en otro lugar
  mqtt.setServer("broker.connectmq.com", 8883);
}

void loop() {
  if (!mqtt.connected()) {
    if (mqtt.connect("YOUR_CLIENT_ID", "YOUR_USERNAME", "YOUR_PASSWORD",
                     "sites/cabin/boiler-room/availability", 1, true, "offline")) {
      mqtt.publish("sites/cabin/boiler-room/availability", "online", true);
    } else {
      delay(5000);
      return;
    }
  }
  mqtt.loop();
  static unsigned long last = 0;
  if (millis() - last > 60000) {
    last = millis();
    mqtt.publish("sites/cabin/boiler-room/climate", "{\"temperature\":6.4,\"humidity\":71}");
  }
}

El tutorial de ESP32 MQTT muestra cómo incrustar el certificado raíz. En Home Assistant, define el sensor en YAML o deja que el dispositivo se anuncie solo mediante Home Assistant MQTT discovery.

Diseño de topics para varias ubicaciones

Con muchas ubicaciones en un mismo broker, pon el sitio en primer lugar:

sites/<site>/<room>/<device>/<measurement-or-command>
sites/home/livingroom/climate
sites/cabin/boiler-room/climate
sites/cabin/boiler-room/availability
sites/workshop/compressor/power

Ventajas: un wildcard por ubicación (sites/cabin/#), reglas de bridge sencillas y una propiedad clara en el explorador de topics de ConnectMQ. Mantén las configuraciones de discovery bajo el prefijo por defecto homeassistant/ y, si dos instancias de Home Assistant comparten el broker, dale a cada una su propio prefijo de discovery para que no recojan las entidades de la otra.

Opción 2: bridge del complemento Mosquitto con la nube

Un bridge es una conexión desde tu Mosquitto local al broker externo que reenvía los topics seleccionados en una o ambas direcciones. Home Assistant y los dispositivos locales siguen hablando con el broker local, de modo que las automatizaciones sobreviven a los cortes de internet, mientras que las ubicaciones remotas aparecen a través del bridge.

  1. En la configuración del complemento Mosquitto, activa la configuración personalizada:
customize:
  active: true
  folder: mosquitto
  1. Crea /share/mosquitto/bridge.conf (por ejemplo con el complemento File editor o Samba):
connection connectmq
address broker.connectmq.com:8883
bridge_protocol_version mqttv311
remote_clientid YOUR_CLIENT_ID
remote_username YOUR_USERNAME
remote_password YOUR_PASSWORD
bridge_capath /etc/ssl/certs
bridge_insecure false
cleansession true
try_private false
notifications false
restart_timeout 10 60

# los datos locales de la casa suben, las ubicaciones remotas bajan
topic sites/home/# out 1
topic sites/cabin/# in 1
topic sites/workshop/# in 1
  1. Reinicia el complemento y busca en su log una línea que indique que el bridge se ha conectado.

Se recomienda try_private false cuando el otro extremo no es otra instancia de Mosquitto. Si en tu versión el complemento no encuentra el directorio de CA, descarga el PEM de ISRG Root X1 en /share/mosquitto/ y usa bridge_cafile /share/mosquitto/isrgrootx1.pem en su lugar. Nunca hagas bridge de # en ambas direcciones; genera bucles y duplicados.

El bridge es una funcionalidad estándar de Mosquitto que actúa como un cliente MQTT normal del broker en la nube, así que funciona con cualquier broker MQTT gestionado que acepte TLS y credenciales.

Supervisar la conexión

Cuando Home Assistant depende de un broker externo, haz visibles los problemas de conexión. Dale a cada dispositivo remoto un topic de disponibilidad con un mensaje online retenido y un last will offline, y úsalo en las definiciones de tus entidades para que los sensores remotos pasen a no disponibles en lugar de mostrar valores obsoletos. Una automatización sencilla de Home Assistant que te avise cuando la entidad de disponibilidad de una ubicación remota siga no disponible durante diez minutos detecta cortes de luz y fallos del router en la segunda vivienda. En el lado del broker, el explorador de topics en vivo muestra si una ubicación sigue publicando, y las reglas de alerta por umbral pueden vigilar valores críticos, como una temperatura con riesgo de helada en la cabaña.

Lista de comprobación de seguridad

  1. TLS en todas las conexiones por internet (8883 u 8084), nunca 1883 sin cifrar con credenciales reales.
  2. Un juego de credenciales por ubicación o dispositivo; revoca en lugar de rotarlo todo.
  3. Los client IDs deben coincidir con las credenciales emitidas; ConnectMQ los vincula entre sí y bloquea las IP tras varios inicios de sesión fallidos.
  4. No publiques estados de cerraduras, códigos de alarma ni datos de presencia en el servidor MQTT público gratuito ni en ningún otro broker público, que solo sirven para pruebas; mantenlos en tu broker privado.
  5. Mantén los topics de comandos acotados y haz que los dispositivos acepten solo valores conocidos.

Los principios generales están en buenas prácticas de seguridad MQTT.

Resolución de problemas

Síntoma Causa Solución
"Not authorized" en el log Contraseña o client ID incorrectos Copia de nuevo las credenciales; el client ID debe coincidir exactamente
Certificate verify failed Validación personalizada sin CA, o sistema muy antiguo Usa la validación Auto; actualiza el sistema operativo
Se conecta y se cae cada pocos segundos Dos clientes usan el mismo client ID Da a cada cliente sus propias credenciales
Bridge conectado pero sin datos Los patrones de topic no coinciden Compara los patrones con los topics reales en el explorador de topics
Mensajes duplicados Topic con bridge en ambas direcciones Usa in u out, no both, para patrones que se solapan

Conecta Home Assistant a ConnectMQ

Crea un broker Serverless gratuito en app.connectmq.com, sin tarjeta de crédito. El plan gratuito admite hasta 25 conexiones, suficientes para Home Assistant, un bridge y un conjunto de dispositivos remotos, y puedes ampliarlo más adelante sin cambiar los topics. ConnectMQ opera el broker, renueva los certificados y aísla tu tráfico. Para más proyectos, consulta la guía de automatización IoT y la configuración básica de Home Assistant MQTT.

Preguntas frecuentes

¿Se detendrán mis automatizaciones si se cae internet?

Con una conexión directa a la nube, las entidades MQTT dejan de actualizarse hasta que vuelve la conexión. Si hay automatizaciones locales que dependen de dispositivos MQTT, usa el bridge de Mosquitto para que el tráfico local nunca salga de casa.

¿Tengo que abrir puertos en el router?

No. Home Assistant, el bridge y los dispositivos remotos se conectan todos hacia fuera al broker externo, así que no hace falta ningún puerto de entrada.

¿Pueden dos instancias de Home Assistant compartir un broker externo?

Sí. Dale a cada instancia sus propias credenciales y su prefijo de discovery, y organiza los topics por ubicación para que cada instancia se suscriba solo a lo que necesita.

¿Qué puerto debo usar si el 8883 está bloqueado?

Usa WebSocket seguro en el puerto 8084 con la ruta /mqtt, que Home Assistant admite mediante la opción de transporte WebSockets.

Artículos relacionados

Guía para configurar Zigbee2MQTT: del coordinador al panel

Instala Zigbee2MQTT con Docker, configura el coordinador y la conexión MQTT, empareja y renombra dispositivos, contrólalos por MQTT y consulta sus estados en un panel, probando primero en un servidor MQTT público gratuito.

8 min de lectura

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.