lua: Comparaison temperature avec variable utilisateur
-
morninggoal
- Messages : 33
- Inscription : 06 sept. 2019, 12:13
Re: lua: Comparaison temperature avec variable utilisateur
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 (13.29 Kio) Consulté 4124 fois
-
- Capture.PNG (14.87 Kio) Consulté 4126 fois
Re: lua: Comparaison temperature avec variable utilisateur
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' :
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
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é
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.
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'])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
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: lua: Comparaison temperature avec variable utilisateur
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.
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
Re: lua: Comparaison temperature avec variable utilisateur
Du coup, il vaut mieux toujours garder et ajouter tonumber/tostring partoutvil1driver a écrit : 16 sept. 2019, 10:17 Ici le tonumber doit pouvoir être suppriméCode : Tout sélectionner
tonumber(uservariables['TempMax'])
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
**********BINGO***** ca marche!
Merci a vous 2 messieurs!
Merci a vous 2 messieurs!
Re: lua: Comparaison temperature avec variable utilisateur
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
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
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
Dans module.lua de vil1driver, il y a une fonction permettant de retourner le type de la variable
comme
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.
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
endCode : Tout sélectionner
print (type(uservariables['var']))0001, d'après moi, n'est pas un Entier.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Re: lua: Comparaison temperature avec variable utilisateur
Bah ça dépend de ton utilisation. Au pire, tu stockes la variable en tant que chaine de caractères.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.
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
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.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.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090