Aller au contenu

Messages recommandés

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

 

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

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

Posté(e)

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.
 

  • Like 1
Posté(e)

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

Posté(e)

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 :

image.thumb.png.2d4fc160a8383bb0af81d8bad2adf5d8.png

 

Mais si je colle ce même texte dans Notepad++, les caractères ne se verront pas (et ça ne fonctionnera pas) :

image.png.428dea17b16e5eb0fe521d10c8e8e0b1.png

 

 

Il y en a aussi qui apparaissent pour ton propre code :

image.png.8f9158aa232e91bff4b1798c9b6476c5.png

 

D'ailleurs, appeler self:onInit() dans ton code n'a pas de sens, ça doit probablement être une erreur de ta part.

 

 

  • Like 1
Posté(e) (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é par couillerot
Posté(e)

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

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

Posté(e)

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.

Posté(e)

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

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

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

  • Like 3
×
×
  • Créer...