Forum Lifedomus

Version complète : Variable booléen pour sortir d'une boucle "While" [Résolu]
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour à Tous,

J'ai une question :

Je travaille sur un programme de "sun traking" pour mon installation. L'idée est qu'au long de la journée, Lifedomus ferme les volets des fenêtres exposées au soleil. N'ayant pour le moment pas de de station météo, je me sert de l'azimut.

Donc lorsque le soleil dépasse un certain azimut, l'automate se déclenche puis il entre dans un "while" qui contient comme condition de sortie le dépassement de l'azimut après lequel la fenêtre n'est plus exposée.

Seulement, comme je ne me base pas sur les données d'une station météo, j'ai besoin de pouvoir désactiver le sun tracking a tout moment (les jours où il n'y a pas de soleil par exemple...). J'ai donc créer une variable Booléen liée à un widget dans DS pour le désactiver. le widget change bien la variable et empêche le lancement du scénario s'il elle est sur faux, pas de problème de ce coté là.

En revanche, lorsque l’automate est lancé et que la boucle "While" tourne, je ne parviens pas à faire en sorte que la désactivation du sun tracking, donc le passage de la variable de vrai à faux, stop la boucle et mette fin à l'automate ...

Avez vous des suggestions ?
Je ne vais pas répondre à ta question, mais juste un avertissement concernant l'azimut donné par la LD, il est FAUX à cause des changements heure d'été/hiver.
Bonjour,
Je suis étonné que la condition d'exécution de la boucle ne fonctionne pas (mais je n'ai plus d'automate avec boucle while pour vérifier) mais une solution alternative consiste à lancer un second automate qui stoppe l’exécution du premier lorsque que le sun tracking est à off.
(05-30-2020, 12:41 PM)jdrenne a écrit : [ -> ]Je ne vais pas répondre à ta question, mais juste un avertissement concernant l'azimut donné par la LD, il est FAUX à cause des changements heure d'été/hiver.

Ah ... ! Ca m'intéresse d'en savoir un peu plus ! Ca veut dire quoi ? qu'il faut décaler l'Azimut lorsque l'heure change ?

(05-30-2020, 02:12 PM)Ives a écrit : [ -> ]une solution alternative consiste à lancer un second automate qui stoppe l’exécution du premier lorsque que le sun tracking est à off.

Merci pour cette piste. Mais comment on stop un automate dans la syntaxe ?


Merci pour vos réponses Amen-1fb6
Exemple avec un automate
Situation initiale : les deux vantaux de la fenêtre sont fermés
Ouverture du vantail droit --> clignotement de la lampe "Bureau-Meuble" jusqu'à l'ouverture du vantail gauche (sans oublier l'extinction de la lampe en sortie de boucle car l'ouverture du vantail peut éventuellement se produire lorsque la lampe est allumée et, dans ce cas, elle resterait allumée)
[Image: 200531103323989396.jpg]

Exemple avec deux automates
Le 1er automate est iidentique
Le second automate provoque l'arrêt de l'exécution de l'automate 1 lorsque la lumière Bureau-Spots bureau est allumée
[Image: 200531104512613875.jpg]
Merci Ives pour ces explication.

Avec les actuateurs comme dans ton exemple ca semble fonctionner. Mais avec ma variable il ne veut rien savoir ...

Voici ce que j'ai mis comme conditions de sortie du While:

[attachment=2688]

Pour l'azimut pas de pb, mais pour la variable, aucun effet
(05-31-2020, 03:54 PM)MaxLightyear a écrit : [ -> ]Merci Ives pour ces explication.

Avec les actuateurs comme dans ton exemple ca semble fonctionner. Mais avec ma variable il ne veut rien savoir ...

Voici ce que j'ai mis comme conditions de sortie du While:



Pour l'azimut pas de pb, mais pour la variable, aucun effet

Essaye en inversant la logique : suntracking=vrai AND azimuth compris entre X et Y.
De cette manière si l'une des 2 conditions est à faux tu sortiras de la boucle.
(06-01-2020, 12:57 PM)Pollux06 a écrit : [ -> ]
(05-31-2020, 03:54 PM)MaxLightyear a écrit : [ -> ]Merci Ives pour ces explication.

Avec les actuateurs comme dans ton exemple ca semble fonctionner. Mais avec ma variable il ne veut rien savoir ...

Voici ce que j'ai mis comme conditions de sortie du While:



Pour l'azimut pas de pb, mais pour la variable, aucun effet

Essaye en inversant la logique : suntracking=vrai AND azimuth compris entre X et Y.
De cette manière si l'une des 2 conditions est à faux tu sortiras de la boucle.

Bingo ! Yahoo-1ea1

C'est bien çà ! Ca marche comme je voulais.

Merci à tous pour votre aide, avec mention spéciale pour Pollux Eek-1e6fb