Service Netatmo

On avance sur Netatmo Home + Security :
Image de test disponible : docker pull terdious/gladys:netatmo-security-nacamera

A quand le 1920x1080 ?? :crazy_face: Ou le choix du nombre de colonnes ?? Temps d’espaces vides ^^ :sweat_smile:



@pierre-gilles, question avant que je me mette à la propreté du code :
J’ai purement et simplement repris le dossier de l’intégration rtsp-camera que j’ai mis dans netatmo directement.
Ensuite côté front j’ai ajouté une fonction pour récupérer le service du device dans la gestion des boxs pour faire appel à la bonne route.

Aurais-tu 10/20 minutes pour en discuter de vive voix ? Ce qui m’embête d’un côté c’est la maintenabilité de 2 codes pratiquement identiques dans le temps. Dans ce cas précis pas fan du copier/coller pur et simple avec 1 ou 2 changements seulement. D’autant qu’on est susceptible d’ajouter d’autres intégrations un jour qui utilise le même code avec seulement quelques différences potentielles.

Après j’ai peut-être fait fausse route, d’où la demande de discussion vocale / visio.

PS: @pierre-gilles en parlant des colonnes, je me suis aperçu que les colonnes ne sont pas égales en taille… la colonne du milieu est légèrement plus courte au milieu que les gauches et droites. Après Netatmo je regarderais si je peux corriger.

Ok ! L’intérêt d’ajouter ces caméras via l’intégration Netatmo et pas l’intégration caméra, c’est que c’est automatique ? Tu as un flux RTSP via Netatmo ?

Tu peux utiliser le code d’un service dans un autre service :slight_smile:

Exemple : Le service USB est utilisé par le service Zigbee2mqtt :

const usb = this.gladys.service.getService('usb');
const usbList = await usb.list();

( code: Gladys/server/services/zigbee2mqtt/lib/init.js at master · GladysAssistant/Gladys · GitHub )

Pour l’instant tu gère que l’image où tu gère le live streaming aussi ?

C’est pas un bug, c’est normal, la hauteur dépend dynamiquement du contenu de chaque widget :slight_smile: Quel est le souci ?

1 « J'aime »

Premièrement, il y a les infos « wifi_strength » et « state » (« disconnect », « on », « off ») + d’autres que je n’exploite pas encore.
Ensuite le fonctionnement est particulier. Le flux initial ressemble à vpnUrl: https://prodvpn-eu-4.netatmo.net/10.255.0.3/d259xxxxxxxxxxxxx/MTU4NDDr-aMZIkmaaLLg,, (d’où l’évocation d’un appel/démo). Auquel tu ajoutes comme pour les autres caméras ${vpnUrl}/live/snapshot_720.jpg pour l’image. Mais le flux live lui est ${vpnUrl}/live/files/high/index.m3u8 dans ce cas, la partie ‹ MTU4NDDr-aMZIkmaaLLg, › change à chaque redémarrage ou déconnexion et c’est un accès par leur plateforme. Si ton gladys est sur le même réseau local que la caméra, il y a une propriété is_local: true pour y accéder en direct et il y a une double requête ${vpnUrl}/command/ping à effectuer pour obtenir l’adresse de type localUrl: http://192.168.0.10/d259xxxxxxxxxxxxx qui permet ensuite d’avoir ${localUrl}/live/snapshot_720.jpg pour l’image et soit ${vpnUrl}/live/files/high/index_local.m3u8, soit ${localUrl}/live/files/high/index.m3u8. Du coup j’ai un param ‹ CAMERA_URL › et un param ‹ CAMERA_LIVE_URL ›.

Très intéressant, mais cela veut donc dire que je dois modifier le fichier ‹ startStreaming ›
image
pour pouvoir avoir accès à ce « nouveau » paramètre.

Je gère les 2 et ça marche très bien ^^ D’autant que dans le futur, je souhaite ajouter l’accès aux historiques ainsi qu’à la possibilité de les télécharger … ce qui différera du service d’origine… ou pas.

Bon en écrivant ces lignes je me rend compte qu’on pourrait peut-être passer seulement par le CAMERA_URL = ${vpnUrl}/live/files/high/index.m3u8 ou ${localUrl}/live/files/high/index.m3u8 si local = true puisque c’est l’intégration qui fait le snapshot de la vidéo .
Je vais donc faire comme le service USB. Merci pour ta réponse. Et ça ne devrait pas être bloquant pour les évo futures non plus.

PS (suite) :

Alors je ne parle pas de la hauteur mais de la largeur. Par exemple à nom équivalent à la limite des doubles ligne on a ça :


C’est tout bête mais ça se joue à 1 caractère (368px pour la centrale contre 378px pour les colonnes gauches et droite), si je rajoute le ‹ n › de consigne à droite ça saute bien la ligne :


Je pensais que c’était lié aux espaces libres entre les colonnes, mais non on a 27 ou 28px de part et d’autre.

@pierre-gilles, je te remercie beaucoup !! En tout et pour tout 3 lignes pour faire appel à rtsp-camera et ça fonctionne nickel !! :upside_down_face: :star_struck:

Hello @Terdious,

Je viens de lancer avec l’image : terdious/gladys:netatmo-features-nrv-weather

J’ai pu me connecter avec mes identifiants donnés par le site Netatmo. J’ai le message en vert dans Gladys qui confirme la connexion : Gladys est connectée à Netatmo (et j’ai bien accepté le message de Netatmo pour permettre l’accès à l’ensemble des appareils Netatmo (inclus la station météo)).

Cependant, quand je vais sur la partie Découverte, aucun appareil n’est détecté :

Aucun appareil Netatmo n’a été trouvé. Si vous possédez un Thermostat Netatmo, avez-vous bien réalisé toutes les étapes de la documentation pour enregistrer vos appareils sur l’API Netatmo ?

Un ajustement semble nécessaire sur ce message d’erreur ; la contextualisation au Thermostat n’est plus juste :slight_smile:

Vois-tu ce qui peut coincer ?

1 « J'aime »

Salut @PhilippeMA,

Deja merci d’avoir pris le temps pour le test.

Ah oui en effet !!^^ je n’avais pas penser à ce point ^^

1ere chose a regarder : clique droit => inspecter dans la page et te rendre sur l’onglet « Reseau ». Faire ensuite un refresh de la page, si tu peux me donner le resultat de la requete « discover » => onglet « réponse ». Tu peux ensuite cliquer sur le bouton « Rafraichir » et voir la requete si c est la meme chose restes en là, si different je veux bien aussi le resultat

Ensuite si tu peux/sais accéder au contener sous linux et faire un « docker logs gladys -f » et me donner le resultat apres refresh de la page et/ou clique sur « Rafraichir ». Si tu n’as rien de probants je rajouterais des logs.

PS : tu as quoi en plus de la station météo de ton côté ?
Et sinon tu confirmes que toutes les instructions étaient claires pour toi ?

Merci @Terdious pour tout le boulot abattu!
Si je puis me permettre, trois petites coquilles dans la page ‹ configuration ›:
‹ Vous n’avez rien à configurer, ces scopes sont automatiquement intégrés et vous seront exposés ›.
Plus bas, le dernier ‹ exposées › ne prend pas de ‹ s ›
Bon courage pour la suite !

1 « J'aime »

Bonjour @PhilippeMA !

Alors j’ai refais le test plein et entier à partir de l’image docker. Le « bug » est aussi dans la 1ère version :

  • A la 1ère connexion, obligé de cliquer 2 fois sur « Sauvegarder et connecter »
  • 1 fois connecté, si on se rend aussitôt sur la page « Découverte Netatmo », en effet « Gladys est connectée à Netatmo » et aucun appareil visible. Dans l’inspecteur sur la requete « discover », j’ai :
  • Si je fais un refresh de la page, j’ai bien les appareils qui apparaissent !

Si tu peux me confirmer si c’est pareil pour toi. Je vois pour corriger et te redis quand c’est good si tu veux tester de nouveau !

Merci encore à toi.

Bonjour @GBoulvin,

Un grand merci à toi pour ces retours !! Je fais les correctifs dans la prochaine PR.

1 « J'aime »

Ok effectivement à voir dans un sujet/PR séparée :slight_smile:

Génial tant mieux si ça résout ton souci !

@Terdious Par rapport à la documentation, j’avais pas vu mais certaines images sont énormes ! J’ai reçu une alerte de ahrefs (un tool de SEO que j’utilise), qui m’avertit que 2 images sont trop grosses :

Idéalement il faudrait que chaque image fasse max 200-300ko quoi :slight_smile:

1 « J'aime »

Bonjour @Terdious

Je n’ai pas le même comportement que toi.

Pour info, dans le doute, j’ai renouvelé le client Id et Client Secret.

J’ai un code retour html 304.

Les logs :


2024-02-06T19:58:20+0100 <error> netatmo.pollRefreshingValues.js:21 (NetatmoHandler.refreshNetatmoValues) Unable to load Netatmo devices TypeError: Cannot read properties of undefined (reading 'data')
    at NetatmoHandler.loadDevices (/src/server/services/netatmo/lib/netatmo.loadDevices.js:40:69)
    at NetatmoHandler.refreshNetatmoValues (/src/server/services/netatmo/lib/netatmo.pollRefreshingValues.js:15:22)
1 « J'aime »

Oups sorry !! J’avoue que sur de l’imprim-écran, je n’ai pas pensé que ça pouvait être aussi gros !
Je te fais la modif demain !

EDIT: Je viens de regarder, en effet il n’y a que ces 2 là, je ne comprends pas comment il peut y avoir une telle différence … elle font la même dimension que les autres qui font entre 150 et 250ko !!!

1 « J'aime »

Ok, donc tu as visiblement quelque chose qui diffère (c’est une bonne chose) au niveau de la récupération des devices. Ca manque de logs, je vais ajouter ce qu’il faut et te refais signe.

Si tu veux également, on peut passer par un accès à ton installation que tu peux activer/désactiver comme tu le souhaites.

@PhilippeMA,

Une image est en cours de build, juste avec un accès aux logs. Tu pourras mettre à jour quand tu peux.

1 « J'aime »

Voici les nouvelles logs (rappel : j’ai rafraichi hier l’identifiant et le secret client) :

2024-02-07T11:04:46+0100 <error> netatmo.loadDevices.js:40 (NetatmoHandler.loadDevices) e.status:  undefined e.data.error { code: 3, message: 'Access token expired' }
2024-02-07T11:04:46+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection catched: Promise {
  <rejected> TypeError: expecting an array or an iterable object but got [object Null]
      at apiRejection (/src/server/services/netatmo/node_modules/bluebird/js/release/promise.js:10:27)
      at MappingPromiseArray.init (/src/server/services/netatmo/node_modules/bluebird/js/release/promise_array.js:64:19)
      at MappingPromiseArray._asyncInit (/src/server/services/netatmo/node_modules/bluebird/js/release/map.js:37:10)
      at _drainQueueStep (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:97:12)
      at _drainQueue (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:86:9)
      at Async._drainQueues (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:102:5)
      at Immediate.Async.drainQueues [as _onImmediate] (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:15:14)
      at processImmediate (node:internal/timers:476:21)
}
2024-02-07T11:04:46+0100 <error> index.js:16 (process.<anonymous>) TypeError: expecting an array or an iterable object but got [object Null]
    at apiRejection (/src/server/services/netatmo/node_modules/bluebird/js/release/promise.js:10:27)
    at MappingPromiseArray.init (/src/server/services/netatmo/node_modules/bluebird/js/release/promise_array.js:64:19)
    at MappingPromiseArray._asyncInit (/src/server/services/netatmo/node_modules/bluebird/js/release/map.js:37:10)
    at _drainQueueStep (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:97:12)
    at _drainQueue (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:86:9)
    at Async._drainQueues (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:102:5)
    at Immediate.Async.drainQueues [as _onImmediate] (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:15:14)
    at processImmediate (node:internal/timers:476:21)

Ah, et tu as bien cliqué de nouveau sur sauvegarder ?
Sur ta page web, en inspectant, tu es censé avoir une erreur !

Par contre au vue du message d’erreur, ta version ne doit pas être à jour. Je l’ai modifié celui-ci sur la nouvelle image.

@pierre-gilles,
Tu peux review la PR PR n°1 : Add support for NRV module type - Energy / Valves by Terdious · Pull Request #2014 · GladysAssistant/Gladys · GitHub quand tu le souhaites.

Pour la station météo, standby, je vais devoir ajouter des selecteurs du type d’installation. Comme j ai au moins 1 equipement de chaque, je ne pouvais pqs le voir, mais l’installation de @PhilippeMA démontre que pour la station meteo et les homecoachs, le fonctionnement diffère lorsqu’on a un seul type d équipement.

@Terdious Review faite :white_check_mark: C’est bon pour moi !

Par contre je n’ai fais qu’une relecture « technique », pas de test fonctionnel.

Si tu confirmes que ça fonctionne correctement, je te fais confiance et je merge en production :slight_smile:

Pense à faire la documentation aussi pour dire que ces appareils sont désormais supportés !

1 « J'aime »

Merci beaucoup !!

Oui cote test c’est parfait (10 vannes). Et aucun changement côté technique par rapport au thermostat, donc safe de ce côté.

Yes la modification documentation est presque prête je la push demain.

1 « J'aime »

Bonjour @pierre-gilles,

C’est bon pour moi pour la documentation :

J’ai usé de l’occasion pour refaire un nouveau test complet de 0. Tout fonctionne parfaitement !!
Vanne en demande de chauffe (en passant par la température de consigne dans Gladys) :

Après 2 minutes, le thermostat passe en demande de chauffe également pour allumer la chaudière (bien sûr presque instantané dans l’application … vivement la PR sur les webhooks ^^) :

2 « J'aime »

Excellent !! Je regarde demain :slight_smile:

Parfait :ok_hand:

Demain tu veux que je review quelles PRs du coup ?