triossrf Posté(e) le 14 octobre 2022 Signaler Posté(e) le 14 octobre 2022 Bonjour les pros ! J'aurai besoin de vos lumières concernant une boucle, je m'explique. J'ai un Q.A qui gère un volet. Je voudrai que lorsque j'active mon profil "Présent" le volet s'ouvre. Pour cela j'écris cela: function QuickApp:OuvertureProfiles() if self:getVariable("Profiles", "Présent") then hub.call(41, 'setValue', 99) end end évidement j'ai créer ma variable Profiles dans le Q.A. Etant donné que la function tourne dans un setTimeout le contact du module s'enclenche sans arrêt tant que le profiles présent est actif (logique...). Ma question est la suivante: Est-il possible de créer une boucle "for" qui vérifierai la valeur "Présent" et qui permettrait de sortir de la boucle si la condition est bonne? Les boucles gère t'elle seulement les valeurs numériques? Merci de vos lumières en espérant avoir été claire comme de l'eau de roche. Pour info du topic: @fredokl
Lazer Posté(e) le 15 octobre 2022 Signaler Posté(e) le 15 octobre 2022 C'est pour apprendre le LUA ? Parce que ce que tu veux faire se fait nativement dans GEA avec 1 seule règle très simple. Il faut tester la valeur du volet. Donc tu ajoutes un test supplémentaire dans ta condition avec fibaro.getValue(ID, "value") < 99 Par ailleurs pourquoi t'embêter avec une variable de QA ? Tu peux directement aller lire la valeur du profil en cours avec api.get("/profiles")
triossrf Posté(e) le 16 octobre 2022 Auteur Signaler Posté(e) le 16 octobre 2022 (modifié) Effectivement c'est surtout pour apprendre le LUA mais aussi pour avoir un Q.A par volet. Ce qui me permettrait d'avoir dans mon tableau de bord une gestion individuel de chaque volet (un peu a ma sauce). Le problème c'est que si il détecte le Profil "Présent" soit par l'API ou par la variable, comme la fonction est dans une boucle, il va activer le contact a chaque fois que la boucle va valider la condition du profile "Présent". PS: J'utilise G.E.A déjà pour les autres volet ça marche du feu de dieu. Mais j'aime bien apprendre aussi Modifié le 16 octobre 2022 par triossrf
Lazer Posté(e) le 16 octobre 2022 Signaler Posté(e) le 16 octobre 2022 Il y a 3 heures, triossrf a dit : , il va activer le contact a chaque fois que la boucle va valider la condition du profile "Présent". Non puisque je t'ai suggéré d'ajouter une condition sur la valeur du volet. 1
triossrf Posté(e) le 16 octobre 2022 Auteur Signaler Posté(e) le 16 octobre 2022 Effectivement, j avais pas pensé à faire une autre condition. Et ce système de boucle ne peu pas marcher dans ce cas ?
Lazer Posté(e) le 17 octobre 2022 Signaler Posté(e) le 17 octobre 2022 Je ne comprends pas ta question ?
triossrf Posté(e) le 17 octobre 2022 Auteur Signaler Posté(e) le 17 octobre 2022 Je vais essayer de me faire comprendre mais c'est pas évident car je ne maitrise pas trop... Est-ce qu'il est possible de créer une boucle qui ressemblerait à peu prés à cela: for valeur = self:getVariable("Profiles", "Présent") do --Ou api.get("/profiles") hub.call(41, 'setValue', 99) break end Comme ça, une fois qu'il a valider la boucle, il ressort et du coup il me claque pas le contact en permanence. J'ai l'impression que les boucles fonctionne que pour les valeurs numériques alors je fais surement fausse route.
Lazer Posté(e) le 17 octobre 2022 Signaler Posté(e) le 17 octobre 2022 Euh.... j'ai l'impression que je n'arrive pas à me faire comprendre. Je vais écrire un truc en LUA à l'arrache, non testé, en me basant sur ton code initial et ma suggestion : if self:getVariable("Profiles", "Présent") and fibaro.getValue(41, "value") < 99 then hub.call(41, 'setValue', 99) end Tout simplement. 1
Messages recommandés