Attendre la fin de l'exécution d'un sous-scénario pour continuer l'exécution du scénario principal

Bonjour à tous,

Question qui va sans doute amener une réponse « mais comment je n’y ai pas pensé avant », mais comme je ne trouve rien via la recherche…

J’ai un scénario principal.
Dans ce scénario, j’appelle des sous-scénarios.
Je souhaite que ces sous-scénarios ne s’exécutent que les uns après les autres.

Or, Jeedom traite une ligne de lancement de scénario comme une simple commande, et passe immédiatement à la suivante.

La seule solution que j’ai trouvé est de mettre un « sleep » après chaque appel de sous-scénario.
Ca fait le taf, mais c’est loin d’être optimal (le temps d’exécution de chaque sous-scénario est valable, et je suis donc obligé d’attendre à chaque fois le maximum de temps)

Comment puis-je faire en sorte « proprement » que, lors de l’appel d’un sous-scénario, l’exécution de la ligne suivant attende la fin de l’exécution du scénario précédent ?

Salut,

Il faut démarrer le scénario en mode « Démarrer (Sync) ».

1 « J'aime »

pour plus d’infos par rapport à la reponse de @bison :

  • Démarrer : démarre le scenario dans un thread diffèrent, le scenario s’exécute indépendamment du reste
  • Démarrer (Sync), démarre le scénario appelé et met en pause le scénario appelant le temps que le scénario appelé ait fini de s’exécuter
  • Arrêter : arrête le scenario
  • Activer : active un scénario désactiver.
  • Désactiver : inhibe le scénario, il ne se lance plus quelque soit les déclencheurs.
  • Remise à zéro des SI : permet de remettre à zéro le statut des “SI” (ce statut est utilisé pour la non répétition des actions d’un “SI” si on passe pour la 2ème fois consécutive dedans)
2 « J'aime »

A mon sens, répéter que la lecture de la doc est essentielle ne serait pas de trop.

2 « J'aime »

100% d’accord !
Malheureusement, pour ce cas précis, ça n’est pas dans la doc :wink:. Je n’ai jamais trouvé l’explication du « demarrer (Sync) », à part en fouillant le community.

Merci à @Bison et @ngrataloup pour vos commentaires !

@mich0111,

Je suis également un fan du #RTFM#, et crois moi si je te soutien que j’ai fais mes recherches sans trouver une solution qui me semblait probante…

« démarrer dans un thread différent » est peut-être basique pour certains, mais loin de l’être pour d’autres…

Et pour cause, la réponse apportée soulève une nouvelle question :

Y a-t-il un lien entre :

  • la propriété « synchrone » que l’on peut sélectionner dans l’onglet « Général » d’un scénario
  • le lancement « Démarrer (sync) » d’un scénario

Je suppose que dans l’affirmative, le premier impose le fonctionnement systématique en (synch)rone du scénario; le second permettant de choisir lors de l’appel ?

Pourquoi est-il mentionné que cela peut rendre le système instable ?
Risque de réelles instabilités, ou uniquement risque de deadlock en cas d’erreur de programmation ?

EDIT : LA réponse (ou tout du moins l’explication du synchrone/asynchrone est ici

…mais la réponse de @Domatizer à cette réponse ne me rassure gère…
J’ai en effet dans certaines routine des sous-scénarios qui appelle également des sous-scénarios (soit 3 niveaux)…

Y a-t-il un retour de la communauté concernant la stabilité de ce fonctionnement ?
(Au pire, je pourrai le dire dans pas longtemps…)

+1 :+1:
Je viens également de l’apprendre, grâce à ce fil, et c’est une découverte forte utile !!
Merci et bonne journée à tous

Tu n’as sûrement pas assez cherché :

Les commandes spécifiques
En plus des commandes domotiques, vous avez accès aux actions suivantes :

Pause (sleep) : Pause de x seconde(s).
variable (variable) : Création/modification d’une variable ou de la valeur d’une variable.
Supprimer variable (delete_variable) : Permet de supprimer une variable.
genericType(GENERIC, #[Object]#) : Modification d’une commande info (event) ou action (execCmd) par Type Générique, dans un objet. Par exemple, éteindre toutes les lumières dans le Salon.
Scénario (scenario) : Permet de contrôler des scénarios. La partie tags permet d’envoyer des tags au scénario, ex : montag=2 (attention il ne faut utiliser que des lettre de a à z. Pas de majuscules, pas d’accents et pas de caractères spéciaux). On récupère le tag dans le scénario cible avec la fonction tag(montag).
Démarrer : Démarre le scenario dans un thread diffèrent. Le scenario démarré s’exécute indépendamment du scénario appelant.
Démarrer (Sync) : Démarre le scénario appelé et met en pause le scénario appelant, le temps que le scénario appelé ait fini de s’exécuter.
Arrêter : Arrête le scenario.
Activer : Active un scénario désactivé.
Désactiver : Désactive le scénario. Il ne se lance plus quelque soit les déclencheurs.
Remise à zéro des SI : Permet de remettre à zéro le statut des SI. Ce statut est utilisé pour la non répétition des actions d’un SI, si l’évaluation de la condition donne le même résultat que la précédente évaluation.

Et je n’ai pas tout recopier.

Trouvé à l’adresse :
https://doc.jeedom.com/fr_FR/core/4.2/scenario?theme=light

2 « J'aime »

Bonjour,

Ça a été rajouté récemment car à moins que ce week-end n’ait été plus dur pour moi que je le pensais :wink: ça n’y était pas quand j’ai vérifié la documentation.

1 « J'aime »

Ce que je sais c’est que les commandes spécifiques je les avais apprises en lisant la doc.
Je n’avais regardé si ça avait été supprimé, peut-être lors d’une mise à jour de doc, mais en regardant tout à l’heure je suis immédiatement tombé dessus.
Je n’en sais pas plus.

1 « J'aime »

Je suis d’accord avec toi je me rappelais qu’elles ont été au moins une fois dans la documentation. D’où ma recherche ce week-end car j’étais surpris d’entendre qu’elles n’y étaient pas.
Mais j’étais peut-être aussi fatigué :joy:

Je les ai rajouté hier sur la doc en lisant ce fil :innocent: :joy:

7 « J'aime »

Mais ça y était bien avant ?

Ben non sinon je l’aurai pas ajouté :joy:

2 « J'aime »

Quand je dis avant, je ne parle pas de récemment.
Je sais que je l’avais il y a un certain temps mais quand ?

Bon, enfin, l’important, c’est que ce soit maintenant dans la documentation, merci à @kiboost pour le rajout rapide.
On doit pouvoir clôturer ce thread :wink:

Merci à tous et à @kiboost en particulier: je viens enfin de comprendre la fonction que remplit démarrer (sync). Ca fait plus de deux ans que j’utilise Jeedom (et sa documentation) pour les scénarios, mais j’avais pas compris: il faut dire que je suis une vieille chose en voie d’obsolescence (programmée!!!). :stuck_out_tongue_winking_eye:

Bonjour,
J’ai une question par rapport à ce mode « Démarrer(sync) ».
Je pense que j’interprète mal la fonction.
Je fait la gestion de mon arrosage par un scénario principale qui a 3 modes : Arrêt / Auto / Forcée
Puis j’ai 7 zones indépendantes (7 scénarios) qui ont chacun 3 modes aussi : Arrêt / Auto / Forcée
Chaque zone à son timer en minutes de 0 à 30min.
Voici à quoi cela ressemble :
image

Ma question : Je souhaite qu’en mode Programmation AUTO je lance les zones les unes aprés les autres en respectant la valeur du timer. D’ou l’extrait de scénario suivant :

Ce matin le scénario principal à démarrer tous les sous scénario à 1 sec d’intervalle… et rien ne c’est arrosé. (Pas assez de debit d’eau pour tous faires en 7sec)
Démarrer(Sync) n’est pas censé attendre la fin du sous scénario?

Extrait d’un sous scénario:

Merci de votre retour si je pollue j’ouvrirais mon post :wink:

Publie les logs de tes scenarios pour savoir ce qu’il se passe exactement

Log scénario principal.
Hier soir j’ai activé le programmation en auto pour une heure fixe de 5h01 du matin:

[2023-05-02 23:14:54][SCENARIO] -- Start : Scenario execute automatiquement sur evenement venant de : [Jardin][Centre arrosage][EtatAuto] (1).
[2023-05-02 23:14:54][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Coffret IO][Ardnbus-5][Statut]# == 1
[2023-05-02 23:14:54][SCENARIO] Evaluation de la condition : [1 == 1] = Vrai
[2023-05-02 23:14:54][SCENARIO] - Exécution du sous-élément de type [action] : then
[2023-05-02 23:14:54][SCENARIO] Suppression des blocs DANS et A programmés du scénario
[2023-05-02 23:14:54][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus5-Arrosage][D4-Off (Arro-H-Z1)]
[2023-05-02 23:14:55][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus5-Arrosage][D5-Off (Arro-H-Z2)]
[2023-05-02 23:14:56][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus1-Commun][D6-(Zone3-Off)]
[2023-05-02 23:14:57][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus5-Arrosage][D2-Off (Gout Haut)]
[2023-05-02 23:14:58][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus1-Commun][D7-(Zone5-Off)]
[2023-05-02 23:14:59][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus1-Commun][D8-(Zone6-Off)]
[2023-05-02 23:15:00][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus1-Commun][D9-(Zone7-Off)]
[2023-05-02 23:15:01][SCENARIO] Exécution d'un bloc élément : 190
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Jardin][Centre arrosage][EtatAuto]# == 0 && variable(Start_arrosage)== "Forcée"
[2023-05-02 23:15:01][SCENARIO] Evaluation de la condition : [1 == 0 && "Stop"== "Forcée"] = Faux
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [action] : else
[2023-05-02 23:15:01][SCENARIO] Exécution d'un bloc élément : 35
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Jardin][Centre arrosage][EtatAuto]# == 0
[2023-05-02 23:15:01][SCENARIO] Evaluation de la condition : [1 == 0] = Faux
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [action] : else
[2023-05-02 23:15:01][SCENARIO] Exécution d'un bloc élément : 196
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Jardin][Centre arrosage][EtatAuto]# == 2
[2023-05-02 23:15:01][SCENARIO] Evaluation de la condition : [1 == 2] = Faux
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [action] : else
[2023-05-02 23:15:01][SCENARIO] Exécution d'un bloc élément : 188
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [condition] : if  #[Jardin][Centre arrosage][EtatAuto]# == 1
[2023-05-02 23:15:01][SCENARIO] Evaluation de la condition : [1 == 1] = Vrai
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [action] : then
[2023-05-02 23:15:01][SCENARIO] Affectation de la variable H_arrosage => 501 = 501
[2023-05-02 23:15:01][SCENARIO] Exécution d'un bloc élément : 48
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [action] : action
[2023-05-02 23:15:01][SCENARIO] Exécution de la commande  [Mes appareils][Iphone FAB][Notification] avec comme option(s) : {"background":"0","title":"Lisa","message":"L'arrosage est activ\u00e9 pour 501"}
[2023-05-02 23:15:01][SCENARIO] Exécution d'un bloc élément : 49
[2023-05-02 23:15:01][SCENARIO] - Exécution du sous-élément de type [condition] : at variable(H_arrosage)
[2023-05-02 23:15:01][SCENARIO] Evaluation de la condition : [501] = 501
[2023-05-02 23:15:01][SCENARIO] Tâche :  49  programmée à :  2023-05-03 05:01:00
[2023-05-02 23:15:01][SCENARIO] Fin correcte du scénario
------------------------------------
[2023-05-03 05:01:19][SCENARIO] ************Lancement sous tâche**************
[2023-05-03 05:01:19][SCENARIO] - Exécution du sous-élément de type [action] : do
[2023-05-03 05:01:20][SCENARIO] Affectation de la variable Start_arrosage => Prog = Prog
[2023-05-03 05:01:21][SCENARIO] Lancement du scénario :  Zone1 options : []
[2023-05-03 05:01:24][SCENARIO] Lancement du scénario :  Zone2 options : []
[2023-05-03 05:01:25][SCENARIO] Lancement du scénario :  Zone3 options : []
[2023-05-03 05:01:27][SCENARIO] Lancement du scénario :  Goutteur Haut options : []
[2023-05-03 05:01:30][SCENARIO] Lancement du scénario :  Zone 5 options : []
[2023-05-03 05:01:33][SCENARIO] Lancement du scénario :  Zone 6 options : []
[2023-05-03 05:01:40][SCENARIO] Lancement du scénario :  Zone 7 options : []
[2023-05-03 05:01:42][SCENARIO] Affectation de la variable Start_arrosage => 0 = 0
[2023-05-03 05:01:42][SCENARIO] ************FIN sous tâche**************
------------------------------------

Et le log d’un sous scénario :

[2023-05-03 05:01:25][SCENARIO] Lancement du scénario en mode synchrone 
[2023-05-03 05:01:25][SCENARIO] -- Start : Lancement provoqué par le scénario  :  [ARROSAGE][Jardin][Arrosage].
[2023-05-03 05:01:25][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Jardin][Centre arrosage][Prog Z3]# == 2
[2023-05-03 05:01:25][SCENARIO] Evaluation de la condition : [1 == 2] = Faux
[2023-05-03 05:01:25][SCENARIO] - Exécution du sous-élément de type [action] : else
[2023-05-03 05:01:25][SCENARIO] Exécution d'un bloc élément : 221
[2023-05-03 05:01:25][SCENARIO] - Exécution du sous-élément de type [condition] : if #[Jardin][Centre arrosage][Prog Z3]# == '1'
[2023-05-03 05:01:25][SCENARIO] Evaluation de la condition : [1 == '1'] = Vrai
[2023-05-03 05:01:25][SCENARIO] - Exécution du sous-élément de type [action] : then
[2023-05-03 05:01:25][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus1-Commun][D6-(Zone3-Off)]
[2023-05-03 05:01:26][SCENARIO] Exécution de la commande  [Mes appareils][Iphone FAB][Notification] avec comme option(s) : {"background":"0","title":"Lisa","message":"Zone 3 en mode auto"}
[2023-05-03 05:01:26][SCENARIO] - Exécution du sous-élément de type [condition] : if variable(Start_arrosage) = "Prog" && #[Jardin][Centre arrosage][Prog Z3]# == 1
[2023-05-03 05:01:26][SCENARIO] Evaluation de la condition : ["Prog" = "Prog" && 1 == 1] = Vrai
[2023-05-03 05:01:26][SCENARIO] - Exécution du sous-élément de type [action] : then
[2023-05-03 05:01:26][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus1-Commun][D6-(Zone3-On)]
[2023-05-03 05:01:27][SCENARIO] Exécution d'un bloc élément : 224
[2023-05-03 05:01:27][SCENARIO] - Exécution du sous-élément de type [condition] : in #[Jardin][Centre arrosage][TempoZ3]#
[2023-05-03 05:01:27][SCENARIO] Evaluation de la condition : [10] = 10
[2023-05-03 05:01:27][SCENARIO] Tâche :  224  programmée à :  2023-05-03 05:11:27 (+ 10 min)
[2023-05-03 05:01:27][SCENARIO] Exécution d'un bloc élément : 225
[2023-05-03 05:01:27][SCENARIO] Fin correcte du scénario
------------------------------------
[2023-05-03 05:11:12][SCENARIO] ************Lancement sous tâche**************
[2023-05-03 05:11:27][SCENARIO] - Exécution du sous-élément de type [action] : do
[2023-05-03 05:11:27][SCENARIO] Exécution de la commande  [Coffret IO][ArdBus1-Commun][D6-(Zone3-Off)]
[2023-05-03 05:11:28][SCENARIO] Exécution de la commande  [Mes appareils][Iphone FAB][Notification] avec comme option(s) : {"background":"0","title":"Lisa","message":"Cycle Zone3 effectu\u00e9"}
[2023-05-03 05:11:28][SCENARIO] Exécution de la commande  [Jardin][Centre arrosage][ProgZ3 On] avec comme option(s) : {"background":"0","slider":1}
[2023-05-03 05:11:29][SCENARIO] ************FIN sous tâche**************

Jusqu’à maintenant je fonctionner avec des « DANS » mais le cumul des timers ne fonctionné plus. Du genre 5h01 + (7 x 10min) . 501 à 571 Jeedom ne l’interprète pas en 6h11… 611