Netatmo — Integración de las cámaras (Home + Security)

¡Hola a todos! :waving_hand:

Como se anunció en el hilo del servicio Netatmo, el desarrollo de la integración de las cámaras Netatmo (gama Home + Security) ha reanudado oficialmente. Este hilo servirá para seguir el progreso, discutir las decisiones y organizar las pruebas.

Un poco de historia

Una primera PR (#2032) se abrió en marzo de 2024 para la cámara interior (NACamera), luego se cerró automáticamente por inactividad. ¡Buena noticia! El trabajo no se ha perdido — la rama ha seguido evolucionando mucho después de la PR (descubrimiento de las cámaras, conversión de los dispositivos Security, recuperación de instantáneas mediante ffmpeg, pruebas completas…). Esta base se retomará en un master actualizado, limpiada y redividida en PR de tamaño razonable — lección aprendida de las grandes PR del pasado :wink:. Por mi parte, ¡tengo material de prueba!

  • cámaras interiores
  • cámara exterior
  • sirena
  • DoorTag

El plan, en 3 etapas

Etapa 1 — Base de la API Security :brick:
Activación de la API Security en la configuración del servicio, descubrimiento de las cámaras, primeras funcionalidades (estado, WiFi). Los comandos relacionados con la cámara serán visibles pero desactivados, con un mensaje de explicación — se desbloquearán en la etapa 2. El objetivo: una PR compacta y fácil de revisar que sienta las bases.

Etapa 2 — La imagen :camera:
La funcionalidad de la cámara en sí: recuperación del flujo (URL VPN Netatmo con cambio automático a la URL local cuando es posible), actualización periódica de la imagen, visualización en el panel de cámaras de Gladys — como las cámaras RTSP.

Etapa 3 — Los eventos y módulos asociados :bell:
Detección de movimiento, detección de personas, y los módulos relacionados con las cámaras (sirena interior, sensores de apertura DoorTag) según el material disponible.

Y después: la recepción de eventos en tiempo real mediante webhook (a través de Gladys Plus), que beneficiará a todos los dispositivos Netatmo, no solo a las cámaras.

¿Por qué ahora?

El servicio acaba de recibir 4 PR de correcciones y refactorización que mejoran la gestión de la conexión, los valores y el descubrimiento: la base está sana para construir sobre ella.

Si tienes cámaras Netatmo (interiores, exteriores, videoportero), ¡preséntate aquí — los probadores serán bienvenidos desde las primeras PR! :raising_hands:

¡Buenas noticias! Las etapas 1 y 2 del plan están codificadas, en PR y probadas en vivo en mi casa (NACamera interior + NOC exterior), ¡y el dashboard en vivo también funciona! :tada:

Lo que funciona hoy en mi pila de ramas:

  • Descubrimiento de cámaras (NACamera + NOC) a través de la API de Seguridad, con estado de vigilancia y calidad WiFi
  • Imagen de la cámara en la caja de la cámara del dashboard, actualizada en cada ciclo (resolución automática de la URL local con retroceso VPN)
  • Comando de vigilancia ON/OFF desde el dashboard
  • Botón « en vivo » de la caja de la cámara funcional (flujo HLS a través del servicio rtsp-camera), con un selector de calidad del flujo en la página del dispositivo
  • Bono: el descubrimiento ahora permite actualizar un dispositivo ya creado cuando aparecen nuevas funcionalidades (se acabó la migración de la base de datos cada vez que se añade algo)

Las PR, en orden de revisión/ fusión (cada PR apilada se reduce automáticamente al fusionar su pariente) — @pierre-gilles cuando tengas un momento :folded_hands: :

  1. #2620 — fix descubrimiento: módulos sin tensión reconstruidos correctamente (fusionar primero, necesario para probar el resto)
  2. #2617 — fix valores falsos (lluvia 0 mm, 0 °C, ángulo 0°… no se reportaban)
  3. #2619 — refactorización declarativa de las actualizaciones (apilada en #2617, -364 líneas netas)
  4. #2618 — endurecimiento de la conexión/tokens (independiente)
  5. #2621 — CAM-1: base de la API de Seguridad + descubrimiento de cámaras
  6. #2624 — flujo « Actualizar » en el descubrimiento
  7. #2623 — CAM-2: imagen + comando de vigilancia
  8. #2625 — CAM-3: transmisión en vivo + selector de calidad
  9. #2622 — fix SVG en desarrollo (independiente, fusionable en cualquier momento)

Las cuatro primeras son PR de saneamiento del servicio actual, intencionalmente pequeñas y sin cambios de comportamiento (excepto los fixes), que preparan el terreno para la cámara.

Lo siguiente: los eventos (movimiento, personas) probablemente a través de webhooks, luego los módulos puenteados (sirena NIS, sensores de apertura NACamDoorTag — ya aparecen como « no soportados » en el descubrimiento).

¡La llamada a los probadores sigue en pie, especialmente si tienes una configuración diferente a la mía (cámara accesible solo a través del VPN Netatmo, por ejemplo)! Una imagen de prueba estará disponible en 30 minutos: docker pull terdious/gladys:netatmo-camera

Un punto técnico para la transparencia sobre el live: funciona, pero es lento para arrancar y poco fluido, y esto no está completamente relacionado con Netatmo ni con la PR #2625 — es el pipeline del servicio rtsp-camera el que re-encoda todo flujo entrante en h264 1920px @ 25 fps.

Mediciones hechas en mi casa sobre el flujo Netatmo (ya en h264):

  • el re-encodado upscale la fuente (720p → 1080p, e incluso una fuente de 384x216 se convierte en 1080p :sweat_smile:), a ~0.3x del tiempo real en mi máquina → el transcodificador se queda atrás en la lista de reproducción en vivo, segmentos saltados, ~19 s antes del primer segmento
  • el -r 25 forzado duplica un frame cada dos (la cámara produce ~12-24 fps)
  • al reemplazar el codificado por un simple -c:v copy (remux HLS cifrado sin re-encodado, probado localmente): primer segmento en ~3 s, velocidad estable 1x, casi sin cortes — CPU cerca de cero

Por lo tanto, propondré una PR core rtsp-camera separada en este sentido: stream-copy cuando la fuente ya es h264 y sin rotación, de lo contrario, re-encodado sin upscale y al fps de la fuente. Esto también beneficiaría a las cámaras RTSP clásicas (y a los pequeños CPU tipo Raspberry Pi). @pierre-gilles te haré un post dedicado con el detalle antes de abrir cualquier cosa, dime si ya tienes una opinión :slightly_smiling_face:

¡Gracias por retomar el trabajo en Netatmo!

Todo lo que permita mejorar el rendimiento es bienvenido :slight_smile: Por lo tanto, genial si has encontrado pistas de optimización.