Stop d'un bloc DANS depuis un autre scénario

Bonjour à tous,
J’ai un scénario A qui lance un DANS 60 min vérifie un capteur , puis un scénario B qui en cas de détection arrête la vérification du scénario A.
Mon problème est que dans le scénario B lorsque je fais scenarioA->stop, celui-ci est déjà arrêté et le bloc DANS est toujours programmé.
Comment puis je supprimer ce bloc programmé ?
Merci :slight_smile:
Valentin

Salut,
Avec un remove_inat probablement.

Merci pour ton idée je ne connaissais pas !
J’ai retrouvé Question sur remove_inat - Forum Communauté Jeedom sur l’ancien forum, je regarde :slight_smile: !
Merci encore

Pas de quoi.
Pense à clôturer le sujet.
Bonne fin de soirée.

Yeap bien sur.
Par contre je viens de voir que le remove_inat c’est depuis le scénario actuel, mais là je veux remove_inat d’un autre scénario, on peut quand même le faire ?

Tu relances ce scenario depuis un autre scénario en lui mettant un tag particulier et tu commences ce scenario par tester la valeur de ce tag.
Si cela correspond à un arrêt, tu lui fais un remove_inat qui arrêtera toutes les programmations de ce scenario.

Bonsoir,
Il faut être dans le bon scénario, une technique qui doit fonctionner (pas complètement testée) :
Au début de ton scénario qui a programmé ton « bloc DANS » tu ajoutes ce genre de code :

et dans l’autre scénario quelque chose comme ça :

Zut, le temps d’ecrire je me suis fait grillé…

ken@vo
Phil

2 « J'aime »

De mémoire, pour annuler des blocs A ou DANS depuis un autre scénario, il suffit de désactiver le scénario qui a lancé ces blocs.

Donc je tenterai depuis le scénario B :
désactivation scénario A
sleep 1s
activation scénario A (si besoin)

Bonjour,
Non, le remove_inat ne permet pas de retirer un bloc DANS / A d’un autre scénario mais seulement du scénario courant, ce n’est donc pas la solution :wink:

Bonjour,

j’ai fait le test complet et notre technique fonctionne visiblement (en V3 pour moi)

------------------------------------
[2020-05-10 09:53:33][SCENARIO] Start : Scenario lance manuellement.
[2020-05-10 09:53:33][SCENARIO] Exécution du sous-élément de type [condition] : if
[2020-05-10 09:53:33][SCENARIO] Evaluation de la condition : ["0" == 1] = Faux
[2020-05-10 09:53:33][SCENARIO] Exécution du sous-élément de type [action] : else
[2020-05-10 09:53:33][SCENARIO] Log : lancement scenario
[2020-05-10 09:53:33][SCENARIO] Exécution d'un bloc élément : 1024
[2020-05-10 09:53:33][SCENARIO] Exécution du sous-élément de type [condition] : in
[2020-05-10 09:53:33][SCENARIO] Evaluation de la condition : [1] = 1
[2020-05-10 09:53:33][SCENARIO] Tâche : 1024 programmée à : 2020-05-10 09:54:33 (+ 1 min)
[2020-05-10 09:53:33][SCENARIO] Fin correcte du scénario
------------------------------------
[2020-05-10 09:53:45][SCENARIO] Start : Lancement provoque par le scenario  : [test inat 2]. Tags : {"#delete_inat#":"1"}
[2020-05-10 09:53:45][SCENARIO] Exécution du sous-élément de type [condition] : if
[2020-05-10 09:53:45][SCENARIO] Evaluation de la condition : [1 == 1] = Vrai
[2020-05-10 09:53:45][SCENARIO] Exécution du sous-élément de type [action] : then
[2020-05-10 09:53:45][SCENARIO] Suppression des blocs DANS et A programmés du scénario
[2020-05-10 09:53:45][SCENARIO] Action stop
[2020-05-10 09:53:45][SCENARIO] Fin correcte du scénario

ken@vo
Phil

1 « J'aime »

bonjour @Jeandhom

Pour moi la désactivation d’un scénario ne supprime pas les taches planifiées. Si à l’heure programmée le scénario est toujours désactivé effectivement le bloc ne s’exécute pas, mais si le scénario est à nouveau activé (comme dans ton exemple) le bloc s’exécute.

ken@vo
Phil

Salut,
C’est pour ça que je je lui indiqué plus haut une procédure pour le faire

1 « J'aime »

Oui, effectivement, il faut que le scénario reste désactivé.

Sinon en attendant un remove_inat(numDuScénario) avec un bloc code.

// honteusement pompé dans /var/www/html/core/class/scenarioExpression.class.php:1540:
// $idScenario : N° du scénario qui a lancé les blocs A ou DANS

$idScenario = '119';
$crons = cron::searchClassAndFunction('scenario', 'doIn', '"scenario_id":' . $idScenario . ',');
if (is_array($crons)) {
  foreach ($crons as $cron) {
    if($cron->getPID() == getmypid()){
      continue;
    }
    $cron->remove();
  }
}
2 « J'aime »

Superbe ça :+1:

Je le garde bien au chaut

1 « J'aime »

Ça devrait même être incorporé au core

2 « J'aime »

Vous êtes au top, merci à vous !
L’idée avec le tag me paraissait très bonne mais je vais utiliser le remove_inat(numDuScénario) qui est pour moi idéal :slight_smile:
Valentin

Je plussoie.
L’idéal étant quand même de récupérer de façon plus ou moins automatique (en utilisant le nom du scénario par exemple) l’id du scénario.

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.