Fredmas Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 (modifié) il y a 54 minutes, 971jmd a dit : avant tout chose merci pour ton aide si tu est debutant bin tu debut super bien De rien, j'essaie d'aider comme on m'aide également il y a 54 minutes, 971jmd a dit : le code complet: _Rebischung _IR.fqa Désolé, mais la flemme de télécharger ton fichier, l'insérer, etc. il y a 54 minutes, 971jmd a dit : je comprend certaine chose mai pas tout Du coup je te remets le bout de code précédent avec pleins de commentaires, et en utilisant les noms de tes fonctions ON24 et OFF qui semblent te convenir, et en les ajoutant dans le code : function QuickApp:onInit() self:debug("onInit") timeoutClim = 0 -- creation d'une variable pour l'utilisation de la fonction setTimeout plus loin dans le code duration = 0 -- creation d'une variable pour prendre tes différentes valeurs de durée 2 ou 4 heures par exemple lors des appuis boutons end function QuickApp:buttonClim1() -- fonction utilisée par l'appui de ton bouton 2 heures duration = 2*60*1000 -- met la variable à la valeur 2 heures (la fonction setTimeout est en millisecondes d'où le calcul 2*60*1000 test() -- lancer la fonction d'application de la durée end function QuickApp:buttonClim2() -- fonction utilisée par l'appui de ton bouton 4 heures duration = 4*60*1000 -- met la variable à la valeur 4 heures (la fonction setTimeout est en millisecondes d'où le calcul 4*60*1000 test() -- lancer la fonction d'application de la durée end function test() ON24_S1_C1() -- exécution de ta fonction ON24 if timeoutClim > 0 then clearTimeout(timeoutClim) timeoutClim = 0 end -- si un time est déjà en cours on arrete le timing en cours timeoutClim = setTimeout(OFF_S1_C1, duration) -- on définit une durée équivalente à la variable "duration" venant de la fonction bouton, puis on exécute la fonction OFF après la durée écoulée end function ON24_S1_C1() print("allumage clim") -- ici ton code pour allumer la clim. D'ailleurs ton bouton ON24 devrait aussi activer cette même fonction end function OFF_S1_C1() print("arret clim") -- ici ton code pour eteindre la clim. D'ailleurs ton bouton OFF devrait aussi activer cette même fonction end C'est plus clair là ? Modifié le 14 novembre 2021 par Fredmas 1
971jmd Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 (modifié) j'ai tester avec un lampe pour voir et j'ai une erreur [14.11.2021] [12:34:29] [ AVERTISSEMENT ] [QUICKAPP416] : la classe n'a pas de fonction ON24_S1_C1 définie - action ignorée function ON24_S1_C1() print("allumage clim") fibaro.call(89, 'turnOn') -- ici ton code pour allumer la clim. D'ailleurs ton bouton ON24 aussi devrait activer cette même fonction end function OFF_S1_C1() print("arret clim") -- ici ton code pour eteindre la clim. D'ailleurs ton bouton OFF devrait activer cette même fonction fibaro.call(89, "turnOff") end Modifié le 14 novembre 2021 par 971jmd
971jmd Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 ha j'ai trouver le prob il manque: function QuickApp:OFF_S1_C1() je continue
Fredmas Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 (modifié) Bon je viens de te le refaire en essayant de me mettre à ta place dans ta config (avec une lumière à la place de ton code clim) et avec les boutons suivants : - buttonClim2 = ton bouton 2h - buttonClim4 = ton bouton 4h - ON24_S1C1 = ton bouton allume la clim24 - OFF_S1C1 = ton bouton éteint la clim function QuickApp:onInit() self:debug("onInit") timeoutClim = 0 duration = 0 end function QuickApp:buttonClim2() duration = 2*60*1000 test(self) end function QuickApp:buttonClim4() duration = 4*60*1000 test(self) end function QuickApp:ON24_S1_C1() fibaro.call(85, "turnOn") end function QuickApp:OFF_S1_C1() fibaro.call(85, "turnOff") end function test(self) self:ON24_S1_C1() if timeoutClim > 0 then clearTimeout(timeoutClim) timeoutClim = 0 end timeoutClim = setTimeout(function() self:OFF_S1_C1() end, duration) end Ca fonctionne moi. Copie colle et dis-moi Modifié le 14 novembre 2021 par Fredmas
971jmd Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 (modifié) j'ai comme erreur Unknown error occurred: handleJsonRpc [14.11.2021] [14:11:31] [TRACE] [QUICKAPP416]: UIEvent: {"elementName":"ON24_S1C1","deviceId":416,"eventType":"onReleased","values":[null]} [14.11.2021] [14:11:31] [WARNING] [QUICKAPP416]: Class does not have ON24_S1C1 function defined - action ignored Modifié le 14 novembre 2021 par 971jmd
Fredmas Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 (modifié) Tu as autre chose dans ton code ? Tu as bien copié ce que j'ai mis au dessus ? Je viens d'essayer de nouveau en copiant le code au-dessus dans un QA vierge et ça fonctionne. Modifié le 14 novembre 2021 par Fredmas
971jmd Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 j'ai trouver le prob, c'est ID de ma lampe 85, "turnOff")
Fredmas Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 ben oui ça c'est l'ID de la mienne pour l'essai
971jmd Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 (modifié) merci ça fonctionne, j'ai passer des heures sur ça que d'ire des jous Sans vouloir abuser, ça fait déjà deux semaines que je cherche à récupérer une valeur dans un API fibaro et l'afficher dans un label d'une QA Modifié le 14 novembre 2021 par 971jmd
Fredmas Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 De rien OK, je vais regarder ton lien, même si je sens que ça va être chaud pour moi
971jmd Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 j'ai tester avec deux Bouton ON et les deux s'allume mai une seul passe à OFF function QuickApp:onInit() self:debug("onInit") timeoutClim = 0 duration = 0 end ---outon 2H function QuickApp:buttonClim2() duration = 30*1000 test(self) test2(self) end ---bouton 4H function QuickApp:buttonClim4() duration = 2*60*1000 test(self) test2(self) end ---bouton ON1 function QuickApp:ON24_S1_C1() fibaro.call(353, "turnOn") end --- bouton OFF function QuickApp:OFF_S1_C1() fibaro.call(353, "turnOff") end ---------- ---bouton ON1 function QuickApp:ON24_S1_C2() fibaro.call(93, "turnOn") end --- bouton OFF function QuickApp:OFF_S1_C2() fibaro.call(93, "turnOff") end function test(self) self:ON24_S1_C1() if timeoutClim > 0 then clearTimeout(timeoutClim) timeoutClim = 0 end timeoutClim = setTimeout(function() self:OFF_S1_C1() end, duration) end function test2(self) self:ON24_S1_C2() if timeoutClim > 0 then clearTimeout(timeoutClim) timeoutClim = 0 end timeoutClim = setTimeout(function() self:OFF_S1_C2() end, duration) end
Fredmas Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 (modifié) Normal, tu as gardé une seule variable timeoutClim pour les deux Essaie avec ça en remplaçant tes ID de lampes : function QuickApp:onInit() self:debug("onInit") timeoutClim1 = 0 timeoutClim2 = 0 duration = 0 end function QuickApp:buttonClim2() duration = 10*1000 test1(self) test2(self) end function QuickApp:buttonClim4() duration = 20*1000 test1(self) test2(self) end function QuickApp:ON24_S1_C1() fibaro.call(85, "turnOn") end function QuickApp:OFF_S1_C1() fibaro.call(85, "turnOff") end function QuickApp:ON24_S1_C2() fibaro.call(87, "turnOn") end function QuickApp:OFF_S1_C2() fibaro.call(87, "turnOff") end function test1(self) self:ON24_S1_C1() if timeoutClim1 > 0 then clearTimeout(timeoutClim1) timeoutClim1 = 0 end timeoutClim1 = setTimeout(function() self:OFF_S1_C1() end, duration) end function test2(self) self:ON24_S1_C2() if timeoutClim2 > 0 then clearTimeout(timeoutClim2) timeoutClim2 = 0 end timeoutClim2 = setTimeout(function() self:OFF_S1_C2() end, duration) end Modifié le 14 novembre 2021 par Fredmas
971jmd Posté(e) le 15 novembre 2021 Signaler Posté(e) le 15 novembre 2021 Je n'étais pas loin j'ai rajouter un bouton RESET --4RESET function QuickApp:buttonReset() duration = 0 end ou --4RESET function QuickApp:buttonReset() timeoutClim1 = 0 timeoutClim2 = 0 end et le prob est que ça coupe tout
Fredmas Posté(e) le 15 novembre 2021 Auteur Signaler Posté(e) le 15 novembre 2021 (modifié) Oui Quel est l’objectif de ton bouton reset ? D’arrêter le ou les timer en cours et donc de passer à off non ? Modifié le 15 novembre 2021 par Fredmas
971jmd Posté(e) le 15 novembre 2021 Signaler Posté(e) le 15 novembre 2021 Si j'active par exemple 4 heures et que finalement je l'ai je souhaite laisser tourner sur un duré illimité.
971jmd Posté(e) le 15 novembre 2021 Signaler Posté(e) le 15 novembre 2021 (modifié) puré le debutant que je suis, je cherche comment afficher une valeur dans une label --2H function QuickApp:buttonClim2() duration = 30*1000 self:updateView("label1", "text", "2H") test1(self) test2(self) end Modifié le 15 novembre 2021 par 971jmd
971jmd Posté(e) le 15 novembre 2021 Signaler Posté(e) le 15 novembre 2021 j'ai tester ça local clim = 120 QuickApp.clima = tostring(fibaro.getValue(clim, "power")) function QuickApp:conso1() self:debug(self.clima) self:updateView("label122", "text", "Climatiseur N°1 - " ..self.clima.. " W") end et je ne vois pas le problème Après j'ai relu https://manuals.fibaro.com/home-center-3-quick-apps/ j'essaye de comprend comment fonctionne un fonction exemple : function QuickApp:conso1() conso1 est le nom OK Mais à quoi sert les parenthèses
Fredmas Posté(e) le 15 novembre 2021 Auteur Signaler Posté(e) le 15 novembre 2021 Il y a 5 heures, 971jmd a dit : Si j'active par exemple 4 heures et que finalement je l'ai je souhaite laisser tourner sur un duré illimité. Comme ça par exemple : function QuickApp:onInit() self:debug("onInit") timeoutClim1 = 0 duration = 0 end function QuickApp:H2_S1_C1() duration = 10*1000 test1(self) end function QuickApp:H4_S1_C1() duration = 20*1000 test1(self) end function QuickApp:RESET_S1_C1() duration = 0 test1(self) end function QuickApp:ON24_S1_C1() fibaro.call(85, "turnOn") end function QuickApp:OFF_S1_C1() fibaro.call(85, "turnOff") end function test1(self) self:ON24_S1_C1() if timeoutClim1 > 0 then clearTimeout(timeoutClim1) timeoutClim1 = 0 end if duration > 0 then timeoutClim1 = setTimeout(function() self:OFF_S1_C1() end, duration) end end
Fredmas Posté(e) le 15 novembre 2021 Auteur Signaler Posté(e) le 15 novembre 2021 Il y a 3 heures, 971jmd a dit : j'ai tester ça local clim = 120 QuickApp.clima = tostring(fibaro.getValue(clim, "power")) function QuickApp:conso1() self:debug(self.clima) self:updateView("label122", "text", "Climatiseur N°1 - " ..self.clima.. " W") end et je ne vois pas le problème Commence plus simple pour tester : local clim = 120 local clima = tostring(fibaro.getValue(clim, "power")) function QuickApp:conso1() self:debug(clima) self:updateView("label122", "text", "Climatiseur N°1 - "..clima.." W") end
971jmd Posté(e) le 15 novembre 2021 Signaler Posté(e) le 15 novembre 2021 salut Je pense que j'ai un BUG y'a rien à faire les label ne s'affiche pas
Fredmas Posté(e) le 15 novembre 2021 Auteur Signaler Posté(e) le 15 novembre 2021 (modifié) Avec cette syntaxe : local clim = 120 local clima = tostring(fibaro.getValue(clim, "power")) function QuickApp:conso1() self:debug(clima) self:updateView("label122", "text", "Climatiseur N°1 - "..clima.." W") end Ton self:debug(clima) s'affiche comme tu veux dans la console ? Question bête mais tu es sur de ton ID "label122" ? Modifié le 15 novembre 2021 par Fredmas
971jmd Posté(e) le 15 novembre 2021 Signaler Posté(e) le 15 novembre 2021 Justement c'est ce que j'allais te dire, le debug non plus n'affiche pas la valeur et oui le label est OK
Fredmas Posté(e) le 15 novembre 2021 Auteur Signaler Posté(e) le 15 novembre 2021 OK dans ce cas, et ne le prends pas mal stp car je ne connais pas ton niveau, es-tu conscient avec le code ci-dessus : - que la variable clima qui a l'air d'etre à la racine du QA ne sera mise à jour qu'au lancement du QA, pas une nouvelle fois plus tard ? - que ton updateView est écrit à l'intérieur d'une fonction, et donc il ne se mettra à jour que si tu appelles cette fonction via ton code ou via un bouton ? Mais pas tout seul. Ce deuxième point expliquerait pourquoi tu ne vois pas non plus le debug...
971jmd Posté(e) le 15 novembre 2021 Signaler Posté(e) le 15 novembre 2021 (modifié) Non ne t'inquiète pas je le prends pas mal, je suis là pour apprendre J'ai essayé les deux codes au tout début et toujours rien local clim = 120 local clima1 = tostring(fibaro.getValue(clim, "power")) function QuickApp:conso1() self:debug(clima) self:updateView("power1", "text", "Climatiseur N°1 - " ..self.clima.. " W") end local clim = 128 function QuickApp:conso1() QuickApp.clima = (fibaro.getValue(clim, "power")) self:debug(self.clima) self:updateView("power2", "text", "Climatiseur N°2 - " ..self.clima.. " W") end function QuickApp:onInit() self:debug("onInit") end function QuickApp:onInit() self:debug("onInit") timeoutClim1 = 0 timeoutClim2 = 0 duration = 0 end --2H function QuickApp:buttonClim2() duration = 30*1000 test1(self) test2(self) end --4H function QuickApp:buttonClim4() duration = 60*1000 test1(self) test2(self) end function QuickApp:ON24_S1_C1() fibaro.call(353, "turnOn") end function QuickApp:OFF_S1_C1() fibaro.call(353, "turnOff") end function QuickApp:ON24_S1_C2() fibaro.call(93, "turnOn") end function QuickApp:OFF_S1_C2() fibaro.call(93, "turnOff") end function test1(self) ---self:ON24_S1_C1() if timeoutClim1 > 0 then clearTimeout(timeoutClim1) timeoutClim1 = 0 end timeoutClim1 = setTimeout(function() self:OFF_S1_C1() end, duration) end function test2(self) ---self:ON24_S1_C2() if timeoutClim2 > 0 then clearTimeout(timeoutClim2) timeoutClim2 = 0 end timeoutClim2 = setTimeout(function() self:OFF_S1_C2() end, duration) end Modifié le 15 novembre 2021 par 971jmd
Fredmas Posté(e) le 15 novembre 2021 Auteur Signaler Posté(e) le 15 novembre 2021 Ho purée tous les problèmes d'un coup Alors pour revenir à ton histoire de RESET, j'ai t'ai mis un code ce matin, voir plus haut dans ce fil. Pour ton updateView, tu confirmes ce que je pense. Ta variable CLIMA ne va se mettre à jour qu'au démarrage de ton QA, mais c'est tout. Si tu veux la mettre à jour automatiquement ou à la demande, il faut mettre une autre ligne de code ailleurs, bouton, boucle, etc. Ton updateView fait partie d'une fonction que tu n'appelles pas via un bouton, une autre fonction, ou une boucle. Soit tu fais un bouton qui appelle "conso1()" quand tu le souhaites. Tout dépend ton besoin. Soit tu appelles cette fonction "conso1()" ailleurs dans ton code. Soit tu fais autrement. De plus tu as 2 fonctions onInit() dans ton QA et il te manque des fin de code comme un END dans une fonction. Mais peut-être est-ce du au copier/coller. Quand tu lances ton QA (par exemple après sa sauvegarde), ta box lit ton code puis exécute la fonction onInit, mais c'est tout. Donc elle n'exécute pas ta fonction conso1() et donc ton updateView n'est pas mis à jour. Pour t'en rendre compte, et cela ne servira à rien d'autre tu peux essayer de : REMPLACER CA : local clim = 120 local clima = tostring(fibaro.getValue(clim, "power")) function QuickApp:conso1() self:debug(clima) self:updateView("power1", "text", "Climatiseur N°1 - "..clima. local clim = 128 function QuickApp:conso1() QuickApp.clima = (fibaro.getValue(clim, "power")) self:debug(self.clima) self:updateView("power2", "text", "Climatiseur N°2 - " ..self.clima.. " W") end function QuickApp:onInit() self:debug("onInit") end function QuickApp:onInit() self:debug("onInit") timeoutClim1 = 0 timeoutClim2 = 0 duration = 0 end PAR CA : local clim = 120 local clima = tostring(fibaro.getValue(clim, "power")) function QuickApp:conso1() self:debug(clima) self:updateView("power1", "text", "Climatiseur N°1 - "..clima.." W") end function QuickApp:onInit() self:debug("onInit") timeoutClim1 = 0 timeoutClim2 = 0 duration = 0 self:conso1() end Et avec l'appel de la fonction conso1 dans le onInit, tu verras qu'au lancement de ton QA (après la sauvegarde par exemple) ton label "power1" devrait se mettre à jour. Bon ce code ne répondra pas à ton besoin, mais devrait te montrer le fonctionnement. Une fois que ça fonctionne, tu pourras commencer à déplacer les bouts de codes pour que cela fasse ce que tu veux quand tu veux, automatiquement ou avec un bouton de mise à jour.
Messages recommandés