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
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 !
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
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
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
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
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();
}
}
Superbe ça
Je le garde bien au chaut
Ça devrait même être incorporé au core
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
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.
Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.