Les Carnets de Byfeel domotique , Objets connectés , DIY , Programmation, Nouvelles Technologies ….

Migration Zwave legacy – zwavejs ( retour d’expérience)

Cela fait maintenant un peu plus d’un an que je suis sous homeAssistant, et j’en suis très satisfait. HA ne fait que s’améliorer, et les mises à jour sont régulières et apportent à chaque fois des nouvelles fonctionnalités.

Il y a maintenant quelques mois ( en février 2021) a été introduit officiellement l’intégration ZwaveJS afin de remplacer dans un futur proche la solution zwave native de home assistant ( zwave legacy) qui a donc vu son statut passé à « obsolète ». J’ai donc profité du troisièmeconfinement, début avril pour migrer mon réseau zwave actuel verszwavejs. Je vous partage mon retour d’expérience….

Chapitre 1 : De la patience tu auras ….

Autant le dire tout de suite , la migration prend du temps, beaucoup de temps …..

Au départ ma configuration intitiale Zwave :

Zwave : 97 appareils — 632 entités ( en réalité , 71 Devices , mais le module zwave natif ,à tendance à découper certains « device » en plusieurs « devices » , comme les multiprises everspring , ou certains modules fibaro mais pas de façon systématique … ? ).

la migration vers zwavejs , m’a pris environ 3h00 de travail pour renommer mes nouvelles entités, et il a fallu encore plus de 48H00 pour avoir un réseau zwave stable.Donc prévoyez du temps et de la patience, car certains modules n’ont jamais été reconnus, et il a fallu à plusieurs reprises les supprimer du réseau et les réintégrer de nouveau ( Surtout les modules sur piles).

Une fois le réseau zwave stabilisé, tous mes modules ont pu être réintégrés, avec quelques modifications pour certains et des nouvelles fonctionnalités pour d’autres et des commandes plus réactives.

Cela m’a permis aussi de pouvoir intégrer mes switchs nodon , qui ne fonctionnait pas très bien avec l’ancien zwave ( le mode scène n’était pas toujours bien géré ).
En contrepartie, tous n’est pas encore intégré , il n’y a pas la possibilité de supprimer des noeuds mort , pas la possibilité de modifier les associations de groupe , ainsi que d’autres fonctionnalités …. La liste compléte des fonctionnalités à venir et décrit dans le billet de suivi du module zwavejs.

liste des taches en cours …. https://github.com/home-assistant-libs/zwave-js-server-python/issues/56

taches en cours zwavejs

Lorsque toutes ces taches seront remplies , on aura un module Zwave au top.

Sur le lien suivant, la liste de tous les appareils zwave reconnus avec zwavejs, si vous avez des modules récents, qui ne sont pas reconnus avec zwave legacy, vous avez toutes les chances de les retrouver dans cette liste.

liste compatibilité zwaveJS

Chapitre 2 : Te guider tu sauras …

C’est bon , vous avez du temps devant vous ? …. Alors c’est partis pour le guide . Tout est expliqué sur la page dédiée à zwaveJS pour home assistant.

Liste des actions à faire :

  1. Sauvegarde : En premier lieu , réaliser une sauvegarde de son installation , facile avec home assistant , je créé un snapshot ou instantané complet et je mets mon fichier de sauvegarde en lieu sur. Menu supervisor / instantanés / créer en choisissant complet et un nom de sauvegarde parlant.
  2. Récupérations des infos Zwave :
    • Le chemin de la clé Zwave , en règle générale "/dev/serial/by-id/usb-0658_0200-if00""/dev/ttyUSB0""/dev/ttyAMA0", ou encore "/dev/ttyACM0". Privilégiez la dénomination via serial by-id , cela permettra de retrouver la clé même si vous changer de port.
    • La clé reseau zwave , pour les modules zwaves sécurisés. Vous pouvez la retrouver dans le fichier de configuration situé dans le dossier : config/.storage/ fichier: core.config_entrie
      Recherche du mot clé zwave , pour récupérer les infos clé réseau et chemin usb. La clé réseau sera sous la forme : 0x22,0x32,0x66,0x6D,0x10,0x0F,0x79,0x5E,0x5B,0xB1,0x7F,0x0A,0x1B,0xB7,0xA1,0x46 , pour zwaveJs la clé devra étre reformaté sans 0x , ce qui donne : 2232666D100F795E5BB17F0A1BB7A146 ( suite de 32 caractéres ).
    • Liste des modules Zwaves actuellement installé : Afin de pouvoir les renommer à l’identique , pour ne pas avoir à reprogrammer tous vos scénarios. Pour cela deux méthodes.

      Outils de développement , et réaliser une recherche en filtrant les attributs sur « node_id« 

Ou dans modèle: recopier le code suivant dans modèle , afin d’afficher la liste de tous les modules zwaves , plus simple à récupérer pour coller dans un document texte , en attente.

{%- for node, zstates in states | selectattr('attributes.node_id', 'in', range(1000)) | groupby('attributes.node_id') %}

{%- for s in zstates %}
Node {{ node }};{{ s.name }};{{ s.entity_id }}{% endfor %}

{%- endfor %}
  1. Suppression de Zwave legacy , Avez vous pensé à sauvegarder votre configuration ?

Vous êtes sur ? …. Oui …. alors on y va ….
Menu Configuration / integrations , au niveau du module zwave , clic sur les trois petits points et supprimer . Tous les modules zwaves sont supprimés de home assisant.

  1. Redémarrer HOME ASSISTANT ( Etape à faire pour la prise en compte de la désinstallation de zwave et la libération de la clé zwave , afin de la rendre disponible pour un autre module )

Chapitre 3 : Croire en HA tu auras ….

  1. Installation du plugin officiel zwavejs : Supervisor / modules complémentaires / zwaveJS installation ou bien directement depuis le menu configuration / intégrations / ajouter intégration puis chercher zwaveJS , dans ce cas là le module sera automatiquement installé.
  2. Configuration : Durant la phase d’installation du plugin , en automatique ou en manuel , il sera demandé la clé réseau et le chemin de la clé USB. Renseigner ici, les données précédemment récupérées. Il est toujours possible de vérifier dans le panneau configuration du module, si tout est bien renseigné.
  1. On redémarre le module si besoin , et on peut verifier l’activité dans l’onglet journal. Si le plugin à bien démarré , il suffit de se rendre dans le menu Intégrations / zwavejs et clic sur configurer
  2. A partir de ce point , il faudra être patient et y croire …. Dans mon cas , c’est au bout d’un peu plus de 45 minutes que le deuxiéme noeud à été découvert , et au bout de deux heures , j’en étais à 45 sur 71

Au bout de 8 heures , j’avais pratiquement tout retrouvé 63/71 , il me manquait les modules sur piles suivants :

  • fibaro door/window FGK101 ( aucun n’était reconnu ) , sur les trois un seul à pu être réveillé manuellement les deux autres ont du être supprimé du réseau et réintégré. Par contre pas de remonté des informations d’ouverture / fermeture ( peut etre un bug ? ) , pour l’instant je passe par les notifications zwave , qui fonctionne très bien et me permettent de récupérer les infos via des automatismes ( j’en parle plus bas ).
  • Les deux switchs nodon , on pu être reconnu une fois réveillé manuellement et exploitable par le biais des modes scène.
  • Les détecteurs de fumée fibaro , ont du être réintégré pour être reconnu. Une exclusion ne s’est pas bien passé , et je me suis retrouvé avec un noeud « mort » , qui ne peut pas être supprimé pour l’instant.
  • j’ai eu aussi quelques soucis , avec des noeuds , un peu éloigné du réseau , mais le lendemain , ils ont été reconnus.
  1. Allez une bonne nuit de sommeil …….

Chapitre 4 : Vérification et modification tu feras …

  1. Deux choix possibles, soit on renomme tous les modules, comme ils étaient nommé avant, en se servant de la sauvegarde du fichier texte qui liste tous les noms des entités, soit on repart sur des nouveaux noms, mais il faudra penser, à modifier les vues, les automatisations et les scripts qui utilisent les anciennes dénominations.
  2. Pour ma part , j’ai fait un peu des deux, j’ai choisi de renommer à l’identique les entités qui me servaient dans plusieurs automatisations. Quant aux aux modules ou entités qui affichaient seulement leur état dans le « frontend » j’en ai profité pour changer leur nom, et mis à jour uniquement la vue.
  3. Selon la complexité de votre installation, cela peut prendre plusieurs heures, voire plusieurs jours. J’ai corrigé au fur et à mesure de mon temps disponible, et j’ai dû réadapter plusieurs scénarios.

J’ai pu récupérer mes 632 entités , et 71 devices ( 73 affichés : 2 noeuds morts +71 en réalités ) , Par rapport a Zwave legacy , je retrouve ici le nombre exacte de mes modules zwaves ( 71 ) et non 97.

  1. Ci dessous la liste des problèmes que j’ai rencontré
    • Pas possible de supprimer les noeuds en erreur ou mort ( prévu dans les tâches à venir )
    • Pas possible d’associer des devices à des groupes Zwave ( idem )
    • Problème avec le détecteur ouverture de porte / fenêtre Fibaro FGK101 , pendant les premiers jours pas de remontée d’info , le noeud était souvent en position « pas prêt » , puis au bout d’une semaine , il s’est mis à fonctionner …..
      J’ai constaté ce problème sur plusieurs modules sur batteries , et souvent quand le niveau des piles était faible . Pensez à mettre des piles neuves , si vous avez des problémes aléatoires avec des modules sur batteries.
  2. Exemple de configuration d’un device : le FGK101 de Fibaro
  1. Possibilité de configurer l’appareil ou de refaire un interview ( dans le cas ou le device ne saurait pas bien reconnu )
  1. Accès aux journaux zwave depuis tous module zwave , ou page configuration zwave.
Exemple log zwave ( en mode debug )

Chapitre 5: En scene tu entreras ….

Pour la gestion des central_scene ou scene_activation , par exemple pour les boutons et télécommande comme les wall switch nodon , fibaro button ou bien d’autres …. Il existe un événement qui s’appelle : zwave_js_value_notification .

En fonction du bouton , voici un exemple de ce que remonte l’événement zwave_js_value_notification pour le bouton fibaro

Dans cet exemple , les infos suivantes nous servent à identifier le « device » et les actions :

  • node_id: 29 ( le numero du noeud Zwave correspondant au fibaro button )
  • value et value_raw: qui indique l’action , value sous la forme textuelle KeyPressed2x ( double pression ) et value_raw: 3 sous la forme numérique
  • Pour button fibaro , value_raw à la valeur suivante
    • 0 – > KeyPressed
    • 1 -> KeyHelDown
    • 2 -> KeyReleased
    • 3 -> KeyPressed2x
    • 4 -> KeyPressed3x
    • 5 -> KeyPressed4x
    • et 6 -> KeyPressed5x

Exemple , pour allumer un spot par un double clic ( via l’interface graphique ) sur evenement node_id = 29 et value_raw = 3.

exemple automatisation événement

Ce qui donne au format YAML :

alias: test bouton fibaro
description: ''
trigger:
  - platform: event
    event_type: zwave_js_value_notification
    event_data:
      node_id: 29
      value_raw: 3
condition: []
action:
  - type: toggle
    device_id: 66000abcdef000111233445566ddeff
    entity_id: light.spot_bureau
    domain: light
mode: single

Chapitre 6 : Ton choix tu feras ….

En conclusion , je suis plutôt satisfait des améliorations apportées par le module zwaveJS dans l’ensemble.
Même si la migration m’a beaucoup occupée , cela me permet d’avoir un module zwave plus rapide et compatible avec des appareils plus récents.
Bien qu’opérationnel , l’ancien plugin zwave ( legacy ) , n’est plus mis à jour depuis son statut en obsoléte , cela peut devenir bloquant sur les nouveaux modules zwave qui ne seront pas reconnu ou partiellement pris en charge.

J’attends avec impatience la prise en charge des outils d’associations du groupe, et la gestion des outils du réseau zwave comme la suppression des noeuds morts, les fonctions de santé et bien sûr les mises à jour des modules ..

Pour ceux , qui n’ont pas vraiment le temps de s’occuper de la migration , il est prévu dans les tâches à venir de proposer un assistant de migration automatique , dans un futur plus ou moins proche.