Service Netatmo

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: