Tenía pendiente integrar una cámara Reolink RLC-510WA, disponible en Amazon ubicada en una red remota. Sin fibra ni ADSL disponibles en esa ubicación, la conectividad es por 4G — router Cudy LT500D con SIM Movistar, tambien disponible en Amazon, — y todo dentro de mi red WireGuard para acceso seguro. La cámara funciona perfectamente en la app Reolink desde el primer momento. Integrarla en Home Assistant, otra historia.


Esto es lo que acabó funcionando, tras bastantes horas de pruebas.
El escenario
La topología es la típica de homelab con un nodo remoto:
- En casa: Home Assistant OS corriendo en una VM de Proxmox (VM 101), IP
192.168.1.20. - Router Movistar principal:
192.168.1.1, con rutas estáticas a las subredes remotas. - LXC WireGuard gateway:
192.168.1.3, peer con IP10.100.0.2en la red WG. - VPS Hetzner: hace de hub WireGuard en la IP
10.100.0.3, escuchando en el puerto51820 UDP. - Cudy LT500D en la ubicación remota: peer WireGuard con IP
10.100.0.6, sirviendo LAN192.168.77.0/24. - Cámara Reolink RLC-510WA:
192.168.77.138, conectada por Ethernet al Cudy.
El camino de un paquete desde Home Assistant hasta la cámara pasa por cinco saltos: HAOS → LXC gateway → VPS Hetzner → Cudy → cámara.

Verificación previa de red
Antes de tocar nada en Home Assistant, lo primero es confirmar que la red funciona extremo a extremo. Todos estos tests los hice desde la consola SSH de HAOS:
# Latencia y pérdida de paquetes
ping -c 60 192.168.77.138
# Puertos Reolink
nc -vz 192.168.77.138 80 # HTTP
nc -vz 192.168.77.138 443 # HTTPS
nc -vz 192.168.77.138 554 # RTSP
nc -vz 192.168.77.138 8000 # ONVIF
nc -vz 192.168.77.138 9000 # Baichuan
# Traceroute para ver el camino real
traceroute -n 192.168.77.138Resultado: latencia media 149 ms, jitter 8 ms, 0% pérdida. Todos los puertos TCP accesibles. El traceroute completaba limpiamente los 6 saltos. La red no era el problema.
Lo que no funcionó
No voy a extenderme en detalles porque este no es un artículo sobre debugging, pero conviene mencionar qué vías descarté antes de llegar a la solución:
- Integración nativa Reolink: falla por timeout en el protocolo Baichuan (puerto 9000) — la cámara responde a los comandos iniciales por HTTP pero la sesión TCP persistente que necesita Baichuan no completa sobre este tipo de enlace. Dejé un issue abierto en el repositorio de reolink_aio con toda la información por si algún día se puede abordar. El mantenedor trabaja en esto en su tiempo libre y la carga de issues es considerable, así que no es una crítica — es simplemente que de momento esta vía no está resuelta para mi caso.
- Integración ONVIF: se añade, pero la URL RTSP que expone (
/Preview_01_main) da "Invalid data found when processing input" al reproducir. Es un problema conocido de ciertas cámaras Reolink donde ONVIF reporta una URL que no es la real. - Generic Camera: la configuración vía YAML está eliminada desde hace versiones. Vía UI timeoutea el probe inicial a los 2 minutos.
La vía que funcionó fue WebRTC Camera de AlexxIT + go2rtc.
La solución que funciona
Requisito previo: RAM suficiente en la VM
Este punto es importante porque, aunque el artículo va de red y Home Assistant, resultó ser determinante. La VM de HAOS estaba con 2 GB de RAM, ~21 MB libres y 531 MB de swap usado. Los paquetes del stream llegaban al kernel de la VM pero los procesos Python no los leían a tiempo, la cámara retransmitía y los timeouts expiraban antes de que la aplicación procesara nada.
# Desde el nodo Proxmox
qm set 101 --memory 4096Tras ampliar a 4 GB y reiniciar la VM, la aplicación podía seguir el ritmo de datos entrantes sin ahogarse. No puedo decir con total certeza que la RAM sea el único factor que cambió, pero sí que sin este paso nada de lo siguiente funcionaba.
Instalación de go2rtc y WebRTC Camera
go2rtc viene integrado en Home Assistant desde la versión 2024.11. No hay que instalar ningún addon para usarlo. Solo hay que añadirlo como integración:
Ajustes → Dispositivos y servicios → Añadir integración → go2rtc
En el diálogo de configuración, dejé la URL vacía (usa la instancia integrada) y desmarqué las opciones de WebUI pública y RTSP público para no exponer nada sin contraseña.
WebRTC Camera es un componente de HACS creado por AlexxIT. Usa go2rtc como motor de streaming por debajo y, a diferencia del reproductor nativo de Home Assistant, prueba múltiples tecnologías (MSE, WebRTC, HLS, MJPEG) hasta encontrar una que funcione con el cliente:
- HACS → buscar "WebRTC" (el de AlexxIT) → Download
- Reiniciar Home Assistant
- Ajustes → Dispositivos y servicios → Añadir integración → WebRTC
Tarjeta en el dashboard
Una vez instalado todo, basta con añadir una tarjeta manual al dashboard con esta configuración:
type: custom:webrtc-camera
url: rtsp://admin:PASSWORD@192.168.77.138:554/h264Preview_01_subDetalles que importan:
- URL RTSP directa: no paso por la integración Reolink ni ONVIF. WebRTC Camera resuelve el stream directamente via go2rtc.
- Substream (
h264Preview_01_sub): el stream de baja resolución (640×480 a 7 fps). Sobre un enlace 4G con latencia es lo sensato. El main stream (2K @ 25 fps) es perfectamente reproducible también, pero consume mucha más banda. - Credenciales en la URL: Basic auth inline, tal cual.
Al cargar el dashboard por primera vez tarda unos segundos en aparecer la imagen (negociación RTSP inicial sobre la latencia del 4G), pero luego mantiene el stream estable.
Gestión de credenciales
Las credenciales no van en configuration.yaml. La tarjeta se define desde el dashboard UI, donde los campos no soportan la sintaxis !secret directamente. Si te incomoda tenerlas ahí (es razonable), algunas alternativas:
- Crear un usuario dedicado en la cámara con permisos reducidos para HA.
- Cambiar la contraseña periódicamente.
- No publicar nunca exports del dashboard en repositorios públicos.
Yo, después de todas las pruebas del día, cambié la contraseña de la cámara como primera acción tras la integración.
Lo que queda
Con la cámara ya en Home Assistant, los siguientes pasos naturales son:
- Configurar detección de movimiento. Reolink detecta localmente y puede notificar via webhook a HA.
- Crear automatizaciones (luces, alertas por Telegram cuando alguien entra).
- Añadir snapshots rápidos con
still_image_urlapuntando al endpointcgi-bin/api.cgi?cmd=Snapde la cámara.
Pero eso es material para otro post.
Reflexión final
Lo que parecía un problema complejo (cámara remota, 4G, VPN, múltiples protocolos, varias integraciones fallando) resultó tener una solución bastante simple en cuanto encontramos la combinación correcta. El diagnóstico lo que más costó. La integración en sí son cinco líneas de YAML.
Y la lección más importante del día no fue de red ni de Home Assistant: fue recordar que una VM con poca RAM no solo va lenta — puede hacer que las aplicaciones fallen de formas aparentemente desconectadas del recurso escaso.