Bonjour à tous, merci à tous pour votre contribution, j’ai jusqu’ici trouvé mon bonheur dans tous vos posts, mais malheureusement pas cette fois ci.
J’ai un scénario qui, pendant la journée, lorsqu’une lumière est allumée cast sur ma google home un message du type « il ne faut pas ouvrir la lumière en plein jour, cette lumière va s’éteindre dans 1 minute ». Mon scénario est provoqué par le changement d’état de plusieurs lumières. Jusqu’ici tout va bien. Là où ça se corce, c’est que je rajoute à la suite de ce message un bloc A time_op(#time#,1) et dedans je mets un bloc Code qui permet d’extraire le déclancheur $realTriggerName = cmd::cmdToHumanReadable($scenario->getRealTrigger()); et d’appeler la commande Off de la lumière qui déclanché le scénario.
Bien évidemment ça ne marche pas, puisque dans le contexte d’execution du bloc A on n’a plus le déclancheur du scénario initial mais le déclanchement via l’heure .
Mon idée était de pouvoir passer un paramètre au Bloc A avec le nom du déclancheur.
La solution passer par une variable ne convient pas, parce que ce scénario peut être appelé par plusieurs lumières simultanément.
J’espère avoir été assez clair dans mes explications.
Si une âme charitable passe par là et aurait une idée sur la résolution de mon problème je suis preneur.
oui, pas de soucis pour le récupérer avant, mais j’en ai besoin dans le bloc A et pas à l’extérieur. Comment passer cette valeur au Bloc A ? parce que c’est le Bloc A qui va éteindre la lumière
le souci ici est spécifique au bloc A qui perd le contexte du scénario initial et devient programmé et non provoqué, donc même si tu mets un autre scénario tu ne feras que déplacer le problème.
Non là où @bison a raison, c’est que si tu passe la valeur via les tags, la valeur sera conservée.
Le cron inclus le scénario et tous les paramètres qui vont avec
Alors attends si j’ai bien compris, je dois remplacer mon bloc code par un scénario dans le A et essayer de lui passer un tag c’est ça ? mais moi dans le Bloc A je n’ai pas accès à mon déclancheur donc je ne pourrais pas le passer à mon scénario. Je ne sais pas si j’ai bien compris la proposition de @Bison ?
Mais si tu y as accès :
Avant le bloc A tu mets ton bloc code. Il récupère le trigger et construit le tag.
Dans le bloc A, tu appelles le scénario avec le tag et c’est tout
Le tag ça existe pendant toute la durée du scénario. Et comme le cron est créé avec le scénario et les tags qui lui sont passés. Ben tu as rien perdu
Mais bon, personnellement pour ça je m’emmerde pas : sleep et basta.
Pour l’exercice ça peut être formateur de faire avec les tags
je pensais que le contenu du bloc A étant executé plus tard, qu’on ne pouvait pas utiliser dedans des tags appartenant au scénario appelant puisque l’appelant n’est plus là lors de l’execution du Bloc A. J’ai eu tort !
Je crois que j’ai été vite en besogne !!! en fait ça marche oui mais pas avec 2 commandes en même temps, le tag est écrasé et le scénario est appelé 2 fois avec le dernier tag envoyé
Je vais rajouter une petite astuce dont je viens de me rendre compte, si on veut que plusieurs instances du même scénario soient lancés simultanément il faut cocher la case « Multi-lancement » dans l’onglet Général du scénario, sinon il va garder le deuxième appel du scénario jusqu’à ce que le premier soit fini et va s’executer juste après.