Transmettre un texte d'un scénario à l'autre sans utiliser les variables

Bonjour,

Je seul moyen de transmettre un texte d’un scénario à l’autre que j’ai pu faire fonctionner, c’est via les variables. Mais je voudrais éviter car comme ces dernières sont globales, j’ai parfois des interférences entre mes différents scénarios sur ces variables.

J’ai vu qu’il existait la commande scenario_return mais je n’arrive pas à comprendre comment récupérer la valeur de retour dans le scénario appelant.

Salut.

Les tags sont parfaits pour ce besoin : transmissibles, modifiables et non globaux

1 « J'aime »

Bonjour,

En passant par des tags ça marche impeccable. jette un œil sur l’article de @sarakha63 La domotique pour une Maison Connectée Élégante

Ou bien plus ressent : la syntaxe pour récupérer la valeur du tag a été modifié depuis.

tag(montag,[defaut]) : Permet de récupérer la valeur d’un tag ou la valeur par défaut s’il n’existe pas.

https://www.ladomopratique.com/envoi-des-notifications-dans-jeedom/

oui, pardon, je n’ai pas été bien clair

Pour envoyer une valeur du scénario1 (appelant) dans le scénario2 (appelé) j’utilise bien les tags.

Mais dans l’autre sens? Si j’ai modifié un texte dans le scénario2, comment le récupérer dans le scénario d’origine?

Effectivement je vois que les variables.
maintenant tu peux créé et supprimer les variables aux besoins.
Si tu as des interférences entre les scenario tu peux lancer le scenario secondaire en sync.

Une autre solution dans ce cas, c’est de regarder ce que tu peux faire en remplaçant le sous-cénario par une fonction dans user.function.class.php

Je relance ce sujet pour savoir comment on peut récupérer dans un scénario, le retour d’un second scénario qui a été appelé par le premier ?

Salut,

Si les tags ne font pas l’affaire il existe maintenant une commande return:

Retourner un texte/une donnée (scenario_return) : Retourne un texte ou une valeur pour une interaction par exemple.
https://doc.jeedom.com/fr_FR/core/4.0/scenario

Pas eu l’occasion de jouer avec encore mais ça semble correspondre au besoin exprimé

@Salvialf en fait c’est bien parce qu’il existe la commande scenario_return qu’on s’attend à ce qu’on puisse récupérer le retour, et là on ne voit pas la commande … c’est bien le problème

Effectivement ça semble limité aux interactions.

une exemple ici:

J’essaye d’utiliser #valeur# sans succès. C’est dommage, la doc parle d’interaction comme exemple, mais quoi d’autre et comment ?

Retourner un texte/une donnée (scenario_return) : Retourne un texte ou une valeur pour une interaction par exemple

Il n’est jamais trop tard pour proposer une solution, alors voila un exemple d’utilisation de scenario_return :

A l’intérieur d’un scénario on insère un bloc code qui va appeler un autre scenario qui contiendra notre fameux scenario_return.
Le bloc code :

$tags['#retour#'] = scenario::byString('#[Mon][Autre][Scenario]#')->launch();
$scenario->setTags($tags);

Et ensuite on peut utiliser le retour de l’autre scenario comme un tag dans la suite de notre scenario.

1 « J'aime »

Bonjour,

En complément de la réponse fournie, pouvez-vous nous indiquer comment faire passer - dans un bloc de code - plusieurs tags au moment de l’appel d’un scénario ?

Par avance merci pour la réponse
Guy

Bonjour
Une solution :

Si l’on appel A le scénario Appelant et S le scénario appelé (Script) :

Le scénario A commence avec
Si tag(script,0)==0

—Alors : contient ton scénario actuel qui appelle le scénario S et s’arrête. (Le scénario S va s’exécuter puis re-démarrer le scénario A avec les textes dans des tag + le tag(script)=1

—-Sinon :
va contenir la suite du scénario A avec tous les textes reçu du scénario script (sous forme de tag)

Évidemment, le scénario S peut être en multi-lancement pour être appelé par différents scénarios.

Bonjour,

je me permets d’interagir pour parler de « variable »

je sais pas si c’est la bonne solution, mais, ton premier scénario peut générer une variable dont les données peuvent être du texte ou une une valeur.

Ton premier scenario déclenche le second.

Tu récupère ta variable en passant par un tag