Aller au contenu

Questions de débutant en Quick Apps sur HC3


Messages recommandés

Posté(e) (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 :74:

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. :D

 

 

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à ? :D

 

Modifié par Fredmas
  • Like 1
Posté(e) (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é par 971jmd
Posté(e) (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é par Fredmas
Posté(e) (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é par 971jmd
Posté(e) (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é par Fredmas
Posté(e) (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 :P

 

 

Modifié par 971jmd
Posté(e)

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

 

Posté(e) (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é par Fredmas
Posté(e)

Je n'étais pas loin :P

 

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 
 
 
Posté(e) (modifié)

Oui :P

 

Quel est l’objectif de ton bouton reset ?

D’arrêter le ou les timer en cours et donc de passer à off non ?

Modifié par Fredmas
Posté(e) (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é par 971jmd
Posté(e)

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

 

 

 

Posté(e)

 

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

 

Posté(e)
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

 

Posté(e) (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é par Fredmas
Posté(e)

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...

Posté(e) (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é par 971jmd
Posté(e)

Ho purée tous les problèmes d'un coup :D

 

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 :blink: 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.

 

×
×
  • Créer...