Page 2 sur 2
Re: Logique et syntaxe LUA
Publié : 24 déc. 2020, 16:38
par Thib38
J'ai ajouté un print juste en dessous de la ligne local temperature = devicechanged[sonde]
Dans le log je vois bien la température 21.0
donc ça fonctionne comme vous me le disiez, mais pourquoi il ne compare pas cette valeur avec les autres valeur consigne et hysteresis (temperature < (consigne - hysteresis) )
J'ai l'impression d'être à ça [--] de comprendre un truc qui m'échappe....
Re: Logique et syntaxe LUA
Publié : 24 déc. 2020, 16:41
par Keros
Redonne nous ton script complet.
Dis nous quel est le nom des devices que tu utilises.
Mets nous les log d'erreur.
Avec tout ça, on saura où tu es es et on pourra t'aider.
Re: Logique et syntaxe LUA
Publié : 27 déc. 2020, 11:42
par Thib38
Bonjour tout le monde,
C'est noté Keros pour les MPs
J'ai réussi à faire ce que je voulais, donc j'ai modifié deux trois points par rapport au script d'origine.
Code : Tout sélectionner
-- Alexandre DUBOIS - 2014
-- This script allows to maintain the temperatue between 19°C et 21°C when virtual
-- 'Thermostat atelier' is ON.
--------------------------------
------ Start of edit section ------
--------------------------------
local consigne = 'Consigne Atelier' --Température de consigne dans Mesures
local hysteresis = 0.5 --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
local sonde = 'Sonde Atelier' --Nom de la sonde de température
local thermostat = 'Mode Auto' --Nom de l'interrupteur virtuel du thermostat
local radiateur = 'Aerotherme Atelier' --Nom du radiateur à allumer/éteindre
--------------------------------
-- End of edit section --
--------------------------------
commandArray = {}
if (devicechanged[sonde]) or (devicechanged[thermostat]) or (devicechanged[consigne]) then
local consigne = tonumber(otherdevices[consigne])
local temperature = tonumber(otherdevices[sonde]) --Temperature relevée dans l'atelier
--print("temperature : "..temperature.."°C")
--print(type(temperature))
--print("Consigne : "..consigne.."°C")
--print(type(consigne))
--print("hysteresis : "..hysteresis.."°C")
--print(type(hysteresis))
--On n'agit que si le "Thermostat" est actif
if (otherdevices[thermostat]=='On') then
-- print('-- Gestion du thermostat pour l'atelier --')
if (temperature < (consigne - hysteresis) ) then
print('Allumage du chauffage dans l'atelier')
commandArray[radiateur]='On'
elseif (temperature > (consigne + hysteresis)) then
print('Extinction du chauffage dans l'atelier')
commandArray[radiateur]='Off'
end
end
end
return commandArray
Les devices sont tous dans la liste "Start of edit section"
Re: Logique et syntaxe LUA
Publié : 27 déc. 2020, 13:33
par Keros
Très bien ce code avec des prints possibles pour comprendre ce qui ce passe
Pour aller plus loin, tu enregistres les valeurs de
consigne et
température et après tu vérifies si le thermostat est à On avant de "faire" quelque chose. Si ton thermostat est à Off, tu as enregistré
consigne et
température pour rien ... C'est con : vérifie toutes tes conditions avant de faire calculer ton programme

Re: Logique et syntaxe LUA
Publié : 27 déc. 2020, 15:16
par Thib38
Oui oui effectivement.
J'ai bien compris l'intérêt mais le gain à le faire après est réel ? Domoticz peux vraiment "ralentir" si on lui fait faire ça dans 10 scripts à la suite ? (Rpi 3b + Raspbian + Domoticz2020.2) le système est "sensible" ?
Mais maintenant que j'ai compris quelques rudiments grâce à l'aide du forum, je test, je fais ma p'tite tambouille et c'est génial ! on peut faire une infinité de choses !
Re: Logique et syntaxe LUA
Publié : 27 déc. 2020, 15:23
par denis_brasseur
Je ne pense pas que affecter des variables sans les utiliser change grand chose dans le code, chacun sa méthode, si cela ne nuit pas aux performances du code. Il ne s'agit pas d'un calcul dans ce cas de figure.
Je suis plus attaché à l'indentation du code, afin de le rendre plus lisible.
Idem pour les parenthèse, ainsi
Code : Tout sélectionner
if (devicechanged[sonde]) or (devicechanged[thermostat]) or (devicechanged[consigne]) then
peux aussi s'écrire comme ceci
Code : Tout sélectionner
if devicechanged[sonde] or devicechanged[thermostat] or devicechanged[consigne] then
mais cela ne change rien au fonctionnement du script.
Chacun sa méthode, ne soyons pas trop puriste.
Re: Logique et syntaxe LUA
Publié : 27 déc. 2020, 18:19
par Keros
Thib38 a écrit : 27 déc. 2020, 15:16
J'ai bien compris l'intérêt mais le gain à le faire après est réel ? Domoticz peux vraiment "ralentir" si on lui fait faire ça dans 10 scripts à la suite ? (Rpi 3b + Raspbian + Domoticz2020.2) le système est "sensible" ?
Tu n'auras pas de gain et ton système ne va pas ralentir pour ce cas. Mais d'en d'autres cas, ça peut avoir un petit impact.
Je faisais la remarque pour te sensibiliser puisque c'est tes débuts
Thib38 a écrit : 27 déc. 2020, 15:16
Mais maintenant que j'ai compris quelques rudiments grâce à l'aide du forum, je test, je fais ma p'tite tambouille et c'est génial ! on peut faire une infinité de choses !
Là, t'as tout compris

Re: Logique et syntaxe LUA
Publié : 30 déc. 2020, 10:15
par drabo
Bonjour,
Désolé de mettre le doute mais je ne comprends pas cela.
pour moi sonde_temperature indique que tu ne veux récupérer que la valeur "Temperature" de la sonde que tu dois nommer?
vous pouvez rajouter cette ligne dans un script lua de type device
et vous verrez tous les évènements passer.
Par exemple pour ma sonde de température Garage voici ce qui passe :
Code : Tout sélectionner
2020-12-30 10:11:36.084 Status: LUA: Temperature Xiaomi Cuisine
2020-12-30 10:11:36.084 Status: LUA: 22.91;72.23;0;988;0
2020-12-30 10:11:36.084 Status: LUA: Temperature Xiaomi Cuisine_Barometer
2020-12-30 10:11:36.084 Status: LUA: 988.0
2020-12-30 10:11:36.084 Status: LUA: Temperature Xiaomi Cuisine_Humidity
2020-12-30 10:11:36.084 Status: LUA: 72.0
2020-12-30 10:11:36.084 Status: LUA: Temperature Xiaomi Cuisine_Dewpoint
2020-12-30 10:11:36.084 Status: LUA: 17.594240188599
2020-12-30 10:11:36.084 Status: LUA: Temperature Xiaomi Cuisine_Temperature
2020-12-30 10:11:36.084 Status: LUA: 22.909999847412
Pour le même "devicechanged" domoticz envoi toutes les valeurs de la sonde. dans mon exemple il envoi le barometre, le pourcentage d'humidité, le point de rosée et enfin la températture pour ma sonde qui s'appelle "Temperature Xiaomi Cuisine".
Du coup si vous codez le nom de la sonde et que vous rajoutez "_Temperature" vu n'obtiendrez que la valeur de la température de la sonde.
J'espère que je ne me suis pas trompé...
Re: Logique et syntaxe LUA
Publié : 30 déc. 2020, 16:33
par Keros
Maintenant que tu le dis, cette syntaxe "_Temperature" me dit un petit quelque chose... Il me semble l'avoir vu à mes débuts mais comme j'utilise des dispositifs différents pour chaque info, je n'ai jamais utilisé cette syntaxe
Thib38, désolé je t'ai dit des bêtises

Re: Logique et syntaxe LUA
Publié : 03 janv. 2021, 14:25
par Thib38
Bonjour, (et bonne année)
Ah ah tout l'intérêt d'un forum !
Voilà donc à quoi sert ce _Temperature ! Merci drabo !