Page 1 sur 3

lua: Comparaison temperature avec variable utilisateur

Publié : 13 sept. 2019, 16:01
par morninggoal
Bonjour,

J'ai fait le script suivant en lua qui ne semble pas fonctionner... Il fonctionnait en blockly... Qu’en pensez vous? pas d'erreur dans le log mais j'imagine que le problème se situe autour de ma variable 'TempMax'.

Code : Tout sélectionner

heure_actuelle= string.sub(os.date("%X"), 1, 5)


commandArray = {}

if heure_actuelle < '20:00' then
    if (otherdevices['Temperature_etage'] == tostring(uservariables['TempMax'])) and uservariables['SMSenvoye'] == '0' then
         commandArray['SendNotification']='Temperature élévée: fermeture volets 50% !'
         commandArray['Variable:SMSenvoye'] = tostring(1)
         commandArray['Volet_Salle_a_manger 1_grand'] = 'Stopped'
         commandArray['Volet_Salle_a_manger_2'] = 'Stopped'
         commandArray['Volet_Cuisine'] = 'Stopped'
         commandArray['Volet_Salon'] = 'Stopped'
     end
 end
 


return commandArray

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 13 sept. 2019, 17:15
par boum

Code : Tout sélectionner

otherdevices_temperature['Temperature_etage']
(et fait plutôt le test avec >=, la température peut augmenter brutalement et rater ton seuil.

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 14 sept. 2019, 12:26
par morninggoal
J'ai appliquer ta modif mais ca n'a pas l'air de fonctionner... Toujours rien dans les logs...
Pour ma variable utilisateur "TempMax" j'ai mis un tonumber à la place du tostring...

Code : Tout sélectionner

heure_actuelle= string.sub(os.date("%X"), 1, 5)


commandArray = {}

if heure_actuelle < '20:00' then
    if otherdevices_temperature['Temperature_etage'] > tonumber(uservariables['TempMax']) and uservariables['SMSenvoye'] == '0' then
         
         print('****************')
         commandArray['SendNotification']='Temperature élévée: fermeture volets 50% !'
         commandArray['Variable:SMSenvoye'] = tostring(1)
         commandArray['Volet_Salle_a_manger 1_grand'] = 'Stopped'
         commandArray['Volet_Salle_a_manger_2'] = 'Stopped'
         commandArray['Volet_Cuisine'] = 'Stopped'
         commandArray['Volet_Salon'] = 'Stopped'
     end
 end
  


return commandArray

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 14 sept. 2019, 12:33
par vil1driver
Salut,

Juste pour tatilloner..
Ceci

Code : Tout sélectionner

tostring(1)
Peut s'écrire ;)

Si tu veux comprendre ton problème ajoute des print à gogo en tout début de script

Code : Tout sélectionner

print otherdevices_temperature['Temperature_etage']) 
Etc... (heure_actuelle...) tout, tout...

A savoir que otherdevices_temperature ne renvoie pas un nombre mais une chaîne et ne devrait donc pas être comparé à un nombre (tonumber...)
Mais ceci aurait normalement du créer une erreur visible dans les logs..
" attempt to compare string with number"

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 14 sept. 2019, 14:36
par morninggoal
J'ai rajouter les print comme tu me conseilles... grace a ça je constate que la valeur de la temperature_etage et la valeur de ma variable TempMax correspondent a ce que j'attends.... pour autant il ne se passe toujours rien...

heure_actuelle= string.sub(os.date("%X"), 1, 5)


commandArray = {}

print (otherdevices_temperature['Temperature_etage'])
print (uservariables['TempMax'])


if heure_actuelle < '20:00' then
if (otherdevices_temperature['Temperature_etage'] >= tonumber(uservariables['TempMax']) and uservariables['SMSenvoye'] == '0') then

print('****************')
commandArray['SendNotification']='Temperature élévée: fermeture volets 50% !'
commandArray['Variable:SMSenvoye'] = tostring(1)
commandArray['Volet_Salle_a_manger 1_grand'] = 'Stopped'
commandArray['Volet_Salle_a_manger_2'] = 'Stopped'
commandArray['Volet_Cuisine'] = 'Stopped'
commandArray['Volet_Salon'] = 'Stopped'
end
end



return commandArray


voici les log
[img][img]



et mes variables

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 14 sept. 2019, 14:44
par vil1driver
L'onglet erreur de la page de logs n'indiques rien?

Ps: je t'ai conseillé d'enlever le tonumber

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 14 sept. 2019, 14:51
par morninggoal
j'ai enlevé le tonumber... pas mieux et rien dans les logs meme sur l'onglet erreur... je comprends pas...

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 14 sept. 2019, 15:04
par boum

Code : Tout sélectionner

if heure_actuelle < '20:00' then
oops ;)

Code : Tout sélectionner

local juste_l_heure = tonumber(string.sub(heure_actuelle, 1, 2))
print( juste_l_heure )
if (juste_l_heure < 20) then
Pour les chaines de caractères, il ne faut pas trop compter sur < et >

Si tu n'as rien dans les logs, c'est qu'il ne passe pas par les print. Le script s'est arrêté avant ou ne passe pas une condition englobante ou plus haut. C'est du travail de détective :lol:

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 14 sept. 2019, 15:09
par vil1driver
Je me sers énormément de cette méthode de comparaison sur les heures (ce code est d'ailleurs le mien) et elle est fonctionnelle.
Un print juste après le confirmerait..

Pour le reste, oui tester > a la place de >=
Ou tout mettre en numérique en mettant des tonumber partout (ce que je fais d'habitude, voir fonction getTemp dans ma signature)
Certainement bien plus fiable, que de comparer des chaînes de taille différentes.

Merci pour le rappel Boum ;)

Re: lua: Comparaison temperature avec variable utilisateur

Publié : 14 sept. 2019, 16:15
par boum
Le dernier endroit où ça peut bloquer, c'est:

Code : Tout sélectionner

uservariables['SMSenvoye'] == '0'
Encore une variable a imprimer pour vérifier la valeur. Elle a peut-être été mise à '1' sur un test précédent et n'a pas été réinitialisée.