[TUTO] De la bonne utilisation de l'outil REMPLACER

[EDIT du 14/06/2024]
Ce tuto a été repris et soumis à approbation pour intégrer la documentation officielle de Jeedom avec la version 4.4.7 sortie en juin 2024.
Celle-ci est désormais en ligne ici.
Il ne devrait donc plus être nécessaire de se référer à ce tuto, qui fait désormais double emploi…



Bonjour,

Aujourd’hui, je vous propose un nouveau tutoriel sur la (bonne) utilisation de l’outil ‹ Remplacer ›, qui est apparu avec la version 4.3.2 de Jeedom.
Celui-ci est valable à partir de la version stable v4.4.5 au 01/05/24, et susceptible d’être soumis à des modifications/améliorations du core par la suite.

Cette fonction est certes déjà documentée (voir ici), mais celle-ci reste relativement succincte par rapport à la portée réelle de cette fonction.
Je vais essayer donc d’approfondir un peu plus et de vous guider pas à pas dans son utilisation (qui n’est pas limitée aux exemples de ce tuto !).

image
(Elle se cache ici…)


1. Pourquoi un tel outil ?

En cas de problème ou de la nécessité de remplacer d’un équipement physique ou virtuel (qui peut donc être un capteur de température, de présence, une commande de volume, un niveau d’eau, etc…), Jeedom propose depuis la version 4.3.2 un nouvel outil ‘Remplacer’ qui assurera la recopie de l’ensemble des commandes, informations, et historique de cet équipement vers un nouvel équipement.
Il se chargera également de remplacer l’ID de l’ancien équipement par le nouveau dans tous les scénarios, designs, virtuels, etc… qui y faisait référence.

En effet, si l’équipement est supprimé, son ID original sera également perdu et toutes les références seront effacées définitivement. Il faudra alors recréer toutes les commandes et les réintégrer dans l’ensemble des designs, widgets, etc… pour le nouveau module, et ce même si celui-ci est strictement de même type que l’original, voire le même mais avec un ID différent.
Aussi, avant toute suppression d’un équipement, Jeedom va prévenir des conséquences de cette suppression dans une fenêtre d’alerte :

image

Ici, la suppression de ce capteur de vibration Aqara va provoquer :

  • La suppression des affichages définis dans le design Alarmes zones,
  • La suppression des informations vibration, niveau de batterie, et date de la dernière communication, y compris en ce qui concerne les historiques,
  • La suppression de l’équipement dans le scénario ‘Alarme détection intru’.

Et à partir du moment où cet équipement sera définitivement supprimé, il sera remplacé dans toutes ces entités par un numéro d’ID ou un champ vide à la place de son appellation d’origine :

Et là, vous êtes mal… (mais à ce stade il y a encore un moyen de sauver la situation :slightly_smiling_face:, voir plus bas…)

2. Les opérations à faire au préalable avant d’utiliser cet outil

Même si l’outil ‹ Remplacer › va vous proposer une sauvegarde de précaution avant, prenez l’habitude d’en faire une avant tout (je vous explique pourquoi un peu plus loin…).
Gardez à l’esprit que cet outil est en effet vraiment puissant dans la mesure où il va aller effectuer les remplacements à tous les niveaux, y compris (évidemment…) ceux auxquels vous n’aviez pas pensé ou oublié (si, si… regardez le petit widget dans le design qu’on utilise presque jamais !).
Et il n’y a (malheureusement…) pas de fonction ‹ undo › pour réparer ses bêtises…

Après cette bonne chose, la phase suivante va être de renommer l’ancien équipement avant de l’effacer définitivement (tout à la fin !!!..).
Pour ce faire, il suffit de lui changer son nom, en ajoutant le suffixe ‹ _old › par exemple.

N’oublier pas de sauvegarder.

L’étape suivante, c’est l’inclusion du nouvel équipement s’il s’agit d’un équipement physique, ou la création du nouvel équipement virtuel, suivant la procédure standard propre à chaque plugin.

Il faut ensuite le nommer avec son nom définitif, définir l’objet parent, sa catégorie, et enfin l’activer. On obtient ainsi deux équipements :

  • L’ancien équipement, qui n’existe peut-être plus mais qui reste référencé dans toutes les structures de Jeedom avec ses historiques,
  • Et le nouvel équipement, sur lequel il s’agira de recopier les historiques et de le référencer à la place de l’ancien.

Voilà, on a les bases.


3. L’utilisation de l’outil ‹ Remplacer ›

On entre dans le cœur du sujet. Ouvrir l’outil ‘Remplacer’, dans le menu ‘Outils’.

image

Dans le champ ‘Objet’, sélectionner le ou les objets parents.

image

Dans les options, sélectionner le mode souhaité (Remplacer ou Copier), et suivant les besoins, les options suivantes (qui sont toutes décochées par défaut !), soit au minimum :

  • Copier la configuration de l’équipement source,
  • Copier la configuration de la commande source.

Puis cliquer sur ‘Filtrer’

image

Dans le champ ‘Remplacements’, toutes les entités relatives à l’objet parent apparaissent :

Cocher l’équipement source (celui qu’on a renommé en _old, voir plus haut pour les distraits :slightly_smiling_face:…), c’est à dire celui à partir duquel on souhaite recopier les commandes, informations, historique…
Ici, l’équipement source sera donc : [Chambre ami][T°Chambre_old] (767 | z2m).
Cliquer dessus pour faire apparaître les différents champs rattachés.

Dans la partie Cible à droite, dérouler la liste et sélectionner le nouvel équipement qui va le remplacer, c’est à dire [Chambre ami][T° chambre] dans notre exemple.

image

Dans les listes déroulantes qui s’affichent ensuite à droite, les informations sont présentées sur fond bleu, les actions sur fond orange (ci dessous un autre exemple sur un luminaire où il y a des actions et des infos).

Et s’il y a une correspondance directe (même nom en particulier), les différents paramètres seront définis automatiquement.

Ici on a de la chance, tout est automatiquement reconnu…
Sinon, le champ sera vide, et il faudra sélectionner manuellement dans la liste déroulante l’information/action correspondante si pertinent.

On y est presque, il ne reste plus qu’à sauter le pas…
Cliquer sur ‘Remplacer’,

image

Valider le remplacement, en vérifiant qu’une sauvegarde ait bien été faite auparavant (j’insiste : il n’y a pas de retour en arrière possible !).

image

D’ailleurs, l’outil vous le proposera. Sauf qu’en quittant cette fonction pour faire la sauvegarde à ce moment, vous abandonnerez également tous les paramétrages qu’on vient de faire, c’est ballot… D’où l’intérêt de faire cette sauvegarde au tout début !

Allez, c’est parti…

Après une brève attente, un pop-up d’alerte va apparaître et va indiquer le nombre de remplacements effectués.

image

Il ne reste plus qu’à vérifier que tout ce soit bien passé.


4. Les vérifications

Assurez-vous que le nouvel équipement ait bien été pris en compte dans les designs, scénarios, widgets, virtuels, plugs-in, etc… avec sa configuration (disposition, affichage, affectation des widgets,…) et (le cas échéant) l’historique associé.

image

Pour ajouter une couche, et bien vérifier qu’aucun problème supplémentaire n’ait été généré suite à ce remplacement, il est possible d’utiliser la fonction de détection des commandes orphelines.
Aller sur Analyse, Equipements, cliquer sur l’onglet ‘Commandes orphelines’.

image

image

Si tout c’est bien passé, il ne doit y avoir aucune ligne présente dans ce compte rendu. Sinon, il faudra procéder à une analyse ligne par ligne de chaque problème indiqué pour y remédier.


(Ouf… C’est nickel !)

(Aïe… Là c’est moche. Il y a plein de trucs qu’il faudra reprendre un par un…)

[EDIT du 02/05/24]
Il y a néanmoins moyen de récupérer ce genre d’erreur :slightly_smiling_face:
Un grand merci à @Furaxworld qui indique comment faire dans son message ci-dessous :

Si les commandes orphelines ne sont en effet pas prises en compte par l’outil Remplacer,
il est quand même possible d’opérer à des remplacements avec cette fonction Cette commande remplace l’ID qu’on retrouve ici dans la fenêtre de configuration de la commande :

:+1: @Furaxworld !


5. On a fini !

Si tout est OK, l’ancien équipement (T°Chambre_old dans l’exemple) peut alors (enfin) être supprimé. Plus aucune référence ne doit apparaître dans le pop-up d’avertissement lors de la suppression, excepté les commandes intrinsèques à cet équipement.

Là, c’est tout bon, il n’est plus référencé que par son objet d’appartenance et ses propres commandes (normal).
On peut le supprimer sans regrets.


6. Quelques conseils en conclusion

Cet outil est vraiment pratique, mais il est tout aussi dangereux s’il est mal utilisé.
Je rappelle donc les bases :

  • Faire systématiquement une sauvegarde, et ce avant même de cliquer sur ‹ Remplacer ›,
  • Il n’y a pas d’annulation possible : ce qui est fait, est fait (en bien ou en mal…),
  • Et enfin, je conseille fortement de s’entraîner un peu avant d’utiliser cet outil si on ne le maîtrise pas, sur un équipement bidon créé pour l’occasion par exemple, histoire d’être vraiment sûr de ce qu’on fait…

Comme toujours, si vous voyez des inexactitudes sur ce que j’ai écrit ci-dessus, n’hésitez surtout pas à m’en faire part, je corrigerai ! :slightly_smiling_face:

19 « J'aime »

Tu devrais proposer ton tuto en pull request sur GitHub de la doc officielle de la commande “remplacer” !

Je viens d’y faire un tour et ça manque cruellement de complément… :wink: (j’en ai profité pour corriger quelques coquilles avec un PR…)

Typiquement, j’étais dans le flou entre source et cible !
Est-ce la source sui “écrase” la cible, la source qui “devient” la cible, ou l’inverse ?!
Bref, ça manque un peu d’explications me concernant sur la doc :hugs:

1 « J'aime »

n restriction, il ne remplace pas les commandes misent en action dans Agenda et ne remplace pas non plus les commandes misent en déclenchement d’un scénario.
C’est à faire à la main par la suite

1 « J'aime »

C’est vrai que cette fonction n’est pas très intuitive à la base ! :wink:
Du coup, je pense qu’il y a pas mal d’appréhension avant d’oser l’utiliser (à commencer par moi-même il n’y a pas si longtemps…).
J’espère que ce tuto aura au moins le mérite de la (re)découvrir, et surtout d’éviter de se faire des nœuds au cerveau… :slightly_smiling_face:

1 « J'aime »

C’est exactement ça !

Je suis obligé de m’y intéresser car je passe d’OpenZwave à en ce moment (avec tout ce que cela implique, je sais je suis très en retard, bref…).

J’étais sur le point d’ouvrir un sujet pour demander des précisions sur cette fonction et j’ai trouvé le tien qui tombe vraiment à pic !

Merci :wink:

1 « J'aime »

Au fait, j’ai déjà vécu cette situation auparavant (suppression d’un équipement, remplacé par un code dans les scénarios, etc) et je me suis demandé s’il n’y avait pas un moyen de remplacer à la volée tous les #6529# - dito ton exemple - par un nouvel équipement, peut être avec la fonction remplacer justement ?!

Hélas non !
Une fois que l’équipement a été supprimé, il est impossible avec cette fonction de faire un quelconque remplacement. Pour la simple raison que celui-ci n’apparaît plus dans la liste des équipements ‹ source ›, comme dans l’exemple ci-dessous (un virtuel qui reprend l’état binaire d’une ampoule) :

Avant la suppression, on peut encore faire un remplacement avec l’info ‹ Test › (source):

Mais après la suppression de l’équipement ou de la commande (ici l’info ‹ Test ›), et bien il n’y a plus aucune action possible (normal…).

Donc difficile de remplacer un #6529# qui n’est pas référencé…

Tu peux le tenter en passant par la base de donnée avec adminer par exemple, tu recherches le #6529# et tu remplaces le chiffre qui était l’ancien ID de l’ancienne commande par l’ID de la nouvelle commande. Mais attention quand on bricole dans la bdd

Ce serait une avancée assez chouette, aucune idée de la complexité pour les devs par contre, si la team passe par là ! :wink:

Bien joué ! A tester.
Mais un truc un peu plus « UI » et intégré dans Jeedom serait sympa aussi, et moins source de problème… :stuck_out_tongue:

Salut,

Effectivement, dans le plugin agenda il n’y a pas de remplacement avec cette fonction.

Là par contre, je constate que ce n’est pas le cas…
J’ai fait un petit test.
J’ai créé deux virtuels, Test et Test 2 (une recopie de l’état d’une ampoule, mais peu importe…).
Les voici (dans deux équipements distincts) :

Dans un scénario, j’ai mis en déclencheur un changement d’état lié au virtuel ‹ Test › :

Et lorsque je fait le remplacement :

J’ai bien pour résultat un changement dans le déclencheur (Test2 à la place de Test) :

Donc à priori, ça fonctionne aussi avec les déclencheurs…

[EDIT] Après quelques recherches, il s’avère que ce bug concernant le non remplacement dans les déclencheurs et apparu en effet avec la version 4.0, a été résolu avec la 4.2.

Oui je confirme, les déclencheurs sont mis à jour.

1 « J'aime »

Salut,

Le plus simple dans ce cas est d’utiliser la fonction Cette commande remplace l’ID
Aller à la commande qui va remplacer l’ancienne ( #1960# que l’on retrouve dans les commandes orphelines).

On évite d’aller faire joujou dans la BDD :face_with_peeking_eye:

5 « J'aime »

Excellent merci ! :stuck_out_tongue: :pray: :+1: :ok_hand:
C’est un vrai truc qui gagne à être connu :slight_smile:

1 « J'aime »

Hello,
Peux tu refaire l’essai avec un déclencheur sur condition ? (qu’on soit sur)
#commande# == 1
car j’ai fais un remplacement hier sur la 4.3.23 de mon fils et j’ai eu un non remplacement.
A +

Salut,
Non, je te confirme, après test le remplacement se fait très bien avec #commande#==1 ou 0 (Jeedom en v4.4.5).
Ce serait lié à la version en 4.3.23 ? Ca me paraît étrange…

Pas grave, de toute façon elle est caduque la 4.3 :grinning:
Le tuto que tu as fais reste une très bonne chose car j’avais galéré à l’époque de mon passage au zwavejs pour comprendre l’utilisation et l’emplacement des boutons à cliquer qui n’est pas intuitive / à ma logique.
Merci de cette initiative :wave:

2 « J'aime »

Salut,
Et si tu laissais faire ton fils? :slightly_smiling_face:

3 « J'aime »

On les a à vie les gosses, quelques soit l’âge :upside_down_face: :rofl:

1 « J'aime »

Salut,

Bien joué pour ton tutoriel qui est vraiment bien structuré et facile à suivre !
Ta clarté et ta capacité à expliquer des concepts (plus complexes) de manière simple sont impressionnantes. Tu as une manière engageante d’informer qui rend l’apprentissage vraiment agréable. Continue comme ça, tu inspires vraiment les autres à apprendre et à se développer !

Moi,

6 « J'aime »

Salut,
Merci pour tes encouragements, ca fait toujours plaisir ! :blush:
J’essaie en effet de me mettre à la portée de tous les niveaux (bon, sans dépasser mon propre niveau, car j’évite quand même de parler de ce que je ne connais pas…), et le partage des expériences dans ce forum me semble important…
Et en plus si ça peut aider concrètement… :fireworks: !

5 « J'aime »