Page 3 sur 3

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 16 sept. 2019, 09:23
par morninggoal
Le script est bien de type time. J'ai recopier ton code boum et voici les logs. Visiblement la variable SMSenvoye pose probleme. Je ne comprends pas elle est bien valuée a 0...

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 16 sept. 2019, 10:00
par boum
Ouaip, y'a un soucis avec la documentation de LUA. Soit y'a un bug, soit le comportement a changé et la doc n'a pas suivi.

J'ai fait le test en local :
print (type(uservariables['TestVar'])) -> "number"
(avec TestVar à 0)

@morninggoal: pour rendre ton script résistant à ce comportement (et à un changement futur), le mieux c'est de stocker/évaluer la variable avec tonumber, et de la comparer à 0 et pas '0' :

Code : Tout sélectionner

local SMSenvoye = tonumber(uservariables['SMSenvoye'])
-- ...
if (otherdevices_temperature['Temperature_etage'] > tonumber(uservariables['TempMax']) and smsEnvoye == 0) then
  -- ...
    

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 16 sept. 2019, 10:17
par vil1driver
Oui j'en arrivais à la même conclusion
Surtout avec le test sur la temp qui ne renvoyait pas d'erreur malgré l'absence du tonumber

Oui tester == 0

Ici le tonumber doit pouvoir être supprimé

Code : Tout sélectionner

tonumber(uservariables['TempMax'])
Par contre à moins que cela aussi ai changé, une variable ne se stock que sous forme de chaîne..

Bien réfléchi ils ont peut être finalement collé au type de variable 'entier' ici
Il a pas si longtemps, le type ne servait qu'à formater, la variable étant au final toujours une chaîne.

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 16 sept. 2019, 10:27
par boum
J'ai posté une question sur le forum officiel pour savoir ce qu'il en était.
Perso, mes scripts sont en dzVents et les variables sont déjà typées là, donc pas de soucis. Mais ici, ça pose un pb et des scripts ont/vont foirer avec ce changement. J'espère qu'au moins ils modifieront la documentation avec le numéro de version du changement.

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 16 sept. 2019, 10:28
par boum
vil1driver a écrit : 16 sept. 2019, 10:17 Ici le tonumber doit pouvoir être supprimé

Code : Tout sélectionner

tonumber(uservariables['TempMax'])
Du coup, il vaut mieux toujours garder et ajouter tonumber/tostring partout :D Pour éviter les suprises :roll:

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 16 sept. 2019, 14:11
par morninggoal
**********BINGO***** ca marche!
Merci a vous 2 messieurs!

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 16 sept. 2019, 15:28
par boum
Content pour toi ;)

On m'a répondu, et en fait, ça fait plus de quatre ans que userVariables['integerVar'] retourne un nombre et non pas une chaîne de caractères. Le Wiki n'avait jamais été changé il faut croire.

Pour beaucoup de scripts, ça ne change rien grâce aux conversions implicites de Lua, mais pas quand on fait une comparaison :o

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 16 sept. 2019, 19:06
par denis_brasseur
Dans module.lua de vil1driver, il y a une fonction permettant de retourner le type de la variable

Code : Tout sélectionner

-- retourne le type de la variable
-- 'string' , 'number' , 'table'
function typeof(var)
    local _type = type(var);
    if(_type ~= "table" and _type ~= "userdata") then
        return _type;
    end
    local _meta = getmetatable(var);
    if(_meta ~= nil and _meta._NAME ~= nil) then
        return _meta._NAME;
    else
        return _type;
    end
end
comme

Code : Tout sélectionner

print (type(uservariables['var']))
Pour en revenir au type de variable, comment est il possible de pouvoir créer une variable de type 'Entier' en y saisissant la valeur 0001 par exemple ?
0001, d'après moi, n'est pas un Entier.

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 17 sept. 2019, 18:09
par boum
denis_brasseur a écrit : 16 sept. 2019, 19:06 Pour en revenir au type de variable, comment est il possible de pouvoir créer une variable de type 'Entier' en y saisissant la valeur 0001 par exemple ?
0001, d'après moi, n'est pas un Entier.
Bah ça dépend de ton utilisation. Au pire, tu stockes la variable en tant que chaine de caractères.

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 18 sept. 2019, 04:41
par denis_brasseur
boum a écrit : 17 sept. 2019, 18:09
Bah ça dépend de ton utilisation. Au pire, tu stockes la variable en tant que chaine de caractères.
Ce que j'ai voulu dire, c'est que c'est une aberration que de pouvoir saisir une valeur telle que 00001 dans une variable de type Entier, 00001 n'est pas un entier.