Service Netatmo

J’ai demandé à Claude, et deux problèmes selon lui :

  1. Un refresh OAuth probablement cassé depuis la migration undici (Bearer sur un token expiré, bug introduit dans cette PR : fix: Netatmo service to replace axios with undici for HTTP requests by Terdious · Pull Request #2256 · GladysAssistant/Gladys · GitHub ).
  2. Une politique « tout effacer » dès qu’un refresh échoue, qui transforme toute erreur passagère en déconnexion durable.

@Terdious A ta disposition si besoin d’aide pour corriger :slight_smile:

Merci à tous pour vos retours !

C’était 0h30 de mon côté.

Bonjour à tous !

En effet la meme pour moi !

Desolé pour le délai, je n’ai pas touché au PC depuis 2 semaines, mes parents sont à la maison. Et je me suis fait une entorse + foulure pouce et index en début de semaine. :face_with_peeking_eye::face_with_peeking_eye:

Je tente de regarder ca ce week-end.

Merci @pierre-gilles pour la primo analyse … et désolé pour l’introduction du bug

Pas de souci @Terdious, y’a pas le feu…

Bon rétablissement à toi !

Ah mince ! Tu veux que je fasse une PR lundi ? Je ne pourrais pas tester mais je peux lancer Claude sur le sujet :joy:

Salutations !

Je suis sur le sujet.

J’ai pu voir, notamment sur HA, qu’il ne faut pas de header Authorization sur /oauth2/token. J’en profite également pour améliorer le retour d’info utilisateur front pendant une reconnexion sur la page de setup.

PR créée ici :

J’en ai profité pour créer une seconde PR pour améliorer le retour existant également, dans certains cas d’erreurs, l’intégration n’était pas détectée comme déconnectée et restait visuellement en « Connecté » même si ce n’était pas le cas (discover qui échouait par exemple). J’en profite donc pour réutiliser la fonction de reconnexion automatique. PR2 :

Merci @Terdious !

C’est bon pour moi, j’ai mergé la première PR. Merci d’avoir pris le temps de regarder ça et de proposer les corrections :folded_hands:

Pour la seconde PR, comme elle est basée sur la première, il y a maintenant quelques conflits. Est-ce que tu pourrais rebase master afin de les résoudre ?

Merci ! :grinning_face_with_smiling_eyes:

Avec plaisir, c’est normal !

C’est bon pour moi sur la seconde PR, c’est rebase.

Pour info, l’évolution consiste à déclencher également le cycle de reconnexion automatique lorsque Netatmo rejette le jeton d’accès. Sans cela, cliquer sur « Actualiser » sur la page Découverte ou récupérer les valeurs lorsque l’application Netatmo est désactivée ne provoquait aucun message d’erreur.

On a maintenant une information claire de l’état de reconnexion en cours sur toutes les pages de l’intégration. Les cycles de tentatives, sont : 30s → 60s → 120s → 300s, puis 300s récurrentes indéfiniment.



C’est bon pour moi, c’est mergé et ça partira dans la prochaine version de Gladys :slight_smile:

Merci pour tous ces correctifs :raising_hands:

Les correctifs sont disponibles dans Gladys Assistant 4.80 :

Merci @Terdious pour les correctifs :slight_smile:

Hello à tous ! :waving_hand:

Le chantier Netatmo reprend ! Avant de relancer le développement de l’intégration des caméras (l’ancienne PR #2032, fermée automatiquement pour inactivité — un nouveau sujet dédié arrive très vite), nous avons décidé de commencer par assainir le service actuel : audit complet de l’historique du service, puis une série de correctifs ciblés.

Résultat : 4 PR, toutes testées et validées en conditions réelles sur mon installation (thermostat, une dizaine de vannes, relais, station météo et ses modules — dont plusieurs appareils volontairement hors tension, ce qui a d’ailleurs révélé un joli bug :grinning_face_with_smiling_eyes:).

Les 4 PR (dans l’ordre de merge conseillé)

1. #2620 — Découverte des appareils hors tension :red_circle: à merger en premier
Un seul module hors tension dans votre maison (ex : le relais d’une PAC coupée hors saison de chauffe) suffisait à figer complètement la page de découverte (obligation de recharger la page), avec un appareil nommé « undefined ». Ces modules sont maintenant reconstruits proprement depuis l’API (nom, pièce), affichés avec un message explicite « Appareil injoignable… (code : 6) », marqués hors ligne, et restent enregistrables — leurs valeurs remonteront dès qu’ils seront réalimentés.

2. #2617 — Les valeurs à zéro ne sont plus perdues
0 mm de pluie, 0 °C, vent de secteur nord (0°), rafale à 0 km/h… étaient traités comme des valeurs « absentes » (remplacées par une donnée de secours potentiellement différente, ou émises comme états vides). C’est corrigé : un zéro est une vraie valeur, et plus aucun état fantôme n’est enregistré quand la donnée est réellement absente.

3. #2618 — Robustesse de la connexion

  • une consigne de thermostat qui échoue ne fait plus planter le service en silence : l’échec est désormais propagé et tracé proprement (logs serveur + statut du service visible sur les pages de l’intégration). À noter : le dashboard Gladys n’affiche pas encore les échecs de commande — c’est une limitation générale du cœur de Gladys (architecture asynchrone des actions), cette PR pose le prérequis pour qu’un futur retour visuel soit possible ;
  • le jeton d’accès est rafraîchi à 80 % de sa durée de vie (avant : pile à expiration, avec une fenêtre de jeton mort) ;
  • les valeurs des appareils sont récupérées immédiatement après la connexion OAuth (avant : jusqu’à 2 minutes d’attente) ;
  • fin des fonctionnalités nommées « Minimum in undefined » pour les modules sans pièce.

4. #2619 — Refactor interne (basée sur #2617)
Les 8 fichiers de mise à jour dupliqués sont remplacés par une table déclarative unique : -370 lignes de code, zéro changement de comportement (toute la suite de tests passe sans modifier une seule valeur attendue). C’est surtout la fondation qui rendra l’ajout des futurs types d’appareils — les caméras ! — beaucoup plus simple.

Qualité

Couverture de tests à 100 % sur tout le code touché, check-lists remplies, remarques de CodeRabbit traitées (3 corrigées, le reste écarté avec justification).

@pierre-gilles tout est prêt pour review :slightly_smiling_face: Ordre de merge conseillé : #2620#2617#2618#2619 (la #2620 est incluse dans les 3 autres branches car indispensable pour les tester ; une fois mergée, leurs diffs fondront d’autant. La #2619 est stackée sur la #2617).

La suite au prochain épisode : la reprise des caméras Netatmo, avec un sujet dédié :video_camera:

Excellent !!! Merci @Terdious pour le boulot monstre que tu fais :star_struck:

Merci @mutmut,

Je t’avoue qu’aujourd’hui moins qu’avant finalement … Je fais surtout du driving et du prompt IA a vrai dire.
Relecture pendant le coding, testing à la volée, remontée et réflexion/validation !!^^ Testin g complet ensuite, et indication des directions à prendre, notamment, je fais énormément de recherche forum + github pour toujours indiquer à l’IA de se référer aux discussions déjà portées, aux expériences des développement passées, aux décision de design.

Là pour Netatmo, j’ai pu lui donner de nombreuses sources passées, de review de Pierre-Gilles, d’erreurs de ma part, etc, pour ne pas les reproduire ou se tromper de voie. Ca a l’air de bien fonctionner ! Mais seul les review le révèle ^^ Car il en fait encore quand même :sweat_smile: et surtout faute à moi, j’en loupe. Mais moins que quand c’est moi qui codait entièrement.

Génial, merci pour ces PRs ! Je te tiens au courant dès que j’ai regardé :slight_smile: