Zwave - Aide pour la v4

Le conteneur d’appel bien gladys, renvoi la commande de @Tlse-vins et donne nous le retour ou bien une capture d’écran.

J’aimerai bien consommer en négatif ^^. C’est la valeur indiqué dans Open-zwave. Donc ok côté Gladys. Ca vient soit de ma prise, soit d’open-zwave.

J’ai du mal à comprendre comment fonctionne l’objet « props » côté front. En attendant d’y voir plus clair, j’ai concaténé avec le featureName afin de m’y retrouver. Mais c’est à améliorer.

Toujours côté front, je remarque que dans la box « device in room » nous affichons le nom de la device feature.
Cette information est rempli en fonction des informations envoyés par le périphérique. Il n’y a donc pas de garanti que ce soit homogène au sein du zwave, du coup encore moins avec d’autre service.

image

Ne faudrait t’il pas afficher quelque chose d’interne à Gladys tel que la feature type, ce qui donnerait ceci :

image

Je ne sais pas si je suis très clair.

Pas de PR pour le moment mais voici le lien vers ma branche github : GitHub - link39/Gladys at zwave

A date j’ai ajouté :

  • la gestion du multi-instance
  • le mapping des comClass de consommation et l’affichage des unités associés.

To do :

  • Gérer les switchs multilevel (dimmer)
  • Gérer les volets roulants
  • Permettre la configuration des modules

Pourrais-tu me fournir la log une fois que tu as cliqué sur : Integration / Zwave / Setup.

je viens de regarder sur mon installation. Quand je vais dans setup, les devices endormis n’apparaissent pas. La détection des devices ne se déclenche qu’à la première ouverture de la page.
Il faudrait donc afficher les noeuds (devices) endormis avec une indication particulière pour qu’on sache qu’ils sont là mais qu’ils faut les reveiller pour pouvoir les configurer par exemple.

Cela dit, @tpelab ça n’explique pas pourquoi les informations ne se mettent pas à jour dans ton dashboard.

Bonjour
@link39
Mes 2 equipements sont :
Hank HKZW-DWS01 - Détecteur d’ouverture de portes et fenêtres Z-Wave+
Voir ici
Et
AEOTEC Tri Sensors
Voir ici

Ça serait pas mal que l’utilisateur puisse télécharger le XML ozw depuis le front pour le fournir ici ou sur github en cas de nouvelles intégrations, vous en pensez quoi ?

Je me dit que madame michu doit faire un ssh + un docker connect + une copie, pour ensuite le transférer via sftp. Le flux est pas terrible :sweat_smile:

1 « J'aime »

J’ai modifier la vue “setup” pour faire apparaître les devices endormis, avec une indication : "Wake up the device then reload the page. J’image que le reload peut-être automatisé. J’approfondirai plus tard. En tout cas, ça permet d’être plus clair. Sinon on a l’impression de perdre ses devices sur pile à chaque reboot.

Par contre, ce qui est plus problématique c’est que je constate le même bug que @tpelab pour mon détecteur de fumé qui est sur pile. Les informations cessent de se mettre à jour peu de temps après l’ajout dans Gladys. Je vois bien passer les trames zwave mais les valeurs ne changent plus.
Je me penche sur ce point comme je reproduis le bug

EDIT : Mon détecteur de fumé (fibaro) réalise une détection de fumée toutes les 10 secondes et envoie la notification si la différence entre la précédente valeur et la nouvelle est de 1° ou plus. J’ai donc constaté qu’il fonctionnait en le mettant en plein soleil cette après-midi car la température montait rapidement, puis de retour dans la maison ça ne bougeait plus. La température restait bloquée à 32.9. J’ai appuyé sur le bouton du module pour forcer l’envoie des informations. Première fois pas de changement. Plus tard une seconde tentative et ça a fonctionné. Depuis, plus de problème. Je viens de le remettre à l’extérieur et la température varie de nouveau.

Les traces après ma première tentative d’appui sur le bouton pour forcer l’envoie d’information :

2020-04-26T21:51:12+0200 <debug> zwave.valueChanged.js:14 (ZwaveManager.valueChanged) Zwave : Value Changed, nodeId = 24, comClass = 32, value = {"value_id":"24-32-1-0","node_id":24,"class_id":32,"type":"byte","genre":"basic","instance":1,"index":0,"label":"Basic","units":"","help":"Basic status of the node","read_only":false,"write_only":false,"min":0,"max":255,"is_polled":false,"value":0} 
2020-04-26T21:51:22+0200 <debug> zwave.notification.js:21 (ZwaveManager.notification) Zwave : Notification, nodeId = 24, notif = Timeout
2020-04-26T21:51:22+0200 <debug> zwave.valueChanged.js:14 (ZwaveManager.valueChanged) Zwave : Value Changed, nodeId = 24, comClass = 49, value = {"value_id":"24-49-1-1","node_id":24,"class_id":49,"type":"decimal","genre":"user","instance":1,"index":1,"label":"Air Temperature","units":"C","help":"Air Temperature Sensor Value","read_only":true,"write_only":false,"min":0,"max":0,"is_polled":false,"value":"20.6"}
2020-04-26T21:51:22+0200 <debug> zwave.valueChanged.js:14 (ZwaveManager.valueChanged) Zwave : Value Changed, nodeId = 24, comClass = 113, value = {"value_id":"24-113-1-7","node_id":24,"class_id":113,"type":"list","genre":"user","instance":1,"index":7,"label":"Home Security","units":"","help":"Home Security Alerts","read_only":true,"write_only":false,"min":0,"max":0,"is_polled":false,"values":["Clear","Tampering -  Cover Removed"],"value":"Tampering -  Cover Removed"}
2020-04-26T21:51:22+0200 <debug> zwave.valueChanged.js:14 (ZwaveManager.valueChanged) Zwave : Value Changed, nodeId = 24, comClass = 128, value = {"value_id":"24-128-1-0","node_id":24,"class_id":128,"type":"byte","genre":"user","instance":1,"index":0,"label":"Battery Level","units":"%","help":"Current Battery Level","read_only":true,"write_only":false,"min":0,"max":255,"is_polled":false,"value":100}
2020-04-26T21:51:22+0200 <debug> zwave.valueChanged.js:14 (ZwaveManager.valueChanged) Zwave : Value Changed, nodeId = 24, comClass = 156, value = {"value_id":"24-156-1-0","node_id":24,"class_id":156,"type":"byte","genre":"user","instance":1,"index":0,"label":"General","units":"","help":"General Alarm","read_only":true,"write_only":false,"min":0,"max":255,"is_polled":false,"value":255}       
2020-04-26T21:51:22+0200 <debug> zwave.valueChanged.js:14 (ZwaveManager.valueChanged) Zwave : Value Changed, nodeId = 24, comClass = 156, value = {"value_id":"24-156-1-1","node_id":24,"class_id":156,"type":"byte","genre":"user","instance":1,"index":1,"label":"Smoke","units":"","help":"Smoke Alarm","read_only":true,"write_only":false,"min":0,"max":255,"is_polled":false,"value":0}
2020-04-26T21:51:22+0200 <debug> zwave.valueChanged.js:14 (ZwaveManager.valueChanged) Zwave : Value Changed, nodeId = 24, comClass = 156, value = {"value_id":"24-156-1-4","node_id":24,"class_id":156,"type":"byte","genre":"user","instance":1,"index":4,"label":"Heat","units":"","help":"Heat Alarm","read_only":true,"write_only":false,"min":0,"max":255,"is_polled":false,"value":0}
2020-04-26T21:51:22+0200 <debug> zwave.nodeReady.js:12 (ZwaveManager.nodeReady) Zwave : Node Ready, nodeId = 24

On voit bien le zwave.valueChanged. Mais on ne voit pas Gladys mettre à jour la valeur. Je ne sais pas pourquoi.

Une seconde tentative fonctionnera comme le montre la log :

2020-04-26T22:26:06+0200 <debug> zwave.notification.js:21 (ZwaveManager.notification) Zwave : Notification, nodeId = 24, notif = Timeout
2020-04-26T22:26:06+0200 <debug> zwave.valueChanged.js:14 (ZwaveManager.valueChanged) Zwave : Value Changed, nodeId = 24, comClass = 49, value = {"value_id":"24-49-1-1","node_id":24,"class_id":49,"type":"decimal","genre":"user","instance":1,"index":1,"label":"Air Temperature","units":"C","help":"Air Temperature Sensor Value","read_only":true,"write_only":false,"min":0,"max":0,"is_polled":false,"value":"21.0"}
2020-04-26T22:26:06+0200 <debug> zwave.valueChanged.js:16 (ZwaveManager.valueChanged) node24: changed: 49:Air Temperature:32.9->21.0
2020-04-26T22:26:06+0200 <debug> device.saveState.js:16 (DeviceManager.saveState) device.saveState of deviceFeature zwave-1-1-air-temperature-fgsd002-smoke-sensor-node-24
2020-04-26T22:26:06+0200 <debug> zwave.valueChanged.js:14 (ZwaveManager.valueChanged) Zwave : Value Changed, nodeId = 24, comClass = 113, value = {"value_id":"24-113-1-7","node_id":24,"class_id":113,"type":"list","genre":"user","instance":1,"index":7,"label":"Home Security","units":"","help":"Home Security Alerts","read_only":true,"write_only":false,"min":0,"max":0,"is_polled":false,"values":["Clear","Tampering -  Cover Removed"],"value":"Tampering -  Cover Removed"}

Je ne sais pas expliquer pourquoi Gladys n’a pas mis à jour la température lors du premier appui alors qu’open-zwave detecte le changement de valeur.

1 « J'aime »

Voici à quoi ressemble l’interface avec les modules endormis :

Pour avis.

Pour moi, ces champs sont personnalisables, donc non je ne pense pas qu’il faille afficher le feature type.

En revanche, je suis d’accord on peut améliorer la valeur par défaut. Je pense que c’est un sujet encore plus global et pas juste propre au Z-Wave, il faudrait que server-side on ait des traductions par langue de name de chaque (feature-type/category) !

Yes génial! :clap:

Je suis d’accord! Un bouton dans les settings pourraient être pas mal :slight_smile:

Pas mal, après ça vaudrait peut-être le coup de mettre tous les modules endormis à la fin? Par exemple, chez moi j’ai des tonnes de noeuds endormis, ça va polluer ma vue ^^

Il y a justement un référentiel des features dans le fichier constant.js. Mais peut-importe, je suis en phase avec toi, il faut que le label affiché soit côté server et traduit en fonction des langues. L’idée c’est que peut-importe le service ou le périphérique, le nommage soit le même. L’exemple pour une ampoule (philips, milight ou yeelight), il faut afficher : Color / Brihtness and co. Mais pas color pour un service, Colors pour un autre et Color value pour le dernier.

Je vais voir si j’en suis capable :slight_smile:

Moi aussi elle est bien pollué, je vais les mettre à la fin c’est plus propre.

1 « J'aime »

Yes, mais non traduite! Il faut que ça marche en français, anglais… Le fichier constant.js est destiné à un usage dans le code, je pense qu’il faut de toute façon qu’on rajoute une gestion des traductions server-side :slight_smile:

Complètement d’accord avec toi !

Bonjour,

Je m’étais lancé dans des développements autour du service zWave également, on m’a rapidement ramené, à juste titre, ici.

Les sujets à traiter sont vastes et multiples sur ce service !
Je viens de regarder les modifications en cours de @link39. Cool, des bonnes choses qui arrivent !
Mais attention selon moi à deux choses :

  1. Ce que l’on appelle “l’effet tunnel” où l’idée est de vouloir ajouter des fonctionnalités encore et encore, à vouloir traiter ce cas-là et également ce point là etc… au point au final de ne “jamais” (je force les traits on est bien d’accord) livrer ces modifications et/ou en ralentir d’autres pour ne pas entrer en conflits avec ces modifications attendues. Il vaut mieux de petites PR focalisées sur un point qu’une avec beaucoup de choses. Exemple ici : l’amélioration de la page des noeuds devrait être isolée de la gestion du multiinstance, la gestion de la page de debug etc. Cela facilitera d’ailleurs aussi la relecture et la validation de la PR

  2. Proposer au plus tôt des PR même en mode WIP / Draft… ceci est sujet à validation… c’est certainement à moi aussi d’avoir plutôt un réflexe à venir ici pour échanger autour des évolutions avant d’entamer quoique ce soit… mais la PR, même en cours, présente des avantages : possibilité de faire des retours notamment, visualisation rapide de l’avancement

Ceci étant dit, concernant les développements que j’étais en train de lancer sur la partie Dimmer. Je viens de regarder ce qui est fait sur ta branche @link39, finalement tes modifications sont assez limitées sur ce point-là. Je pense donc que ma PR fait toujours sens (elle intègre notamment une gestion de la version 4 de la command class Switch MultiLevel, voir PR et commentaires). Je gère également correctement le min/max auquel on ne peut pas se fier pour le Range. Bien que le device renvoie 0 / 255, les valeurs utiles en réalités sont celles entre 0 et 100 (et la valeur 255 qui a une signification précise à savoir “revenir au dernier état non nul connu” ; mais non traité chez moi non plus).

J’avais d’autres idées de modifications pour le service. Je remets ça à plat et on en reparle ici avant de faire quoi que ce soit du coup.

2 « J'aime »

@link39 c’est peut être ça qui fait que ça fonctionne pas chez moi ( dimmer )?

En tout cas c’est cool , on a 2 spécialistes zwave maintenant :smiley:

Je vais réaliser une PR avec les modifications que j’ai apporté à ce jour.

Pour la partie dimmer, j’ai regardé ton code c’est beaucoup plus complet que ce que j’ai fais.
Pour les min/max je pensais la même chose que toi jusqu’à ce que je regarde le fichier openzwave de @VonOx. Son module quibino ZMNHCDx peut prendre la valeur 254 ! alors que mes fibaros vont tous de 0 à 99, que ce soit roller shutter ou dimmer. Ce n’est donc pas une règle universelle je pense.

Il doit y avoir des cas spécifiques c’est presque sûr.
Je me suis contenté dans un premier temps de suivre la norme qui donne ceci comme valeur pour la Command Class Switch MultiLevel :

Ma PR est incomplète. Avant d’avoir connaissance de ce sujet, je comptais faire des modifications sur la structure de gestion des comClass et la façon d’identifier les features / params / et gestion des value (pour éviter d’avoir plein de IF comme ça peut être le cas dans ma gestion particulière initiée). On s’en reparle avant d’aller plus loin de mon côté !

2 « J'aime »

Au vue de ta capture, il semblerait que le périphérique que j’ai vu en 254 était donc dans un état inconnu ! Ceci est une bonne nouvelle. Ça veut dire qu’il n’est pas si particulier que cela, et que par conséquent les valeur min/max pour les dimmer zwave peuvent être de 0 à 99.

Bonne nouvelle @Will9, j’ai l’explication!
Dans Gladys, les données sont mises à jour si le devices est "ready’. Ça pose un problème pour les périphériques à pile qui sont rarement ready. J’ai modifié en conséquence et je n’ai plus de problème avec mes détecteurs de fumée. Je n’ai pas noté d’effet de bord.

Genial ca sera merge quand ?
Quand c’est censé etre fonctionnel dis le moi je referait un test

J’ai fais une PR mais elle n’est pas acceptée, je dois codé la partie “test” dès que je pourrai.