Question bloc scénario

Bonjour, je ne suis pas sur de bien comprendre comment utiliser le « sinon » dans les blocs ni les boucles… autant ça me parle dans le C langage mais la je vois pas apparaitre le « sinon » ou le « i++ » dans les champs de l’interface. si quelqu’un a 2 mins pour prendre le temps de m’expliquer merci!

Capture d’écran 2023-11-08 à 08.54.06

Bonjour,

il faut cliquer comme sur l’image ci-dessous pour voir le sinon
image

:joy: :joy: :joy: merci @iPapy c’était effectivement l’info qui me manquait! il me reste plus qu’a voir pour les boucles!

https://doc.jeedom.com/fr_FR/core/4.3/scenario

il n’y a rien à voir pour les boucles: juste à indiquer le nombre de fois que ca doit boucler et c’est tout

Ben non l’information ne manque pas !

image

Suffit d’être curieux sur ce que l’on a devant soit et positionner la souris…

merci @Mips mais jeedom propose de rentrer un nombre de boucle avec une commande info donc la commande info sert uniquement a définir la fin de la boucle? donc en fait si je mets la commande info d’une sonde de T°, il faut pas le comprendre en nombre de boucle mais plutôt « tant que la condition est vrai » c’est bien ça?

Oui c’est ça !

merci @anon53349806!

mais non pas du tout…

déjà même dans cette phrase il n’y a rien qui tient debout: si vous mettez une info de température il va continuer tant que la condition est vrai? mais quel condition? il n’y en a même pas!

il ne faut pas inventer n’importe quoi qui nous passe dans la tête… comment est-ce possible de comprendre ça sur base de … rien ??
Franchement ca me dépasse complétement :exploding_head:

c’est clair quand même: boucle de 1 à …
image

et c’est clairement écrit dans la doc; lisez là svp!

j’ai pris le temps de lire la documentation et ce n’est pas la peine d’être méprisant d’autant plus que @anon53349806 a compris la même chose que moi puisqu’il valide mon affirmation. d’après ce que j’ai lu sur la doc c’est clairement écrit que la boucle peut être définie par la valeur d’un capteur donc je peux décider de mettre comme condition (si je sélectionne mon capteur et <=19 pour une sonde de température par exemple) « de 1 a 19 » . Le capteur est donc définit comme la variable exactement comme en C. J’ai testé et cela fonctionne!



si je me suis trompé merci de m’éclairer.

Même si je suis reconnaissant de l’aide que vous m’apportez et de votre travail, vos connaissances « supérieures » ne vous donnent pas le droit de rabaisser les autres (a plus fortes raisons de la part d’un modérateur) , au pire ignorez les ou au mieux aidez les mais avec bienveillance, vous en sortirez grandi.

cordialement

1 « J'aime »

AH non je n’ai pas compris ca du tout

Une boucle c’est une boucle !

Vis a vis d’un capteur de température on ne fait pas de boucle c’est une ineptie

Le capteur de température remonte une valeur a tester avec un SI

Dans un système domotique bien fait, on ne boucle pas sur une information et on inerroge pas une information en permanence, on déclenche des actions quand un capteur remonte une valeur, on la teste et on décide de ce que l’on fait en fonction de cette valeur

Oui le max de la boucle peut venir d’une commande info et ne pas être écrit en dur.

Votre démonstration est caduc. Ce n’est pas parce que la boucle ne s’est pas exécutée que cela fonctionne…
Il faudrait aussi démontrer l’inverse.
en l’occurrence si la « condition » est vrai la boucle sera probablement exécutée une fois

Pourquoi?
Car « vrai » sera interprété comme 1 donc de boucle de 1 à 1

Bref tout cela n’a aucun intérêt puisque non vous ne pouvez pas faire ca.


Pour le reste je maintiens que ca nous aiderait autant que vous que vous ne cherchiez pas à interpreter plus que de raison une fonctionnalité et sa documentation.

Je ne cherche pas l’interprétation, jai pris soins de lire la doc et dans mes captures d’écran je montre une boucle (donc un « while ») qui demarre de 1 (variable i=1) et qui va jusqu’a la valeur que j’ai choisi pour le capteur, a savoir 19! Ce qui donnerait en langage C :

i=1
While (i<=19) {…

Donc tant que la valeur est comprise entre 1 et 19, la boucle continue.

Mon exemple porte justement sur la réalisation de cette condition.

J’arrête là: je vous dis que non, ca ne fonctionne pas comme ça.

vous ne voulez pas me croire, ce n’est pas grave, lisez le code, c’est dans le fichier core\class\scenarioElement.class.php ligne 194:

		} else if ($this->getType() == 'for') {
			if ($this->getSubElement('for')->getOptions('enable', 1) == 0) {
				return true;
			}
			$limits = intval($this->getSubElement('for')->execute($_scenario));
			if (!is_numeric($limits)) {
				throw new Exception(__('La condition pour une boucle doit être numérique :', __FILE__) . ' ' . $limits);
			}
			$return = false;
			for ($i = 1; $i <= $limits; $i++) {
				$return = $this->getSubElement('do')->execute($_scenario);
			}
			return $return;

Après je n’ai pas la science infuse et il m arrive de faire des erreurs ou de ne pas comprendre quelque chose du premier coup, dans ce cas si vous avez la patience de m’expliquer, j’en serais ravi et ferais mon mea-culpa si je me suis planté

Je vais étudier ça merci

Bonjour @Math82
alors,alors, les boucles reprisent plus calmement :
Quand la doc dit :

Boucle : Permet de réaliser des actions de manière répétitive de 1 jusqu’à un nombre défini (ou même la valeur d’un capteur, ou un nombre aléatoire…​)

avant de lire capteur, etc… Il faut bien mémoriser que le paramètre attendu est un NOMBRE.
Autrement dit, la boucle d’un scénario ne comporte pas de condition de sortie ou autre.
La seul information quelle attend c’est « combien de fois je vais boucler » = un nombre (entier différent de zéro évidement)
Le texte entre parenthèse veux simplement signifier (et il ne faut pas y voir plus) que ce dit « nombre » peut être aussi une entrée. Un virtuel, une commande (valeur de capteur par exemple), une variable (sous la forme « variable(le nom de la variable) »), et même un tag (sous la forme « tag(le nom de mon tag) »).

Une fois cela compris, si tu veux « casser » la boucle en cours de route / sortir de la boucle, cela n’a pas été prévu à ma connaissance ! Sorry (édit @Mips : Ou en faisant la commande Stop. ex: Si condition alors : action = stop. Mais alors tu arrètes tout le scénario, dans mon exemple ça irait très bien mais si ton scénario enchaine sur autre chose, ça coincera…)
La seul technique que j’ai trouvé c’est d’avoir une condition dans un SI qui fait que la boucle ne fait plus rien et s’enchaine très vite.

Petit scénario exemple :


Les logs :

[2023-11-09 09:08:59][SCENARIO] Start : Scenario lance manuellement.
[2023-11-09 09:08:59][SCENARIO] Exécution du sous-élément de type [action] : action
[2023-11-09 09:08:59][SCENARIO] Mise à jour du tag #NTi# => 10
[2023-11-09 09:08:59][SCENARIO] Mise à jour du tag #Ni max# => 5
[2023-11-09 09:08:59][SCENARIO] Exécution du sous-élément de type [condition] : for tag(NTi)
[2023-11-09 09:08:59][SCENARIO] Evaluation de la condition : [10] = 10
[2023-11-09 09:08:59][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:08:59][SCENARIO] Mise à jour du tag #Ni# => 1
[2023-11-09 09:08:59][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:08:59][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:08:59][SCENARIO] Evaluation de la condition : [1>5] = Faux
[2023-11-09 09:08:59][SCENARIO] Exécution du sous-élément de type [action] : else
[2023-11-09 09:08:59][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][On]
[2023-11-09 09:08:59][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:02][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][Off]
[2023-11-09 09:09:02][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:05][SCENARIO] Log : Numéro de boucle =: 1
[2023-11-09 09:09:05][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:09:05][SCENARIO] Mise à jour du tag #Ni# => 2
[2023-11-09 09:09:05][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:09:05][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:09:05][SCENARIO] Evaluation de la condition : [2>5] = Faux
[2023-11-09 09:09:05][SCENARIO] Exécution du sous-élément de type [action] : else
[2023-11-09 09:09:05][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][On]
[2023-11-09 09:09:05][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:08][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][Off]
[2023-11-09 09:09:08][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:11][SCENARIO] Log : Numéro de boucle =: 2
[2023-11-09 09:09:11][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:09:11][SCENARIO] Mise à jour du tag #Ni# => 3
[2023-11-09 09:09:11][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:09:11][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:09:11][SCENARIO] Evaluation de la condition : [3>5] = Faux
[2023-11-09 09:09:11][SCENARIO] Exécution du sous-élément de type [action] : else
[2023-11-09 09:09:11][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][On]
[2023-11-09 09:09:11][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:14][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][Off]
[2023-11-09 09:09:14][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:17][SCENARIO] Log : Numéro de boucle =: 3
[2023-11-09 09:09:17][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:09:17][SCENARIO] Mise à jour du tag #Ni# => 4
[2023-11-09 09:09:17][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:09:17][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:09:17][SCENARIO] Evaluation de la condition : [4>5] = Faux
[2023-11-09 09:09:17][SCENARIO] Exécution du sous-élément de type [action] : else
[2023-11-09 09:09:17][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][On]
[2023-11-09 09:09:17][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:20][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][Off]
[2023-11-09 09:09:21][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:24][SCENARIO] Log : Numéro de boucle =: 4
[2023-11-09 09:09:24][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:09:24][SCENARIO] Mise à jour du tag #Ni# => 5
[2023-11-09 09:09:24][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:09:24][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:09:24][SCENARIO] Evaluation de la condition : [5>5] = Faux
[2023-11-09 09:09:24][SCENARIO] Exécution du sous-élément de type [action] : else
[2023-11-09 09:09:24][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][On]
[2023-11-09 09:09:24][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:27][SCENARIO] Exécution de la commande [Chambre Henri][Grd lampe][Off]
[2023-11-09 09:09:27][SCENARIO] Pause de 3 seconde(s)
[2023-11-09 09:09:30][SCENARIO] Log : Numéro de boucle =: 5
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:09:30][SCENARIO] Mise à jour du tag #Ni# => 6
[2023-11-09 09:09:30][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:09:30][SCENARIO] Evaluation de la condition : [6>5] = Vrai
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-11-09 09:09:30][SCENARIO] Log : Numéro de boucle =: 6
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:09:30][SCENARIO] Mise à jour du tag #Ni# => 7
[2023-11-09 09:09:30][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:09:30][SCENARIO] Evaluation de la condition : [7>5] = Vrai
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-11-09 09:09:30][SCENARIO] Log : Numéro de boucle =: 7
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:09:30][SCENARIO] Mise à jour du tag #Ni# => 8
[2023-11-09 09:09:30][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:09:30][SCENARIO] Evaluation de la condition : [8>5] = Vrai
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-11-09 09:09:30][SCENARIO] Log : Numéro de boucle =: 8
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:09:30][SCENARIO] Mise à jour du tag #Ni# => 9
[2023-11-09 09:09:30][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:09:30][SCENARIO] Evaluation de la condition : [9>5] = Vrai
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-11-09 09:09:30][SCENARIO] Log : Numéro de boucle =: 9
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : do
[2023-11-09 09:09:30][SCENARIO] Mise à jour du tag #Ni# => 10
[2023-11-09 09:09:30][SCENARIO] Exécution d'un bloc élément : 4233
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [condition] : if tag(Ni)>tag(Ni max)
[2023-11-09 09:09:30][SCENARIO] Evaluation de la condition : [10>5] = Vrai
[2023-11-09 09:09:30][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-11-09 09:09:30][SCENARIO] Log : Numéro de boucle =: 10
[2023-11-09 09:09:30][SCENARIO] Fin correcte du scénario
------------------------------------

(en passant la souris sur les logs, tu peux les faire défiler)
On voit qu’a partir de 9 h 9 et 30 secondes les 4 dernières boucles s’effectuent « instantanément ».

PS @Furaxworld
J’adore définitivement ton style !

Non, non ce n’est pas ironique. Je vois que dame sagesse a pas mal travaillé ces derniers temps.
Amclt. Henri. (qui en profite surtout pour te saluer)

PS @Mips / @anon53349806 : Vous devriez vous rapprocher de « PlusVraimentFurax », il parait qu’il donne des cours de Zen…
:rofl: :sweat_smile:
Je m’excuse d’avance, mais il y a des jours comme ça où l’on est d’excellente humeur, et je sais pas pourquoi, chez moi, ça me rends un brin taquin. :face_with_hand_over_mouth: :thinking:
Je vous salue également.

PS @Math82 : Pour info @Mips et @anon53349806 ont clairement leurs styles (et je ne te dis pas pour @Furaxworld si on remonte un peu le temps). Un peu déroutant au début (je les ai pas mal :zipper_mouth_face: également à mes débuts) mais tu verras qu’ils sont ultra compétants (tu n’en doutais pas) et surtout toujours volontaire pour aider même quand le problème est difficile et long à résoudre. Ils ont un grand défaut, qui fait leurs force : Une logique en béton armé style blockhaus, bardé d’un sens du « on ne fait pas les choses à moitié » (grande qualité de nos jours. J’ai grandi avec « si c’est pour faire du Ni fait, ni à faire, reste couché » donc ça me parle). Qui fait que pour le commun des mortels, parfois on habite une planète qu’ils ne comprennent pas …
Bref, ne te fais pas trop vite un avis négatif, ce sont de super gars qui… juste habitent une planète qui peut nous paraitre lointaine :slight_smile: C’est ce qui fait la force d’une communauté : nos différences.

Bonne journée à tous !

1 « J'aime »

on peut faire un stop scénario mais ca stop donc tout le scénario
sinon le test en début de boucle comme tu expliques effectivement

Bonjour,

ce n’est pas une boucle while mais une boucle for. Ce qui donne en langage C:

for (int i = 0; i <= 'valeur définie'; ++i) {...

la ‹ valeur définie › n’étant définie qu’une fois au début de la boucle for.

Cependant, j’ai l’impression que le point d’incompréhension concerne plus un problème d’algorithmie qu’un problème de code. Tu sembles vouloir faire des actions tant que la température<19, mais il faudrait nous dire ce que tu veux faire comme actions exactement (et pas comment tu veux le faire) car habituellement celà ce gère via les déclencheurs.

1 « J'aime »