Page 1 sur 2

Logique et syntaxe LUA

Publié : 23 déc. 2020, 19:55
par Thib38
Bonjour à tous,

Je me permet de faire appels à vos lumières après plusieurs jours à lire et relire le site et le forum.

Ma question est simple,
en observant ce code ici :

Code : Tout sélectionner

local temperature = devicechanged[string.format('%s_Temperature', sonde)]
Si je comprends cette ligne, (et d'après ce que j'ai vu ici) on fait une chaine de caractère où %s est la valeur de la sonde, si le capteur est à 21.3 °C, la chaine obtenue pour temperature est :

Code : Tout sélectionner

21.3_Temperature
Avec ça, on fait une vérification avec des valeurs :

Code : Tout sélectionner

if (temperature < (consigne - hysteresis) )
on compare une chaine de caractères avec des valeurs...
Comment ça peut fonctionner ?

En vous remerciant d'avance et mille excuse si je suis passer à travers un truc aussi simple.

Re: Logique et syntaxe LUA

Publié : 23 déc. 2020, 21:16
par Keros
Bonjour Thib38 et bienvenue sur le forum ;)

L'exemple que tu prends n'est pas simple, surtout l'utilisation de cette fonction.

J'ai trouvé une réponse là : https://www.tutorialspoint.com/lua/lua_strings.htm : string.format('%s_Temperature', sonde) revient à faire sonde..'_Temperature', en remplaçant la variable sonde par sa valeur.

Tu pourrais écrire simplement local temperature = devicechanged['Salon_Temperature'] ;)

Va savoir pourquoi dans des exemples, tu as des choses compliquées :mrgreen:

Re: Logique et syntaxe LUA

Publié : 23 déc. 2020, 21:46
par Thib38
Merci pour l'accueil, et merci pour la réponse Keros, effectivement on peut faire plein de choses avec string.format().

Mais on est bien d'accord qu'ensuite cette chaîne est comparée avec des valeurs ?
(j'ai essayé ce script et il fonctionne, et je ne comprends pas :? )

Alors que si on utilise local temperature = devicechanged['Salon_Temperature'] on va comparer que des valeurs ?

Re: Logique et syntaxe LUA

Publié : 23 déc. 2020, 22:29
par Keros
Ce qui compte, ce sont les valeurs !!
Zut Perceval sort de ce corps :mrgreen:
Désolé, un moment d'égarement :lol:


Décortiquons local temperature = devicechanged[string.format('%s_Temperature', sonde)]. Cela donne :

local temperature = on enregistre la donnée dans une variable local nomée température.
devicechanged[XXXXX] c'est la valeur du dispositif XXXXX quant il changera.
string.format('%s_Temperature', sonde) c'est pour définir le nom du dispositif

La chaine permet de définir le dispositif. C'est ensuite la valeur du dispositif qui est enregistré dans la variable. Et enfin comparé à une autre valeur dans la suite du programme.

Re: Logique et syntaxe LUA

Publié : 23 déc. 2020, 23:58
par Thib38
"C'est pas faux !" :D

Je pense que j'ai compris ce que je ne comprends pas !
Tu pourrais écrire simplement local temperature = devicechanged['Salon_Temperature']
Pourquoi _Temperature ?
Pourquoi ne pas écrire : local temperature = devicechanged['Salon']
Encore mieux : local temperature = devicechanged['sonde'] puisqu'il est définit local sonde = 'Salon'

Re: Logique et syntaxe LUA

Publié : 24 déc. 2020, 00:54
par Keros
:lol:
Thib38 a écrit : 23 déc. 2020, 23:58 Pourquoi _Temperature ?
Salon_Temperature c'est le nom du dispositif dans l'exemple.
Thib38 a écrit : 23 déc. 2020, 23:58 Pourquoi ne pas écrire : local temperature = devicechanged['Salon']
Oui à condition que ton dispositif s'appele Salon. Tu pourrais l'appeler Sonde_salon, Capteur-salon, etc
Thib38 a écrit : 23 déc. 2020, 23:58 Encore mieux : local temperature = devicechanged['sonde'] puisqu'il est définit local sonde = 'Salon'
Là non : sonde est entre guillements donc c'est du texte.
Pour utiliser la variable il faudrait :

Code : Tout sélectionner

local sonde = 'Salon'
local temperature = devicechanged[sonde]

Re: Logique et syntaxe LUA

Publié : 24 déc. 2020, 04:27
par denis_brasseur
C'est d'ailleurs encore plus visible avec l'affichage syntaxique depuis l'éditeur d'évènement ou Notepad++ :
Capture.PNG
Capture.PNG (7.2 Kio) Consulté 3023 fois
La couleur te permet de bien faire la différence entre une variable et le nom du device.

Re: Logique et syntaxe LUA

Publié : 24 déc. 2020, 14:34
par Thib38
effectivement j'ai mélangé variable et dispositif, merci à tous pour ces éclaircissements,

Mais donc j'en déduis que devicechanged[] renvoie une chaine de caratères ?
du coup j'ai testé :

Code : Tout sélectionner

tonumber(devicechanged[Sonde])
et là, les comparaisons entre nombres fonctionnent !

Re: Logique et syntaxe LUA

Publié : 24 déc. 2020, 16:33
par Thib38
Salon_Temperature c'est le nom du dispositif dans l'exemple.
sauf que dans le script, Salon est un dispositif, pas Salon_Temperature Je ne comprends pas d'où sort ce _Temperature dans le code, alors qu'aucun de mes dispositifs ne comporte ce terme. et pourtant, il tourne... ce script ! (je l'ai essayé)

en revanche que je mette
local temperature = devicechanged[sonde] ou local temperature = devicechanged['Salon']
J'obtiens :
Error: EventSystem: in script_device_B1: [string " -- ..."]:27: attempt to compare string with number

Re: Logique et syntaxe LUA

Publié : 24 déc. 2020, 16:38
par Keros
Salon n'est pas forcément un dispositif. L'auteur du script a certainement appelé ces différents capteurs Salon_Temparéture, Cuisine_Température, Chambre_Temperature.

Et comme il utilise le suffixe _Temperature à chaque fois, il a utilisé un formatge de chaine de caractère "automatiquement".

PS : je ne réponds pas aux demandes par MP ;)