lua: Comparaison temperature avec variable utilisateur

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
morninggoal
Messages : 33
Inscription : 06 sept. 2019, 12:13

Re: lua: Comparaison temperature avec variable utilisateur

Message 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...
Pièces jointes
Capture.PNG
Capture.PNG (13.29 Kio) Consulté 4124 fois
Capture.PNG
Capture.PNG (14.87 Kio) Consulté 4126 fois
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: lua: Comparaison temperature avec variable utilisateur

Message 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
  -- ...
    
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: lua: Comparaison temperature avec variable utilisateur

Message 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.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: lua: Comparaison temperature avec variable utilisateur

Message 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.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: lua: Comparaison temperature avec variable utilisateur

Message 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:
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
morninggoal
Messages : 33
Inscription : 06 sept. 2019, 12:13

Re: lua: Comparaison temperature avec variable utilisateur

Message par morninggoal »

**********BINGO***** ca marche!
Merci a vous 2 messieurs!
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: lua: Comparaison temperature avec variable utilisateur

Message 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
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: lua: Comparaison temperature avec variable utilisateur

Message 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.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: lua: Comparaison temperature avec variable utilisateur

Message 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.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: lua: Comparaison temperature avec variable utilisateur

Message 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.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Répondre