Servicio Netatmo

Le pregunté a Claude, y según él hay dos problemas:

  1. Un refresh OAuth probablemente roto desde la migración a undici (Bearer en un token expirado, error introducido en este PR: fix: Netatmo service to replace axios with undici for HTTP requests by Terdious · Pull Request #2256 · GladysAssistant/Gladys · GitHub).
  2. Una política de «borrar todo» tan pronto como falla un refresh, que convierte cualquier error pasajero en una desconexión duradera.

@Terdious Estoy a tu disposición si necesitas ayuda para corregirlo :slight_smile:

¡Gracias a todos por sus comentarios!

Eran las 00:30 por mi parte.

¡Hola a todos!

¡A mí también me pasa lo mismo!

Disculpad por el retraso, no he tocado el PC en dos semanas, mis padres están en casa. Y me he torcido el pulgar y el índice al principio de la semana. :face_with_peeking_eye::face_with_peeking_eye:

Intentaré echarle un vistazo este fin de semana.

Gracias @pierre-gilles por el primer análisis… y lo siento por la introducción del error

No hay problema @Terdious, no hay prisa…

¡Que te mejores!

¡Vaya! ¿Quieres que haga una PR el lunes? No podré probarlo, pero puedo poner a Claude en el tema :joy:

¡Saludos!

Estoy en el tema.

He podido ver, especialmente en HA, que no se debe incluir un encabezado de autorización en /oauth2/token. También aprovecho para mejorar la información de retorno del usuario en el front durante una reconexión en la página de configuración.

PR creada aquí:

Aproveché para crear una segunda PR para mejorar la respuesta existente también, en algunos casos de error, la integración no se detectaba como desconectada y seguía visualmente en « Conectado » aunque no lo estuviera (por ejemplo, discover fallido). Por lo tanto, aprovecho para reutilizar la función de reconexión automática. PR2:

¡Gracias @Terdious!

Para mí está bien, he fusionado el primer PR. Gracias por tomarte el tiempo de revisarlo y proponer las correcciones :folded_hands:

Para el segundo PR, como está basado en el primero, ahora hay algunos conflictos. ¿Podrías hacer un rebase de master para resolverlos?

¡Gracias! :grinning_face_with_smiling_eyes:

¡Con mucho gusto, es normal!

¡Perfecto para mí en la segunda PR, está rebaseada.

Para información, la evolución consiste en activar también el ciclo de reconexión automática cuando Netatmo rechaza el token de acceso. Sin esto, hacer clic en « Actualizar » en la página de Descubrimiento o recuperar los valores cuando la aplicación Netatmo está desactivada no provocaba ningún mensaje de error.

Ahora tenemos una información clara del estado de reconexión en curso en todas las páginas de la integración. Los ciclos de intentos son: 30s → 60s → 120s → 300s, luego 300s recurrentes indefinidamente.



Para mí está bien, está fusionado y saldrá en la próxima versión de Gladys :slight_smile:

Gracias por todos estos parches :raising_hands:

Las correcciones están disponibles en Gladys Assistant 4.80:

Gracias @Terdious por las correcciones :slight_smile:

¡Hola a todos! :waving_hand:

El proyecto Netatmo vuelve a empezar. Antes de reanudar el desarrollo de la integración de las cámaras (la antigua PR #2032, cerrada automáticamente por inactividad — un nuevo tema dedicado llegará muy pronto), hemos decidido empezar por sanear el servicio actual: auditoría completa del historial del servicio, seguida de una serie de correcciones específicas.

Resultado: 4 PR, todas probadas y validadas en condiciones reales en mi instalación (termostato, una docena de válvulas, relés, estación meteorológica y sus módulos — varios dispositivos deliberadamente sin tensión, lo que, por cierto, reveló un bonito error :grinning_face_with_smiling_eyes:).

Las 4 PR (en el orden de merge recomendado)

1. #2620 — Descubrimiento de dispositivos sin tensión :red_circle: para mergear primero
Un solo módulo sin tensión en tu casa (por ejemplo, el relé de una bomba de calor apagada fuera de temporada de calefacción) era suficiente para congelar completamente la página de descubrimiento (obligación de recargar la página), con un dispositivo llamado « undefined ». Estos módulos ahora se reconstruyen correctamente desde la API (nombre, habitación), se muestran con un mensaje explícito « Dispositivo inalcanzable… (código: 6) », se marcan como fuera de línea y siguen siendo registrables — sus valores se recuperarán tan pronto como se vuelvan a alimentar.

2. #2617 — Los valores cero ya no se pierden
0 mm de lluvia, 0 °C, viento del sector norte (0°), ráfaga a 0 km/h… se trataban como valores « ausentes » (reemplazados por un dato de respaldo potencialmente diferente, o emitidos como estados vacíos). Esto se ha corregido: un cero es un valor real, y ningún estado fantasma se registra cuando el dato está realmente ausente.

3. #2618 — Robustez de la conexión

  • una consigna de termostato que falla ya no hace que el servicio se bloquee en silencio: el fallo ahora se propaga y se registra correctamente (logs del servidor + estado del servicio visible en las páginas de la integración). Cabe señalar que el panel de Gladys aún no muestra los fallos de comando — es una limitación general del núcleo de Gladys (arquitectura asíncrona de las acciones), esta PR establece el prerrequisito para que un futuro retorno visual sea posible;
  • el token de acceso se actualiza al 80% de su vida útil (antes: justo al vencimiento, con una ventana de token muerto);
  • los valores de los dispositivos se recuperan inmediatamente después de la conexión OAuth (antes: hasta 2 minutos de espera);
  • fin de las funcionalidades llamadas « Mínimo en undefined » para los módulos sin habitación.

4. #2619 — Refactor interno (basado en #2617)
Los 8 archivos de actualización duplicados se reemplazan por una única tabla declarativa: -370 líneas de código, sin cambios de comportamiento (toda la suite de pruebas pasa sin modificar un solo valor esperado). Es principalmente la base que hará que la adición de los futuros tipos de dispositivos — las cámaras — sea mucho más simple.

Calidad

Cubierta de pruebas al 100% en todo el código afectado, listas de verificación completadas, comentarios de CodeRabbit tratados (3 corregidos, el resto descartados con justificación).

@pierre-gilles todo está listo para revisión :slightly_smiling_face: Orden de merge recomendado: #2620 → #2617 → #2618 → #2619 (la #2620 está incluida en las otras 3 ramas porque es indispensable para probarlas; una vez fusionada, sus diferencias se reducirán en consecuencia. La #2619 está apilada sobre la #2617).

Continuará en el próximo episodio: la reanudación de las cámaras Netatmo, con un tema dedicado :video_camera:

¡Excelente !!! Gracias @Terdious por el trabajo monumental que haces :star_struck:

Gracias @mutmut,

Te confieso que hoy menos que antes, en realidad… Hago sobre todo driving y prompts de IA. Revisión durante la codificación, pruebas sobre la marcha, retroalimentación y reflexión/validación. Luego, pruebas completas e indicación de las direcciones a tomar. En particular, hago mucha investigación en foros y en GitHub para siempre indicar a la IA que se refiera a las discusiones ya realizadas, a las experiencias de desarrollo pasadas, a las decisiones de diseño.

Para Netatmo, he podido darle numerosas fuentes pasadas, revisiones de Pierre-Gilles, errores míos, etc., para no repetirlos o equivocarse de camino. ¡Parece que funciona bien! Pero solo las revisiones lo revelan. Porque aún comete errores :sweat_smile: y sobre todo, por mi culpa, se me escapan. Pero menos que cuando yo codificaba todo.

¡Genial, gracias por estos PRs! Te aviso en cuanto los haya revisado :slight_smile: