couillerot 749 Signaler ce message Posté(e) 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é 24 février 2021 par couillerot Partager ce message Lien à poster Partager sur d’autres sites
jjacques68 602 Signaler ce message Posté(e) 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é 25 février 2021 par jjacques68 Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 26 février 2021 merci , je n'avais pas reçu la notif !!! Stef Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 26 février 2021 marche pô... il me renvoi une valeur de 0. ...faut que je trouve !!! Stef Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
Lazer 8 486 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
Lazer 8 486 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
jjacques68 602 Signaler ce message Posté(e) 26 février 2021 @couillerot, tu ne t'embrouilles pas avec le nom des variables locales et globales ? Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 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é 27 février 2021 par couillerot Partager ce message Lien à poster Partager sur d’autres sites
jjacques68 602 Signaler ce message Posté(e) 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... Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 27 février 2021 Merci beaucoup jjacques68 je vais faire quelques tests ! je m'accroche !!! Stef Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 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é 27 février 2021 par couillerot Partager ce message Lien à poster Partager sur d’autres sites
jjacques68 602 Signaler ce message Posté(e) 27 février 2021 que donne ceci ? self:debug(type(fibaro.getGlobalVariable("Consigne_Bureau"))) self:debug(fibaro.getGlobalVariable("Consigne_Bureau")) Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
jjacques68 602 Signaler ce message Posté(e) 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. Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 27 février 2021 donc je récupère bien la valeur en string Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
jjacques68 602 Signaler ce message Posté(e) 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é 27 février 2021 par jjacques68 Partager ce message Lien à poster Partager sur d’autres sites
jjacques68 602 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
couillerot 749 Signaler ce message Posté(e) 27 février 2021 ah ok jjacques, je vais poursuivre mes investigations sur ce fichu QA merci encore. Stef 1 Partager ce message Lien à poster Partager sur d’autres sites
jang 225 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
jjacques68 602 Signaler ce message Posté(e) 27 février 2021 @jang : ok ! i didn't know it... you just made me discover it... thanks Partager ce message Lien à poster Partager sur d’autres sites