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 :
Avec ça, on fait une vérification avec des valeurs :
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

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
Désolé, un moment d'égarement
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 !"
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
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 (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é :
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
