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

lua: Comparaison temperature avec variable utilisateur

Message 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
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: lua: Comparaison temperature avec variable utilisateur

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

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
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: lua: Comparaison temperature avec variable utilisateur

Message 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"
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
morninggoal
Messages : 33
Inscription : 06 sept. 2019, 12:13

Re: lua: Comparaison temperature avec variable utilisateur

Message 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
Pièces jointes
Capture1.PNG
Capture1.PNG (14.54 Kio) Consulté 3997 fois
Capture.PNG
Capture.PNG (9.87 Kio) Consulté 3998 fois
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: lua: Comparaison temperature avec variable utilisateur

Message par vil1driver »

L'onglet erreur de la page de logs n'indiques rien?

Ps: je t'ai conseillé d'enlever le tonumber
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
morninggoal
Messages : 33
Inscription : 06 sept. 2019, 12:13

Re: lua: Comparaison temperature avec variable utilisateur

Message par morninggoal »

j'ai enlevé le tonumber... pas mieux et rien dans les logs meme sur l'onglet erreur... je comprends pas...
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: lua: Comparaison temperature avec variable utilisateur

Message 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:
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 »

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 ;)
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 »

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.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
Répondre