Tag transféré entre 2 commandes de lancement scénario différentes

Bonjour,

J’observe dans un scénario un comportement troublant quand j’essaye de lancer des scénarios avec des tags.

Le tag « scene_id » passé dans la 1ère commande de lancement de scénario n’est pas effacé dans la 2ème commande de lancement de scénario (qui n’est pas le même scénario que dans la 1ère commande). Du coup ca se passe pas bien du tout car scénario en multi-lancement normalement :wink:

Vous constatez pareil chez vous ?

[2026-04-07 05:00:28][SCENARIO] -- Début : . Tags : {"#trigger#":"other","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Lancement provoqué","#trigger_value#":"","#scene_id#":"7193417"}
[2026-04-07 05:00:28][SCENARIO] - Exécution du sous-élément de type [condition] : if (#trigger# == "schedule") || (#[Technique][Roborock Alita][Demande_Status_info]# == 1)
[2026-04-07 05:00:28][SCENARIO] Evaluation de la condition : [("other" == "schedule") || (0 == 1)] = Faux
[2026-04-07 05:00:28][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-04-07 05:00:28][SCENARIO] - Exécution du sous-élément de type [condition] : if (tag(status) === 1) || (#[Technique][Roborock Alita][Mode Nettoyage]# != 0)
[2026-04-07 05:00:28][SCENARIO] Evaluation de la condition : [("" === 1) || (0 != 0)] = Faux
[2026-04-07 05:00:28][SCENARIO] - Exécution du sous-élément de type [action] : else
[2026-04-07 05:00:28][SCENARIO] - Exécution du sous-élément de type [condition] : if tag(scene_id) != ""
[2026-04-07 05:00:28][SCENARIO] Evaluation de la condition : [7193417 != ""] = Vrai
[2026-04-07 05:00:28][SCENARIO] - Exécution du sous-élément de type [action] : then
[2026-04-07 05:00:28][SCENARIO] Exécution d'un bloc élément : 2855
[2026-04-07 05:00:28][SCENARIO] - Exécution du sous-élément de type [action] : action
[2026-04-07 05:00:28][SCENARIO] Lancement du scénario : Interface Roborock options : {"#trigger#":"","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"","#trigger_value#":"","#commande#":"scene","#scene_id#":"7193417"}
[2026-04-07 05:00:28][SCENARIO] Pause de 8 seconde(s)
[2026-04-07 05:00:36][SCENARIO] Lancement du scénario : Gestion Roborock options : {"#trigger#":"other","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Lancement provoqu\u00e9","#trigger_value#":"","#scene_id#":"7193417","#status#":"1"}
[2026-04-07 05:00:36][SCENARIO] Fin correcte du scénario

Hello,

Je n’ai jamais fais attention à ça mais j’imagine que c’est le cas chez tout le monde et que ça ne doit pas poser soucis chez moi.

Même les autres tag ne sont pas les mêmes étrangement : trigger, trigger_message

Salut,

Ah oui en effet c’est curieux tu as raison. Même le tag custom « commande » n’est pas repris.
Est-ce ma façon de passer le tag « scene_id » qui engendre cet effet ? Ou alors que ce tag fasse partie du déclencheur du scénario ? Je penche pour la 2ème raison il faudrait que je teste.

version core? 4.5.3 j’imagine?

et le scénario courant, c’est lequel? est-ce « Gestion robot » qui se relance?

je pense que j’ai identifié au moins une raison mais le seul façon que j’arrive à reproduire c’est quand j’ai un scénario qui se relance lui-même;
dans ce cas, dans le code on garde la même instance, et donc on garde les tags déjà existant (car c’était le fix précédent qui évitait d’écraser le tags par défaut et donc de se retrouver avec des scénarios sans le tag #trigger_name# par exemple (fix: Merge setTags method to append tags instead of replacing them by Mips2648 · Pull Request #3198 · jeedom/core · GitHub)

si c’est ca, je pense que la solution sera de « simplement » ne pas réutiliser l’instance en cours mais bien d’en créer une nouvelle dès qu’on veut faire une action sur un scénario;

1 « J'aime »

Salut,

Oui 4.5.3.

Et oui le scénario courant est « Gestion Robot ». Quand je lance une routine de nettoyage de mon Roborock je reboucle sur le même scénario et selon le tag « status » il vient augmenter la fréquence de refresh du status du robot.

ok c’est clair, je vais proposer ma correction, on verra si qlqun à une meilleur idée

le bout code servait à optimiser les appels DB, clairement c’était bien, mais à présent que le scope d’execution des scénarios est revus pour les rendre plus indépendants, ca n’est probablement plus judicieux

1 « J'aime »

Merci pour ton analyse.
Je me rappelle en effet maintenant du fix.

Moi j’aime bien relancer un scénario sur lui-même avec des tags. J’en ai même d’autres que celui-ci dans le même style. Je trouve que cela facilite la maintenance dans le temps de tout avoir au même endroit (d’où mon autre passion pour les triggers).

Je vois sans problème plusieurs solution pour « faire avec ». Dont une modification de mon IF qui, après test rapide, semble fonctionner (j’ai rajouté && status !== 1). Car mon LXC avec la bibliothèque python-roborock n’appréciait pas du tout les appels toutes les 8 secondes (je suis en multi lancement).
Je dois par contre vérifier les autres comportant le même type de programmation.

Edit : ou attendre ton fix merci :+1::blush:

Ou plus simple peut-être, tu « vides » ton tag scene_id avant de relancer ton scénario

Oui en effet je peux aussi le forcer à « vide ».

Salut,

Pourrais-tu me donner un exemple simple mais complet ou tu arrives à reproduire le problème?
pcq je croyais avoir reproduit mais là j’y arrive plus donc c’est p-e pas ce que je pensais

Salut,

Je vais te préparer ça. Ce soir ou demain.

J’ai notamment une interrogation sur le fait que le tag scene_id soit à l’origine dans le déclencheur du scénario. En fait que je ne fais que le passer dans mon appel au scénario Interface.

Salut,

J’ai compris je pense.

Quand je relance mon scenario X (= « Gestion Roborock ») sur lui-même, il hérite des tags qui lui avaient été passés à son déclenchement. Or dans mon cas j’initie bien le scénario avec un tag scene_id, que je reprends d’ailleurs dans mon lancement du scénario Y = « interface Roborock »).
Il aurait fallu que je ne désigne pas le tag d’appel du même nom que le tag que le scénario Y attend.

Exemple :

si je lance avec un tag « scene_id » à partir de ce scénario :

on observe dans le log :

[2026-04-13 10:36:42][SCENARIO] -- Début : . Tags : {"#trigger#":"scenario","#trigger_name#":"[Aucun][Aucun][TITI]","#trigger_id#":196,"#trigger_message#":"Lancement provoqué par le scénario  : [Aucun][Aucun][TITI]","#trigger_value#":"","#scene_id#":"test"}
[2026-04-13 10:36:42][SCENARIO] - Exécution du sous-élément de type [action] : action
[2026-04-13 10:36:42][SCENARIO] Lancement du scénario : TOTO options : {"#trigger#":"","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"","#trigger_value#":"","#commande#":"scene","#scene_id#":"test"}
[2026-04-13 10:36:42][SCENARIO] Lancement du scénario : TEST_TAG options : {"#trigger#":"scenario","#trigger_name#":"[Aucun][Aucun][TITI]","#trigger_id#":196,"#trigger_message#":"Lancement provoqu\u00e9 par le sc\u00e9nario  : [Aucun][Aucun][TITI]","#trigger_value#":"","#scene_id#":"test","#status#":"1"}
[2026-04-13 10:36:42][SCENARIO] Fin correcte du scénario

oui c’est ce que je pensais avoir trouvé en lisant le code, ca je vois pourquoi potentiellement.
mais je voulais d’abord reproduire pour m’assurer que si je change, ca ne se produit plus

et donc je pensais avoir reproduis puis j’y arrivais plus… et en fait maintenant je me rend compte que j’avais initialement testé sur une machine deb11/php7, sur laquelle je reproduis, et ensuite sur une deb12/php8, sur laquelle le problème ne se pose pas (mais je ne comprend pas encore pq car d’après le code ca devrait)

comme quoi… la page santé c’est toujours nécessaire et utile pour chaque demande…

du coup t’es sur quoi? deb11? je peux avoir la page santé?

c’est qd meme super dangereux ton système de scénario qui se rappelle lui même en boucle, je me suis fait avoir qlq fois en testant, mon scénario a juste bouclé pcq j’ai oublié de mettre une condition de sortie

je n’ai pas bien compris le vrai besoin (même si ca change rien au potentiel problème de tag à résoudre) mais ca serait pas un candidat au bloc « Tant que » ?

Salut,

Le mystère s’épaissitt car je suis sous … Debian 12 / php 8 :wink:

PS : à mon tour de me faire savonner les oreilles ! :sweat_smile: :grin:

1 « J'aime »

Oui le « Tant Que » pourrais faire très majoritairement l’affaire. Mais en ce moment j’ai du taff par-dessus la tête et des pépins de santé donc je n’ai pas testé ta nouveauté qui semble très prometteuse :slight_smile:

Je procède ainsi pour avoir un unique scénario pour 1 fonction (ici la gestion du Roborock), et je trie par trigger ou tag l’ation à réaliser.
Cela me sert en particulier ici à augmenter la fréquence de refresh des données du Roborock quand je lance une séquence de nettoyage.

Dans d’autres scénarios par exemple vigilance météo cela me sert à refresh les horaires de la vigilance pour envoi Telegram alors que le niveau de vigilance est constant (et est le trigger). Mais dans ce cas c’est en multi-lancement car le même scénario gère 4 vigilances différentes. Voir fichier Template joint car c’est compliqué à expliquer pour moi.

Vigilance.json.txt (110,4 Ko)

1 « J'aime »

bon, je me replonge dedans demain ou jeudi alors

le pire c’est que je suis quasi sur du changement de code qu’il faut mais je veux d’abord reproduire à 100% le cas, c’est trop piégeux

et tkt pour les tests, faut pas faire ca en prod de toute facon; prends soin de toi :wink:

1 « J'aime »

Bonjour,
Je fais exactement le même genre d’auto-appel de scénario.
Pour mon réseau Zigbee, si l’état d’un actionneur n’est toujours pas dans celui voulu suite à modification de consigne et premier changement, je relance le scénario dans une minute pour réessayer.

Un bon candidat pour le nouveau « tant que » de Mips, bien que j’ai un doute sur l’attente active à l’intérieur de ce tant que, attente de quelques secondes pour mon cas.

Voila, mystère éclairci et problème résolu (ainsi que 2 autres en même temps)

si t’as le courage de tester, c’est ici mais c’est p-e un peu compliqué de modifier manuellement:

4 « J'aime »