Migration Z-Wave série 500 → série 800 sans ré-appairage

# Migration Z-Wave série 500 → série 800 sans ré-appairage

Retour d’expérience : HUSBZB-1 → Home Assistant Connect ZWA-2, via *Controller Shift*


:warning: Avertissement

Cette procédure **n’est pas une méthode officiellement documentée ni garantie** par Silicon Labs ou les fabricants de contrôleurs. Elle s’appuie sur une fonction native du protocole Z-Wave (le transfert de rôle primaire), mais son taux de réussite n’est pas connu précisément et un échec reste possible.

  • Faites une **sauvegarde NVM** de votre contrôleur actuel avant de commencer (filet de sécurité, même si elle ne se restaure pas directement sur un contrôleur 800).
  • Prévoyez du temps devant vous et un accès physique à vos équipements en cas de problème.
  • Gardez votre ancien contrôleur sous la main jusqu’à ce que vous ayez validé le bon fonctionnement du nouveau pendant plusieurs jours.

Pourquoi pas simplement une restauration de backup NVM ?

C’est la première chose qu’on a envie de tenter, mais **ça ne fonctionne pas** entre séries 500 et 700/800 : le format mémoire (NVM) diffère structurellement entre ces générations de puces, et les fabricants (Zooz, HomeSeer, etc.) déconseillent formellement cette manipulation — au mieux ça échoue proprement, au pire ça peut rendre le nouveau contrôleur inutilisable.

La bonne nouvelle : il existe une alternative qui passe **par le protocole Z-Wave lui-même** plutôt que par un fichier binaire — le **Controller Shift** (transfert du rôle de contrôleur primaire). C’est une fonctionnalité native et ancienne du protocole, indépendante de la génération de puce.


Prérequis

  • Un **PC Windows** (l’outil utilisé ne fonctionne que sous Windows).
  • **Simplicity Studio 5** (Silicon Labs), avec l’outil **Z-Wave PC Controller** (Tools → PC Controller). Compte Silicon Labs gratuit requis.
  • Votre ancien contrôleur (série 500) et le nouveau (série 700/800), tous les deux branchables en USB sur le même PC.
  • Côté Jeedom : le plugin **Z-Wave JS** (pas l’ancien plugin OpenZWave, qui ne gère pas correctement les séries 700/800). Si vous êtes encore sur OpenZWave, migrez d’abord vers Z-Wave JS via l’outil de migration intégré à Jeedom.

Vue d’ensemble de la méthode

  1. Sauvegarde de sécurité de l’ancien contrôleur.
  2. Inclusion du nouveau contrôleur dans le réseau existant, **en tant que contrôleur secondaire** — cette étape réplique toute la topologie réseau (liste des nodes, routage) par voie radio.
  3. **Controller Shift** : transfert du rôle de primaire vers le nouveau contrôleur.
  4. Bascule de Jeedom (ou Home Assistant) sur le nouveau contrôleur.

Aucun exclusion/ré-inclusion des devices n’est nécessaire : ils gardent leurs node IDs et donc leurs fiches équipements existantes.


Étape 1 — Sauvegarde de sécurité

Dans PC Controller, connectez-vous à l’ancien contrôleur (COM du contrôleur 500) puis allez dans **Backup/Restore (NVM)** → **Backup**. Conservez ce fichier de côté.

**Cas particulier : clé Everspring SA413-1 (et autres dongles non estampillés Silicon Labs)**
Sur ce type de contrôleur, l’outil officiel PC Controller peut se montrer capricieux, voire échouer, pour la sauvegarde NVM. Préférez dans ce cas l’outil communautaire **[Zwave Cloner](Zwave Cloner (Backup / Restore de vos contrôleurs Zwave))**, développé spécifiquement pour le backup/restore de contrôleurs Z-Wave (UZB1, RaZberry, Everspring SA413, etc.), avec de bons retours d’expérience de la communauté Jeedom sur ce type de matériel.


Étape 2 — Connecter les deux contrôleurs

Il faut **deux instances de PC Controller ouvertes simultanément**, une par contrôleur :

  • Relancez l’outil PC Controller une deuxième fois depuis Simplicity Studio pour ouvrir une seconde fenêtre.
  • Dans chaque fenêtre, cliquez sur l’icône **:gear: Settings** en haut à droite, sélectionnez le port COM correspondant à chaque clé.

![Menu principal de PC Controller avant connexion](illustrations/00-pc-controller-menu.png)
*Le menu principal de PC Controller, avant qu’un port COM ne soit sélectionné (« Not connected »).*

Une fois les deux clés connectées, vous devriez voir deux fenêtres actives, chacune affichant le nombre de nodes inclus sur son réseau respectif :

![Les deux contrôleurs connectés, chacun sur son propre réseau](illustrations/01-connexion-deux-controleurs.png)
*À gauche/en haut : l’ancien contrôleur (33 nodes déjà inclus). En bas : le nouveau contrôleur, encore seul sur son propre réseau (1 node = lui-même).*


Étape 3 — Inclure le nouveau contrôleur comme secondaire

Cette étape inclut le nouveau contrôleur **et** réplique toute la topologie réseau en une seule opération (contrairement à l’inclusion d’un device classique) :

  1. Sur la fenêtre connectée à l’**ancien contrôleur** (primaire) : Network Management → section Node Actions → cliquez **Add**.
  2. Immédiatement après, sur la fenêtre connectée au **nouveau contrôleur** : Network Management → Controller View → cliquez **Classic Learn Mode**.

Attendez la fin du transfert (peut prendre 15 à 60 secondes selon la taille du réseau). Vérifiez ensuite que le nombre de nodes affiché est identique des deux côtés.

:warning: Point de vigilance : échec possible du handshake de sécurité (S0/S2)

Regardez attentivement le message de fin d’opération sur la fenêtre du nouveau contrôleur. S’il indique quelque chose comme **« Learn mode Added (Security Failed) »**, la topologie s’est répliquée mais **les clés de sécurité S0/S2 n’ont pas été transférées** — le nouveau contrôleur ne pourra pas piloter les équipements sécurisés tant que ce n’est pas corrigé.

![Exemple de message « Security Failed » à surveiller](illustrations/02-security-failed.png)
*Le message en bas de la fenêtre du nouveau contrôleur indique « (Security Failed) » : la topologie est répliquée (34 nodes des deux côtés) mais les clés S0/S2 n’ont pas suivi.*

**Comment corriger :**

  1. Sur le nouveau contrôleur : Network Management → Controller View → **Reset** (retour à l’état d’usine).
  2. Sur l’ancien contrôleur : repérez le node du contrôleur qui vient d’être reseté (il reste enregistré malgré le reset côté distant), sélectionnez-le, cliquez **Is Failed** puis **Remove Failed** pour le purger proprement.
  3. Recommencez l’inclusion (Add + Classic Learn Mode), en gardant les deux fenêtres visibles simultanément cette fois — une popup de confirmation des clés de sécurité peut apparaître brièvement et doit être validée sans délai.

Le message final doit alors être exempt de la mention « (Security Failed) », et le nouveau contrôleur doit apparaître taggué **[S2]** dans la liste des nodes, comme l’ancien :

![Inclusion réussie : le nouveau contrôleur porte bien le tag [S2]](illustrations/03-inclusion-reussie-s2.png)
*Reprise réussie : « Add Node completed » côté ancien contrôleur, « Learn mode Added completed » (sans mention Security Failed) côté nouveau, qui affiche désormais le tag [S2] comme le node 1.*


Étape 4 — Controller Shift (transfert du rôle primaire)

  1. Sur le **nouveau contrôleur** : Network Management → Controller View → cliquez **Classic Learn Mode**.
  2. Immédiatement après, sur l’**ancien contrôleur** (encore primaire à ce stade) : Network Management → Controller View → cliquez **Shift**.

Une fois terminé, vérifiez le champ « Network Role » de chaque contrôleur :

  • Le **nouveau** doit afficher **RealPrimary**.
  • L’**ancien** ne doit plus l’afficher.

![Résultat du Controller Shift : RealPrimary a basculé sur le nouveau contrôleur](illustrations/04-controller-shift-resultat.png)
*Après le shift : le nouveau contrôleur (en bas) affiche « RealPrimary », l’ancien (en haut) ne l’affiche plus mais garde encore « SUC, SIS » — voir Étape 5.*


Étape 5 — Limite connue : le rôle SIS ne suit pas automatiquement

Le Controller Shift transfère le rôle « primaire opérationnel » (inclusion/exclusion de devices), mais **pas** le rôle SUC/SIS (serveur d’ID de nœuds), qui reste une désignation à part. Il est probable que le bouton **« Set as SIS »** échoue avec une erreur du type *« In the network can be only one SUC/SIS »*, quel que soit le contrôleur depuis lequel vous l’essayez — c’est une limitation protocolaire connue, pas un bug de manipulation.

**Ce n’est pas bloquant** pour l’usage quotidien : le nouveau contrôleur étant déjà « RealPrimary », il pilote normalement tous les équipements. Le SIS ne sert que pour permettre à d’éventuels contrôleurs secondaires additionnels d’inclure des devices.

![Erreur typique lors d’une tentative de « Set as SIS » après le shift](illustrations/05-erreur-sis.png)
*« In the network can be only one SUC/SIS, Node Id = 1 » — cette erreur apparaît quel que soit le contrôleur ou le node ciblé.*

Piste de nettoyage (à faire une fois l’ancien contrôleur définitivement mis de côté) : depuis le nouveau contrôleur, marquez le node de l’ancien contrôleur comme **Is Failed** puis **Remove Failed**. La suppression complète du node devrait effacer la référence SIS fantôme.


Étape 6 — Basculer Jeedom sur le nouveau contrôleur

  1. Débranchez les deux clés du PC Windows, fermez PC Controller.
  2. Branchez le **nouveau contrôleur** sur la machine Jeedom.
  3. Dans Jeedom : **Plugins → Z-Wave JS** → arrêtez le démon si besoin, mettez à jour le champ **port série** pour pointer vers le nouveau contrôleur (repérable via son nom dans `/dev/serial/by-id/` sous Linux), puis redémarrez le démon.

![Champ « Port du contrôleur Z-Wave » dans la configuration du plugin Jeedom](illustrations/06-jeedom-port-controleur.png)
*Le port doit clairement identifier le nouveau matériel (ici un contrôleur Nabu Casa ZWA-2).*

Un message *« Le driver Z-Wave n’est pas initialisé, veuillez patienter »* peut s’afficher un moment le temps que le démon réinterroge chaque node — c’est normal, surtout avec des équipements sur pile qui ne répondent qu’à leur réveil périodique.


Étape 7 — Vérification finale

Dans le plugin Z-Wave JS de Jeedom, onglet **Santé Z-Wave** : vérifiez que la majorité des nodes affichent **« Complete »** en interview, avec une « Dernière activité » récente. Testez ensuite une commande sur un équipement filaire simple pour confirmer le pilotage effectif.

![Table Santé Z-Wave dans Jeedom après bascule](illustrations/07-jeedom-sante-zwave.png)
*La quasi-totalité des nodes repassent « Complete » avec une activité récente, preuve que le nouveau contrôleur communique bien avec le réseau existant.*

Il est normal de retrouver quelques nodes « fantômes » (statut ProtocolInfo, sans équipement associé, activité très ancienne ou inexistante) — ce sont généralement des restes d’inclusions ratées ou de devices retirés il y a longtemps sur l’ancien réseau, fidèlement répliqués par la migration. Ils n’affectent pas le fonctionnement des équipements réels.


Résumé des points de vigilance

Point Risque Parade
Échec du Controller Shift Les deux contrôleurs peuvent rester « secondaires » simultanément Refaire depuis une sauvegarde ; repartir de zéro si besoin
Échec du handshake sécurité S2 Devices sécurisés injoignables après bascule Reset + Remove Failed, puis refaire l’inclusion en surveillant les popups
SIS ne suit pas le shift Erreur sur « Set as SIS » Sans impact quotidien ; nettoyage possible après retrait définitif de l’ancien contrôleur
Associations « Lifeline » Certains devices peuvent continuer de pointer vers l’ancien Node ID pour les remontées instantanées À vérifier/mettre à jour device par device si des remontées instantanées cessent de fonctionner

*Procédure testée avec succès sur une migration HUSBZB-1 (série 500) → Home Assistant Connect ZWA-2 (série 800), réseau de 32 équipements, sous Jeedom avec le plugin Z-Wave JS.*

1 « J'aime »

Bonjour,

Tuto exceptionnel , bravo

Une recommandation pour ceux qui ont une carte zwave sur le port gpio ?

Avant d’envoyer les félicitations, il faudrait demander les sources…

Je suis passé d’un contrôleur Aeotec ZW090 Gen5 à un Zooz 700 par backup / restore NVM et je n’ai rencontré aucune difficulté.
Vu que j’ai suivi les indications données sur ce même forum, on doit être plusieurs dans ce cas.
Le seul prérequis était d’avoir un certain niveau de firmware sur l’Aeotec.

Bonjour,

Parfois passer par NVM ne fonctionne pas même avec le FW 1.02 sur l’Aeotec. De même entre série 500 et 800.

Salut,

Ici ?

De plus il me semble qu’il reste le problème des Lifeline à modifier quand on fait un shift.

1 « J'aime »

Bonjour

Je ne sais pas encore si je vais l’utiliser mais un grand merci pour ce tuto que je garde très précieusement. Très bien écrit et très clair :+1:

Bonjour, je me permets de contribuer à ce sujet car je viens de migrer mon ancien contrôleur Génération 5 de marque Sigma Designs vers contrôleur Z-Wave Long Range Home Assistant Connect ZWA-2 génération 8.

Mon ancien contrôle était un modèle est ACC-UZB3-E-STA avec un SDK: v6.51.8 donc trop ancien pour migrer directement une sauvegarde NVM car antérieur au SDK 6.61.

En cherchant je suis tombé sur un utilitaire qui permet de convertir cette sauvegarde et j’ai testé cela fonctionnement parfaitement. J’ai pu changer de contrôler tout simplement.

Voici ma procédure si cela peut aider :

  1. Sauvegarder Jeedom

  2. Sauvegarde de la mémoire du contrôleur

    • Dans l’interface de ZwaveJs UI : Advanced Actions → NVM Management → Backup
    • Ce menu est accessible via le bouton en bas à droite
    • Vous obtenez un fichier NVM_xxxxxx.bin
  3. Conversion de la sauvegarde

  4. Changement du contrôleur

    • Arrêter Jeedom
    • Retirer l’ancien contrôleur.
    • Brancher le nouveau.
  5. Restauration de la sauvegarde

    • Redémarrer Jeedom
    • Sélectionner le nouveau port du contrôleur, sauvegarder et redémarrer le demon Z-Wave JS.
    • Dans l’interface de ZwaveJs UI : Advanced Actions → NVM Management → Restore
    • Sélectionner NVM_xxxxx-zwjs.bin
    • Le plugin réécrit alors entièrement la mémoire du nouveau contrôleur.
    • Redémarrer le demon Z-Wave JS.

Suite à cette restauration j’ai tout récupéré, je n’ai pas eu besoin de réaliser d’intervention supplémentaire. Tout est fonctionnel !

5 « J'aime »