couillerot Posté(e) le 24 février 2021 Signaler Posté(e) le 24 février 2021 (modifié) Merci pour ce QA ! petit soucis, j'essaie de rajouter une température de consigne (via 2 boutons sup) mais je n'arrive pas à faire du +1 ou -1 à ma variable globale voici mon petit bout de code pour ajouter +1 à ma variable globale "Consigne_Bureau" -- Consigne +1°c function QuickApp:consigneplusun(event) local ConsigneBureau = fibaro.setGlobalVariable("Consigne_Bureau", fibaro.getGlobalVariable("Consigne_Bureau") + 1) self:updateView("labelConsigne", "text", "La Consigne de chauffage du Bureau est de ".. tostring(ConsigneBureau) .." C°") self:debug("Consigne +1") self:onInit() end Stef Modifié le 24 février 2021 par couillerot
jjacques68 Posté(e) le 25 février 2021 Signaler Posté(e) le 25 février 2021 (modifié) il me semble que les données dans les VG sont de type string et non de type number. il faut ajouter un tonumber(): local ConsigneBureau = tonumber(fibaro.getGlobalVariable("Consigne_Bureau")) + 1 fibaro.setGlobalVariable("Consigne_Bureau", ConsigneBureau) Modifié le 25 février 2021 par jjacques68
couillerot Posté(e) le 26 février 2021 Signaler Posté(e) le 26 février 2021 merci , je n'avais pas reçu la notif !!! Stef
couillerot Posté(e) le 26 février 2021 Signaler Posté(e) le 26 février 2021 marche pô... il me renvoi une valeur de 0. ...faut que je trouve !!! Stef
couillerot Posté(e) le 26 février 2021 Signaler Posté(e) le 26 février 2021 c'est comme s'il n'arrivait pas à récupérer la variable ! Pourtant, elle est bien présente dans le panneau des variables globales... Fibaro a t-il mis en place une récap de toute les syntaxes et leurs significations ? Stef
Lazer Posté(e) le 26 février 2021 Signaler Posté(e) le 26 février 2021 Je n'aime pas du tout la fonction proposée par Fibaro, qui renvoie une valeur vide même si la variable n'existe pas, alors qu'elle devrait renvoyer nil, ça serait plus conforme aux standards du LUA. Du coup on ne sais pas si la variable n'existe pas, ou si elle contient une chaine vide. Tu peux essayer de débugguer le truc ainsi pour avancer : local ConsigneBureau = fibaro.getGlobalVariable("Consigne_Bureau") self:debug(type(ConsigneBureau)) self:debug(ConsigneBureau) Attention aussi aux copiers/colller via le forum, j'ai remarqué que des caractères invisibles étaient insérés dans le code.... Le mieux est de retaper le texte et de copier/coller le nom de la variable directement depuis la HC3. 1
couillerot Posté(e) le 26 février 2021 Signaler Posté(e) le 26 février 2021 merci Lazer systématiquement je copie/colle le code sur Notepad++ pour éviter justement ces caractères "invisibles" (par contre je ne sais pas si c'est suffisant ?) et plus lisible (car je suis vieux!). Stef
Lazer Posté(e) le 26 février 2021 Signaler Posté(e) le 26 février 2021 Non malheureusement Notepad++ se fait piéger. Je n'ai pas encore compris pourquoi ces caractères invisibles apparaissent sur le forum. Là si par exemple je copie le code de @jjacques68, les "mauvais" caractères invisibles sont bien présents (visibles par des points rouges), on s'en rend compte si par exemple on colle les lignes dans la fenêtre de code du forum lui-même : Mais si je colle ce même texte dans Notepad++, les caractères ne se verront pas (et ça ne fonctionnera pas) : Il y en a aussi qui apparaissent pour ton propre code : D'ailleurs, appeler self:onInit() dans ton code n'a pas de sens, ça doit probablement être une erreur de ta part. 1
jjacques68 Posté(e) le 26 février 2021 Signaler Posté(e) le 26 février 2021 @couillerot, tu ne t'embrouilles pas avec le nom des variables locales et globales ?
couillerot Posté(e) le 26 février 2021 Signaler Posté(e) le 26 février 2021 Merci Laszer et jjacques68 ! je vais revoir tout ça à tête reposée (et ne plus me faire piéger par Notepad !) Stef
couillerot Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 (modifié) j'espère ne pas trop polluer le post mais voici le code pour ce QA (je sais que c'est ultra simple mais je veux vraiment comprendre et pouvoir concevoir à l'avenir quelques QA simplissimes, sans atteindre le niveau de beaucoup...) J'ai donc créé 1 variable globale standard "Consigne_Bureau" et 2 autres énumérées : "Mode_Bureau" et "Etat_Bureau" (dans le tableau Variables / Général) function QuickApp:onInit() self:debug("onInit") __TAG = "QA_"..plugin.mainDeviceId.."Chauffage Bureau" local ConsigneBureau = fibaro.getGlobalVariable("Consigne_Bureau") local ModeBureau = fibaro.getGlobalVariable("Mode_Bureau") local EtatBureau = fibaro.getGlobalVariable("Etat_Bureau") local tempBureau = fibaro.getValue(41, "value") self:updateView("labelMode", "text", "Le chauffage du Bureau est en mode ".. ModeBureau) self:updateView("labelEtat", "text", "Le Chauffage du Bureau est en ".. EtatBureau) self:updateView("labelConsigne", "text", "La Consigne de chauffage du Bureau est de ".. ConsigneBureau .." °C") self:updateView("labelTemp", "text", "La température du Bureau est de ".. tempBureau .." °C") end -- Consigne -1°c function QuickApp:btn1OnR(event) local ConsigneBureau = tonumber(fibaro.getGlobalVariable("Consigne_Bureau")) - 1 fibaro.setGlobalVariable("Consigne_Bureau", ConsigneBureau) self:debug("Consigne -1") --self:onInit() end -- Consigne +1°c function QuickApp:btn2OnR(event) local ConsigneBureau = tonumber(fibaro.getGlobalVariable("Consigne_Bureau")) + 1 fibaro.setGlobalVariable("Consigne_Bureau", ConsigneBureau) self:debug("Consigne +1") --self:onInit() end function QuickApp:button2_1_on(event) fibaro.setGlobalVariable("Etat_Bureau", "AUTOMATIQUE") self:debug("Chauffage AUTO") self:onInit() end function QuickApp:button2_on(event) fibaro.setGlobalVariable("Etat_Bureau", "MANUEL") self:debug("Chauffage MANUEL") self:onInit() end -- Mode Confort function QuickApp:btnConfortOnR(event) fibaro.call(112, "turnOff") fibaro.call(114, "turnOff") fibaro.setGlobalVariable("Mode_Bureau", "CONFORT") self:onInit() end -- Mode ECO function QuickApp:btnEcoOnR(event) fibaro.call(112, "turnOn") fibaro.call(114, "turnOn") fibaro.setGlobalVariable("Mode_Bureau", "ECO") self:onInit() end -- Mode Hors Gel function QuickApp:btnHGOnR(event) fibaro.call(112, "turnOn") fibaro.call(114, "turnOff") fibaro.setGlobalVariable("Mode_Bureau", "HORS-GEL") self:onInit() end -- Mode STOP function QuickApp:btnStopOnR(event) fibaro.call(112, "turnOff") fibaro.call(114, "turnOn") fibaro.setGlobalVariable("Mode_Bureau", "STOP") self:onInit() end dans la console, j'ai ce message : [27.02.2021] [07:12:08] [ERROR] [QUICKAPP70]: QuickApp crashed [27.02.2021] [07:12:08] [ERROR] [QUICKAPP70]: Unknown error occurred: handleJsonRpc je ne vois pas où ça peut coincer lorsque je veux changer la température de consigne... Stef Modifié le 27 février 2021 par couillerot
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 ah punaise, je m'en doutais, il fallait que je vérifie : si tu fais ça : self:debug(fibaro.getGlobalVariable("Consigne_Bureau")) tu obtiens : une string avec le timecode [27.02.2021] [08:16:01] [DEBUG] [QUICKAPP785]: 10 1614409998 donc pour bien faire : local ConsigneBureau, _ = fibaro.getGlobalVariable("Consigne_Bureau") ConsigneBureau = tonumber(ConsigneBureau) + 1 Ce serait plus simple si tu utilises ces variables directement dans le QA, et non des variables globales... Après çà dépend de ce que tu en feras par la suite... EDIT : je viens de remarqué ça, étrange les type de variable changent tout seul !!!??? local ConsigneBureau, _ = fibaro.getGlobalVariable("Consigne_Bureau") self:debug(type(ConsigneBureau), ConsigneBureau) [27.02.2021] [08:25:43] [DEBUG] [QUICKAPP785]: string 10 (ça c'est normal) mais maintenant : local ConsigneBureau, _ = fibaro.getGlobalVariable("Consigne_Bureau") + 1 self:debug(type(ConsigneBureau), ConsigneBureau) [27.02.2021] [08:27:13] [DEBUG] [QUICKAPP785]: number 11.0 change de type tout seul, et nombre à virgule !!??? ok... pourquoi pas...
couillerot Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 Merci beaucoup jjacques68 je vais faire quelques tests ! je m'accroche !!! Stef
couillerot Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 (modifié) je n'ai pas mieux, j'ai toujours cette erreur... au fait, à quoi sert ce ", _" dans la déclaration de variable ? local ConsigneBureau, _ = fibaro.getGlobalVariable("Consigne_Bureau") + 1 Modifié le 27 février 2021 par couillerot
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 que donne ceci ? self:debug(type(fibaro.getGlobalVariable("Consigne_Bureau"))) self:debug(fibaro.getGlobalVariable("Consigne_Bureau"))
couillerot Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 27.02.2021] [09:44:13] [ERROR] [QUICKAPP70]: QuickApp crashed [27.02.2021] [09:44:13] [ERROR] [QUICKAPP70]: Unknown error occurred: handleJsonRpc pas très rassurant !... Stef
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 On va faire autrement. Créé un autre QA et met ces lignes de code dans le onInit : self:debug(type(fibaro.getGlobalVariable("Consigne_Bureau"))) self:debug(fibaro.getGlobalVariable("Consigne_Bureau")) Affiche nous le retour du debug... Il faut d'abord s'occuper de cette variable Globale.
couillerot Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 j'obtiens ceci : [27.02.2021] [09:51:24] [DEBUG] [QUICKAPP115]: string [27.02.2021] [09:51:24] [DEBUG] [QUICKAPP115]: 19 1614403260
couillerot Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 donc je récupère bien la valeur en string
couillerot Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 avec cette modif : function QuickApp:onInit() self:debug("onInit") self:debug(type(fibaro.getGlobalVariable("Consigne_Bureau"))) self:debug(fibaro.getGlobalVariable("Consigne_Bureau")) local ConsigneBureau, _ = fibaro.getGlobalVariable("Consigne_Bureau") self:debug(ConsigneBureau) end j'obtiens bien ceci : [27.02.2021] [09:55:30] [DEBUG] [QUICKAPP115]: 19 donc j'obtiens bien la valeur souhaitée... Stef
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 (modifié) voilà très bien. donc maintenant, si tu ajoutes ça ligne : local ConsigneBureau, _ = fibaro.getGlobalVariable("Consigne_Bureau") on va récupérer : dans ConsigneBureau : 19 (sous forme de string) dans le "_" : le time code (les chiffres que tu as derrière la valeur 19 - on s'en fiche de ça...) si ajoute cette ligne : self:debug(type(ConsigneBureau), ConsigneBureau) tu verras bien le type string. et avec cette ligne en plus : ConsigneBureau = tonumber(ConsigneBureau) on transforme la string en number que tu peux vérifier en faisant encore une fois : self:debug(type(ConsigneBureau), ConsigneBureau) EDIT : nos messages se sont croisés... Modifié le 27 février 2021 par jjacques68
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 il y a 2 minutes, couillerot a dit : j'obtiens bien ceci : [27.02.2021] [09:55:30] [DEBUG] [QUICKAPP115]: 19 donc j'obtiens bien la valeur souhaitée... oui mais il manque le tonumber(), donc ton 19 est de type string... ça va bloquer pour faire des calculs
couillerot Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 ah ok jjacques, je vais poursuivre mes investigations sur ce fichu QA merci encore. Stef 1
jang Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 Il y a 1 heure, jjacques68 a dit : change type by itself, and floating point number !! ??? OK why not... http://www.lua.org/manual/5.3/manual.html#3.4.1 "With the exception of exponentiation and float division, the arithmetic operators work as follows: If both operands are integers, the operation is performed over integers and the result is an integer. Otherwise, if both operands are numbers or strings that can be converted to numbers (see §3.4.3), then they are converted to floats, the operation is performed following the usual rules for floating-point arithmetic (usually the IEEE 754 standard), and the result is a float. Exponentiation and float division (/) always convert their operands to floats and the result is always a float. Exponentiation uses the ISO C function pow, so that it works for non-integer exponents too." 3
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 @jang : ok ! i didn't know it... you just made me discover it... thanks
Messages recommandés