Bloc Boucle | Exit si condition valide

Bonjour,

J’ai un scenario contenant des blocs « Boucle » (DE 1 à n fois) voir exemple ci-après >>
(C’est une « parade » sur un pb de retour d’état d’un module z-wave)

Je souhaiterais savoir si il y a un moyen de sortir de la boucle si la conditon est valide , pour éviter de faire toutes les itérations.

Merci à vous !

Bonjour,
En gros ce que tu souhaites c’est l’implantation d’un break.
Sujet déjà abordé, non, ça n’existe pas.
Un moyen de contourner cette absence est de passer par un bloc code puisqu’en php ça existe.

1 « J'aime »

Bonjour,

Un équivalent peut être de stopper le scénario sur condition valide.

Edit : ne fonctionne pas finalement

1 « J'aime »

A condition que ta volonté soit de sortir du scénario et pas d’exécuter autre chose à la suite de la boucle.

3 « J'aime »

Merci pour vos retours (@mich0111 ; @Madcow) . Je ne peux pas stopper ce scénario car j’ai d’autres blocs code qui succèdent.

Donc solution bloc Code php , il faut que je cherche un exemple car pas vraiment coutumier de ce code… :woozy_face:

Ou alors extraire ce bloc BOUCLE dans un scénario dédié qui sera lancé par ton scénario existant :wink:

ou laisser ta boucle tourner 4 fois … en fait on s’en fiche :wink:
rajoute juste un SI en début de boucle ainsi si déjà allumé tu skip le reste et tu vas boucler bcp plus vite sans attendre et sans envoyer 4 fois le ON

2 « J'aime »

Très bons conseils ! Excellent ! c’est une solution.

Si quelqu’un a tout de même un exemple en bloc code … Je prends aussi pour le côté « apprentissage » en php.

En googlisant php do break, tu devrais trouver plein d’exemples.

2 « J'aime »

do while est bien aussi.

Un exemple de code.

do {
  sleep(1);
  $networkState = openzwave::callOpenzwave('/network?type=info&info=getStatus');
  $queueSize=$networkState['result']['outgoingSendQueue'];
} while ($queueSize > 2);

Alors voilà, on dit qu’on aide sans donner la solution et toi tu balances.
:full_moon_with_face:

Bonjour,

J’ai créer un scenario « esclave » avec les blocs exclusivement pour gérer le M/A que j’active dans le scenario maitre avec les tags « on » et « off »
Pour éviter les itérations je souhaite arrêter ce scenario sur conditions valides (Boucle SI)


Ce scenario esclave semble s’exécuter en partie mais se met en ERREUR avec aucune info dans le log.

Une idée ?
Merci Bon WE

Bonjour,
en ajoutant un bloc action avec log pour voir si cela peut vous aider à voir d’où cela peut venir.

@mich0111
ya vraiment des gens qui demandent des choses bizarres ! :wink: :innocent:


@Dadou

plutôt que


fais simplement une action stop

1 « J'aime »

Oui mais ce n’est pas pareil.
Si tu as des choses à faire après ta boucle, avec un stop ça ne pourra pas s’exécuter sauf à encapsuler cette boucle dans un autre scénario.

1 « J'aime »

C est visiblement ce qu il fait dans son dernier post de « scenario esclave » ! :wink:

1 « J'aime »

A vrai dire, je n’ai plus suivi les évolutions de ce sujet.
La question initiale étant « peut-on faire des break au sein d’une boucle ? » en y ayant répondu, j’imaginais que le sujet devait être clôturé.
Manifestement, ce n’est pas le cas.

Je découvre de mon côté une fonction. C’est moi qui lui avait conseillé de faire un scénario stop.
Merci !

Par contre contrairement à la réponse ci-dessous un scénario /stop à la place d’un stop fonctionne (sur un scénario en multi lancement je précise au cas où ça aurait un impact) …

1 « J'aime »

tu peux le faire depuis un autre scénario, mais pas sur le scénario actuellement en cours lui-même !

c’est pour ca que j’ai proposé à @Dadou de modifier le dernier scénario présenté en remplaçant l’appel au même scénario -> arrêter, juste par l’action stop

le statut Erreur devrait disparaitre avec cette modif :wink:

Non non chez moi ça marche dans scénario pour un ask. Mais en multi lancement.
C’est un scénario tout neuf donc j’avais fait des tests spécifiques.

Mais je joue pas avec le feu j’ai donc remplacé avec un stop :sweat_smile:

Dernière ligne (le scénario s’appelle « Ask Fermeture Porte Garage_En_Modif_2portes ») :

[2021-01-21 13:49:53][SCENARIO] Start : Lancement provoque par le scenario  : [Aucun][Aucun][TEST NOTIF GARAGE]. Tags : {"#porte_garage_ouverte#":"droite"}
[2021-01-21 13:49:53][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-01-21 13:49:53][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-01-21 13:49:53][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-01-21 13:49:53][SCENARIO] Evaluation de la condition : [0 == 0] = Vrai
[2021-01-21 13:49:53][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-01-21 13:49:53][SCENARIO] Changement de [Technique][Variables][Ask_En_cours] à 1
[2021-01-21 13:49:53][SCENARIO] Exécution d'un bloc élément : 1003
[2021-01-21 13:49:53][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-01-21 13:49:53][SCENARIO] Evaluation de la condition : ["droite" == "droite"] = Vrai
[2021-01-21 13:49:53][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-01-21 13:49:53][SCENARIO] Changement de [Technique][Variables][Ask_En_cours] à 1
[2021-01-21 13:49:53][SCENARIO] Demande {"title":"La porte <b>droite du garage<\/b> est ouverte alors qu'il est tard. Voulez-vous la refermer ? OUI\/NON\/REDEMANDE","message":"La porte <b>droite du garage<\/b> est ouverte alors qu'il est tard. Voulez-vous la refermer ? OUI\/NON\/REDEMANDE","answer":["OUI","NON","REDEMANDE"],"timeout":"600","variable":"r\u00e9ponse_porte_garage"}
[2021-01-21 13:50:04][SCENARIO] Start : Lancement provoque par le scenario  : [Aucun][Aucun][TEST NOTIF GARAGE]. Tags : {"#porte_garage_ouverte#":"gauche"}
[2021-01-21 13:50:04][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-01-21 13:50:04][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-01-21 13:50:04][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-01-21 13:50:04][SCENARIO] Evaluation de la condition : [1 == 0] = Faux
[2021-01-21 13:50:04][SCENARIO] Exécution du sous-élément de type [action] : else
[2021-01-21 13:50:04][SCENARIO] Exécution d'un bloc élément : 1005
[2021-01-21 13:50:04][SCENARIO] Exécution du sous-élément de type [condition] : in
[2021-01-21 13:50:04][SCENARIO] Evaluation de la condition : [1] = 1
[2021-01-21 13:50:04][SCENARIO] Tâche : 1005 programmée à : 2021-01-21 13:51:04 (+ 1 min)
[2021-01-21 13:50:04][SCENARIO] Arrêt forcé du scénario : Ask Fermeture Porte Garage_En_Modif_2portes
[2021-01-21 13:50:29][SCENARIO] Réponse OUI

Bonjour !
Merci pour vos retours ! La solution a été donnée.

Je résume à partir de mon exemple :

  • J’ai créé un scenario « appelé » (Esclave) gérant uniquement les Cdes de M/A (Déclanchées sur Tags depuis le scenario « appelant ») contentant les boucles De (1 à N). Sur conditions valides , on utilise Stop.La commande Action : scenario | Nom du scenario | Arrêter ne fonctionne pas !

  • Une autre solution consiste à créer un bloc code php est utilisé la commande « Break »
    Merci à vous tous pour votre aide. A très bientôt ! :wink:

1 « J'aime »