Bloc scénario "Tant que"

Bonjour,

Je suis preneur d’aide pour faire des tests et me faire un retour sur une des nouvelles fonctionnalités qui va arriver, le bloc de scénario « Tant que »

Description de la fonctionnalité:

Ce bloc se comporte comme une combinaison entre le bloc BOUCLE et le bloc WAIT, mais il s’interrompt automatiquement dès que la condition définie devient fausse.

Détails de fonctionnement :

  • La première ligne du bloc permet de définir une condition (comme dans un WAIT).
  • Tant que cette condition est vraie, le contenu du bloc est exécuté.
  • L’utilisateur est libre d’ajouter les actions ou blocs nécessaires (y compris des sleep/wait si besoin).
  • Par sécurité, un sleep de 1 seconde est systématiquement appliqué à la fin afin d’éviter une boucle vide trop rapide.
  • Une seconde sécurité est intégrée : un timeout maximum de 1 heure est imposé. Même si une autre valeur est configurée, la boucle est interrompue automatiquement au-delà de 1 heure.

Plus de détails: Add "While" bloc / Ajout d'un bloc "Tant que" · Issue #3164 · jeedom/core · GitHub

Test

Pour tester, il faut:

  • un jeedom de test ! tester sur une version non-stable comporte des risques donc à ne pas faire!
  • activer la version feat/while-block dans la config jeedom
  • sauvegarder
  • faire une mise à jour du core même si rien n’est proposé (pour qu’il installe cette version)

Ensuite dans les scénario, vous pourrez tester le nouveau bloc:
image

Exemple

Un scénario qui va augmenter un slider progressivement; cela pourrait être une lampe ou le volume de la musique etc

et le log correspondant:

[2026-04-04 07:30:06][SCENARIO] -- Début : . Tags : {"#trigger#":"user","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Scénario lancé manuellement","#trigger_value#":"mips"}
[2026-04-04 07:30:06][SCENARIO] - Exécution du sous-élément de type [action] : action
[2026-04-04 07:30:06][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":5}
[2026-04-04 07:30:06][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:06][SCENARIO] Evaluation de la condition : [5 < 20] = Vrai
[2026-04-04 07:30:06][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:06][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":6}
[2026-04-04 07:30:07][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:07][SCENARIO] Evaluation de la condition : [6 < 20] = Vrai
[2026-04-04 07:30:07][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:07][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":7}
[2026-04-04 07:30:08][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:08][SCENARIO] Evaluation de la condition : [7 < 20] = Vrai
[2026-04-04 07:30:08][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:08][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":8}
[2026-04-04 07:30:09][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:09][SCENARIO] Evaluation de la condition : [8 < 20] = Vrai
[2026-04-04 07:30:09][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:09][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":9}
[2026-04-04 07:30:10][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:10][SCENARIO] Evaluation de la condition : [9 < 20] = Vrai
[2026-04-04 07:30:10][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:10][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":10}
[2026-04-04 07:30:11][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:11][SCENARIO] Evaluation de la condition : [10 < 20] = Vrai
[2026-04-04 07:30:11][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:11][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":11}
[2026-04-04 07:30:12][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:12][SCENARIO] Evaluation de la condition : [11 < 20] = Vrai
[2026-04-04 07:30:12][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:12][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":12}
[2026-04-04 07:30:13][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:13][SCENARIO] Evaluation de la condition : [12 < 20] = Vrai
[2026-04-04 07:30:13][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:13][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":13}
[2026-04-04 07:30:14][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:14][SCENARIO] Evaluation de la condition : [13 < 20] = Vrai
[2026-04-04 07:30:14][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:14][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":14}
[2026-04-04 07:30:15][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:15][SCENARIO] Evaluation de la condition : [14 < 20] = Vrai
[2026-04-04 07:30:15][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:15][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":15}
[2026-04-04 07:30:16][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:16][SCENARIO] Evaluation de la condition : [15 < 20] = Vrai
[2026-04-04 07:30:16][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:16][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":16}
[2026-04-04 07:30:17][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:17][SCENARIO] Evaluation de la condition : [16 < 20] = Vrai
[2026-04-04 07:30:17][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:17][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":17}
[2026-04-04 07:30:18][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:18][SCENARIO] Evaluation de la condition : [17 < 20] = Vrai
[2026-04-04 07:30:18][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:18][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":18}
[2026-04-04 07:30:19][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:19][SCENARIO] Evaluation de la condition : [18 < 20] = Vrai
[2026-04-04 07:30:19][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:19][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":19}
[2026-04-04 07:30:20][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:20][SCENARIO] Evaluation de la condition : [19 < 20] = Vrai
[2026-04-04 07:30:20][SCENARIO] - Exécution du sous-élément de type [action] : do
[2026-04-04 07:30:20][SCENARIO] Exécution de la commande [simulation][slider][variation] avec comme option(s) : {"background":"0","slider":20}
[2026-04-04 07:30:21][SCENARIO] - Exécution du sous-élément de type [condition] : while #[simulation][slider][Etat]# < 20
[2026-04-04 07:30:21][SCENARIO] Evaluation de la condition : [20 < 20] = Faux
[2026-04-04 07:30:21][SCENARIO] Fin correcte du scénario
9 « J'aime »

Bonjour,

Il manque des accents ?

image

ah peut-être oui, mais ce n’est pas l’objet du du changement :slight_smile:

mais merci du retour, je vais créer une autre issue pour corriger ca (et je vois que c’est aussi le cas sur « Securité » à côté de « Interactions »

1 « J'aime »

Salut,

Pour le moment j’ai juste vu un soucis avec le thème light :

J’ai fais plusieurs tests de fonctionnement, pour le moment j’ai pas vu de bugs :+1:

Tu as prévu un timeout, comme c’est le cas pour le wait ?
image
:grin:

Salut,

A priori un problème de refresh navigateur pour les couleurs?
Mes captures d’écran précédentes sont faites avec le thème light.

Bien sûr, 1h pour l’instant (comme le wait)

Bonjour Mips
Merci pour cet ajout

Question (je n’ai pas encore testé, je suis en déplacement) :
Est ce prévu par exemple :
Tant que
variable différente de A
Faire
Chaque 5 minute un ask ? Ou dans 5 min un ask ?

En gros : quel délai s’applique pour la réitération de l’action faire ?

Merci

Bonjour,

Hier, lors de mes 1ers tests, je n’ai rien vu vu d’anormal mais j’ai eu un doute. il faut dire que c’était des tests sur 1 minute.
Ce matin, j’ai un test en cours lancé à 06h50, il est actuellement 07h17 :


Je que je peux constater pour le moment, c’est qu’au lancement de ce scénario, il n’y a absolument rien dans les logs.
Pas de "Scénario lancé manuellement" habituellement présent, ni de "Tâche : xxx programmée à : xxx".

Si mes doutes de départ se confirment, le log se remplira en fin de scénario.

J’éditerai mon message en fin de d’exécution. Ce qui devrait aussi correspondre à un timeout vu qu’il aura duré plus d’une heure.

Salut,

Je pense que tes questions sont répondues dans la description de la fonction dans l’issue github mais j’ai recopié celle-ci dans le premier post plus haut pour plus de lisibilité sur mobile.

Donc il n’est rien « prévu » de particulier, c’est un bloc de scénario comme tous les autres et tu peux combiner avec celui que tu veux.
Dans l’execution du bloc tu peux ajouter des ask ou des wait ou des sleep etc
Dans une boucle (la boucle existante ou ce nouveau bloc) on n’ajoute généralement pas de bloc DANS ou A car leur programmation vont s’écraser à chaque itération.

Ceci dit, les recommandations habituelles pour un scénario s’appliquent: oui la boucle permet 1h mais perso je pense que si on n’arrive à 1h, c’est qu’on a pas conçu le scénario de la manière la plus optimale et qu’il faut probablement revoir l’approche.

Le bloc TANT QUE n’est pas un déclencheur d’action, pour faire ça on configure nos déclencheurs sur le scénario et les actions correspondantes.

1 « J'aime »

Sous jeedom, le log d’un scénario s’écrit par défaut à la fin de l’exécution sauf si on choisi « Temps réel »; le fonctionnement de base n’a pas été modifié.
image

Cf. l’exemple de log que j’ai donné au-dessus, tu verras le « Scénario lancé manuellement »

Dans ton log, tu auras les programmations de tes bloc DANS mais celles-ci se seront toutes annulées l’une par la suivante.
Et à 8h tu verras le log du bloc DANS avec 800
Tu ne verras aucun autre log de #time#

J’ai modifié mon exemple dans le premier post pour avoir quelque chose de plus concret.

J’ai lancé un autre test plus court et sans le DANS pour tenir compte de ta remarque plus haut.
J’ai bien l’intégralité des logs en fin d’exécution.
J’ai bien les logs courants si Temps réel activé.

Donc, tout va bien :slight_smile:

par contre le bloc est aussi « transparent » chez toi
j’ai du louper un truc ou alors c’est juste un refresh de cache de navigateur
y a p-e un « cache buster » pour le css que j’ai oublié de définir

=> ctrl+f5 permet d’avoir la couleur?

Après ctrl+F5

1 « J'aime »

Bonjour,
Peu de retour à ta demande. :frowning:
Dans quelle direction souhaites tu orienter les tests ?

J’avais trouvé 2 petits bugs en écrivant le post

  • le choix du bloc manquait dans ce menu
    image
  • le texte de hint manquait
    image

et avec ton retour et celui de Bison j’ai modifié pour forcer le refresh du colors.css, ca évitera 100 posts identique sur community au moment de la sortie donc c’est tout bénef

donc globalement, c’est positif, 3 points ont été identifiés, ce post n’a pas servi à rien.

concernant la fonctionnalité, forcément j’ai déjà testé autant que possible et cela utilise les fonctions du core existantes (par exemple pour le test) donc en principe il ne devrait pas y avoir de surprise mais on n’est jamais à l’abri d’un cas limite non-identifié donc en multipliant le nombre de cerveau (plus ou moins tordu), cela augmente les « chances » de tomber sur un problème.

S’il n’y a plus de retour… ca partira dans une des prochaines versions du core.

2 « J'aime »