LUA - Variable avec une chaine et variable

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 <\>.
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

LUA - Variable avec une chaine et variable

Message par Seb13 »

Hello à tous,

Je bloque dans mon script Lua :shock:

En fait, j'ai une variable v.nom (tableau) qui me donne le nom de personne (Laurent, Marcel etc...) c'est une chaine
J'ai une autre variable last_ping_Laurent ou last_ping_Marcel etc... c'est du num.

Dans une boucle, je passe tous les noms du tableau à la suite et donc, quand je fais un test, j'ai un message d'erreur qui me dit que je teste une chaine avec un num.

Comment puis-je avoir : last_ping_Laurent avec le v.nom et surtout me donner la valeur de la variable pour faire le test > 3.

if ('last_ping_'..v.nom) > 3 then
commandArray['Presence_'..v.nom]='Off'
end

Merci
Dernière modification par Seb13 le 15 janv. 2016, 18:28, modifié 1 fois.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: LUA - Variable avec une chaine et variable

Message par vil1driver »

Salut,

Tu peux utiliser tonumber() et tostring() pour passer une chaîne en nombre et inversement.
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
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: LUA - Variable avec une chaine et variable

Message par Seb13 »

Merci pour l'info, cependant, cette variable à une valeur, donc, je veux pouvoir la connaitre via tonumber() j'aurai toujours le même nombre, si j'ai bien compris le principe ;)
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: LUA - Variable avec une chaine et variable

Message par Seb13 »

Hello,

Personne à une idée ?

Merci
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: LUA - Variable avec une chaine et variable

Message par patrice »

Bonsoir
Comme le disais Vil1Driver tostring () et tonumber()
a=tostring(y) renvoie une chaine dont le contenu est y
x=tonumber(ma_vairiable_chaine) renvoie un int/float dans x
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: LUA - Variable avec une chaine et variable

Message par Seb13 »

Merci pour votre aide, mais j'ai loupé un train en chemin :shock:

Dans mon cas, si on dit que v.nom = Laurent

if last_ping_Laurent > 3 then
Cela fonctionne car last_ping_Laurent est une variable avec un Entier donc, on peut faire le test.

Je veux utiliser v.nom qui est la variable de mon tableau (Laurent) pour faire le test, en fait, je ne sais pas comment faire comprendre à LUA que last_ping_..v.nom c'est en fait last_ping_Laurent.

Vous voyez l'idée ou je m'exprime mal :oops:

Je pense que c'est un problème de syntax, je veux utiliser le début d'une variable last_ping_ avec une autre variable v.nom pour faire une variable qui aura comme résultat en Entier afin de faire le test.

Merci
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: LUA - Variable avec une chaine et variable

Message par patrice »

Bonjour
Hmm,
Et que donne un print last_ping_..v.nom dans le log Domoticz ?
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
rimram31
Messages : 659
Inscription : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: LUA - Variable avec une chaine et variable

Message par rimram31 »

Seb13 a écrit :...Vous voyez l'idée ou je m'exprime mal :oops: ...
Si je comprends bien tu veux utiliser des variables dont le nom est variable (dont le nom est construit a partir du contenu d'une variable).

Mon premier réflexe (je fais de l'informatique depuis plus de vingt ans) est de te dissuader d'utiliser cette "technique", tu serais dans mon environnement professionnel, je te volerai dans les plumes ;)

D'une, c'est pas trop fait pour ça, de deux, un nom de variable dans un langage informatique peut-être soumis a restrictions (commence par une lettre, pas de caractères spéciaux ...). La solution "propre" serait d'utiliser un dictionnaire associé, style last_ping = {} puis last_ping['Laurent'] = 3 ... comme last_ping['Maëva"] ou Marie Chantal ...

J'ai peut-être mal compris le sujet mais si j'ai bon, utilise un outil pour ce pour quoi il est fait, c'est comme vouloir planter un clou avec le manche d'un tournevis, ça marche mais pas toujours, un marteau est plus pratique :mrgreen:
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: LUA - Variable avec une chaine et variable

Message par Seb13 »

Merci pour les infos... je vais donner un exemple de script, peut-être que cela sera mieux qu'un long texte ;)

Un tableau tab[3] avec :
tab[1] = nom/age = Laurent,30
tab[2] = nom/age = Seb,25
tab[3] = nom/age = Fred,45
je déclare mes variables
last_ping_Laurent = 0
last_ping_Seb = 0
last_ping_Fred = 0

une boucle ou je passe tous les noms
For i = 1 to 3 do (syntax un peu bidon pour vous faire comprendre)
v = tab
print v.nom (cela va me donner "Laurent" en premier)

maintenant je veux faire un test avec le nom en cours dans la boucle
si last_ping..v.nom > 3 alors etc.. etc...

et c'est là que cela ne marche pas car il voit last_ping..v.nom comme une chaine et non une variable qui a 0 :?
c'est un problème de syntaxe.

('last_ping_'..v.nom) ne marche pas...

Mais quand je fais
commandArray['Presence_'..v.nom]='Off' (Presence_..v.nom va me donner Presence_Laurent donc, une chaine... cela fonctionne dans ce cas.
cela fonctionne.
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: LUA - Variable avec une chaine et variable

Message par Seb13 »

patrice a écrit :Bonjour
Hmm,
Et que donne un print last_ping_..v.nom dans le log Domoticz ?
cela va me donner last_ping_Laurent... je pense...

car j'ai
commandArray['Presence_'..v.nom]='Off'

et cela me donne Presence_Laurent.

Je veux que last_ping_..v.nom me donne le résultat de la variable last_ping_Laurent pour éviter dans ma boucle de mettre

if ('last_ping_Laurent) > 3 then
puis
if ('last_ping_Seb) > 3 then
etc...

le but d'une boucle est de ne pas faire la même ligne 10 fois
Répondre