Frigate + Mosquitto + Home Assistant: cómo encajan
1. Los tres componentes y sus roles
| Componente | Rol | Qué hace |
|---|---|---|
| Frigate | NVR (Network Video Recorder) | Se conecta a las cámaras por RTSP, detecta objetos, graba y publica eventos en MQTT. También sirve vídeo en vivo y clips por API REST (puerto 5000). |
| Mosquitto | Broker MQTT | Es el cartero: recibe mensajes de quien publica y los reparte a quien está suscrito. No analiza ni transforma nada. |
| Home Assistant | Centro de control | Se suscribe al broker, recibe los eventos de Frigate y crea entidades (sensores, cámaras, etc.). También se conecta a la API de Frigate para vídeo en vivo y clips. |
2. Cómo fluye la información
┌─────────────┐ publica ┌──────────────┐ entrega ┌──────────────────┐
│ FRIGATE │ ───────────────► │ MOSQUITTO │ ───────────────► │ HOME ASSISTANT │
│ (NVR) │ topics MQTT │ (broker) │ topics MQTT │ (centro control) │
└─────────────┘ └──────────────┘ └──────────────────┘
▲ │
│ │
└──────────────── API REST (HTTP:5000) ────────────────────────────────┘
(para cámaras en vivo, clips, etc.)
Hay dos canales de comunicación entre Frigate y HA:
- MQTT (a través de Mosquitto) → para eventos y estados (detecciones, movimiento, sensores).
- API REST (HTTP en el puerto 5000) → para vídeo en vivo, clips, snapshots, configuración.
Por eso en HA ves dos integraciones distintas:
- MQTT → recibe los eventos de Frigate.
- Frigate (vía HACS) → se conecta a la API para el vídeo y los medios.
3. El papel de Mosquitto
Mosquitto no analiza ni transforma los mensajes. Solo hace de intermediario.
Topics típicos que publica Frigate
frigate/available→ "estoy vivo"frigate/icsee3/person→ "hay 2 personas en la cámara icsee3"frigate/ipcam0/motion→ "hay movimiento en ipcam0"frigate/events→ "evento nuevo detectado"
Home Assistant se suscribe a
frigate/#(todo lo que empiece porfrigate/)
Cuando Frigate publica un mensaje, Mosquitto lo reenvía inmediatamente a todos los suscritos (HA en este caso). Así HA sabe en tiempo real qué está pasando en las cámaras sin tener que preguntar a Frigate constantemente.
Ventajas de MQTT frente a preguntar por API
- Es push (Frigate avisa), no pull (HA pregunta cada X segundos).
- Es instantáneo y muy ligero.
- HA no sobrecarga a Frigate con peticiones.
4. El lío del localhost / 127.0.0.1
Aquí está la clave de la confusión. localhost significa "esta misma máquina", pero depende de desde dónde se ejecute el comando.
Desde el HOST (tu ordenador físico)
localhost = tu ordenador (192.168.1.28).
Desde dentro de un CONTENEDOR Docker
localhost = el propio contenedor, no el host.
Cada contenedor tiene su propia interfaz de red localhost que apunta a sí mismo.
5. Por eso cada componente usa una dirección distinta
| Componente | Dónde corre | ¿Qué es localhost para él? |
Dirección correcta al broker |
|---|---|---|---|
| Home Assistant | Contenedor con --network=host |
El host (comparte red) | 127.0.0.1 ✅ |
| Frigate | Contenedor con red propia (frigate-net) |
El propio Frigate | mosquitto ✅ |
| Cliente en el host | El host físico | El host | localhost ✅ |
Por qué:
- HA usa
127.0.0.1→ porque con--network=hostcomparte la red del host, así que127.0.0.1es el host donde Mosquitto expone el puerto 1883. - Frigate usa
mosquitto→ porque está en la redfrigate-netcon Mosquitto. Docker tiene un DNS interno que resuelve el nombre del servicio al contenedor correspondiente.localhostdentro de Frigate apuntaría a Frigate mismo (donde no hay broker). - El comando
mosquitto_puben el host usalocalhost→ porque se ejecuta en el host físico, donde Mosquitto escucha en0.0.0.0:1883.
6. Mapa visual de las redes
┌────────────────────────────────────────────────────────────────┐
│ HOST (192.168.1.28) │
│ │
│ ┌──────────────────────────────┐ │
│ │ Home Assistant │ │
│ │ --network=host │ │
│ │ localhost = 192.168.1.28 │ │
│ └──────────────┬───────────────┘ │
│ │ 127.0.0.1:1883 │
│ ▼ │
│ ┌──────────────────────────────┐ │
│ │ Puerto 1883 expuesto │ │
│ └──────────────▲───────────────┘ │
│ │ │
│ ┌──────────────┴───────────────┐ ┌──────────────────────┐ │
│ │ Red Docker: frigate-net │ │ Contenedor │ │
│ │ ┌─────────────┐ ┌────────┐ │ │ Windows (WinBoat) │ │
│ │ │ Mosquitto │ │Frigate │ │ │ Red propia │ │
│ │ │ mosquitto │◄─┤ │ │ └──────────────────────┘ │
│ │ └─────────────┘ └────────┘ │ │
│ └──────────────────────────────┘ │
│ │
│ Comando en el host: mosquitto_pub -h localhost ... │
│ (apunta a 192.168.1.28) │
└────────────────────────────────────────────────────────────────┘
Dentro de frigate-net:
- Frigate y Mosquitto se ven por nombre de servicio (
mosquitto). - Docker tiene su propio DNS que resuelve estos nombres automáticamente.
7. Resumen de direcciones correctas
| Desde... | Hacia Mosquitto usa... |
|---|---|
Home Assistant (--network=host) | 127.0.0.1:1883 |
Frigate (en frigate-net) | mosquitto:1883 |
| Cliente en el host | localhost:1883 |
| Otro dispositivo de la LAN | 192.168.1.28:1883 |
Cada uno usa la dirección que corresponde a "dónde está" respecto al broker.
8. Por qué 127.0.0.1 en HA y no otra cosa
Porque HA corre con --network=host, lo que significa que HA no tiene su propia red aislada: usa directamente la del host. Así que 127.0.0.1 dentro de HA es el host. Y Mosquitto expone el 1883 al host (0.0.0.0:1883), así que HA lo alcanza.
Si HA corriera sin --network=host (con bridge), tendrías que usar 172.18.0.1 o el nombre del contenedor Mosquitto (si estuvieran en la misma red).
9. Resumen conceptual
- Frigate → NVR que detecta y graba.
- Mosquitto → mensajería entre Frigate y HA (eventos en tiempo real).
- HA → recibe eventos vía MQTT y vídeo vía API.
localhost→ significa "esta máquina", y cambia según desde dónde lo llames.- La red Docker → es lo que permite que contenedores se vean por nombre.
Tu setup actual es correcto
- Frigate ↔ Mosquitto: misma red Docker, por nombre
mosquitto✅ - HA ↔ Mosquitto: HA con red host, por
127.0.0.1✅ - HA ↔ Frigate (API): HA con red host, por
localhost:5000✅
10. Comandos útiles de verificación
Ver versión de Frigate
curl -s http://localhost:5000/api/version
Ver logs de Frigate
docker logs frigate -f
Ver logs del broker
sudo tail -20 /home/martinez/.winboat/mosquitto/log/mosquitto.log
Probar MQTT desde el host
mosquitto_pub -h localhost -p 1883 -u frigate -P altisidora112 -t test -m "hola"
Suscribirse a los topics de Frigate
timeout 15 mosquitto_sub -h localhost -p 1883 -u frigate -P altisidora112 -t 'frigate/#' -v
Ver config MQTT de Frigate
grep -A 8 "^mqtt:" /webdata/http/frigate/config/config.yml
11. Notas de mantenimiento
- Cada vez que cambies el
config.ymlde Frigate, reinicia con:
No basta concd ~/.winboat docker compose down frigate docker compose up -d frigatedocker compose restartni con el botón "Restart" de la web. - Si algo falla, revisa el log del broker: es la mejor fuente de verdad sobre si Frigate está conectado.
- Verifica siempre con
mqtt.dumpen HA si los mensajes llegan.