Manipulation des Variables

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 <\>.
Deniss
Messages : 8
Inscription : 07 avr. 2017, 15:32

Manipulation des Variables

Message par Deniss »

Bonjour,
Est il possible de récupérer le nom ou id d' un device dans une variable sur action on off par exemple (un peu comme parameters dans VBA), et de l' utiliser dans un script Lua.
Désolé si je ne suis pas tres clair mais j' ai du mal avec la gestion et l' utilisation des variables.
Merci.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Manipulation des Variables

Message par vil1driver »

Salut,

Une variable utilisateur ? (menu plus d'option)

Elles peuvent contenir ce que tu veux si c'est ta question
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
Deniss
Messages : 8
Inscription : 07 avr. 2017, 15:32

Re: Manipulation des Variables

Message par Deniss »

Merci d' avoir pris un peu de temps pour me répondre. Mais sauf erreur de ma part les variables utilisateur ne sont pas dynamique. Il faut leur affecter une valeur soit en dur soit par code. En fait ce que je recherche c' est de lancer un script lua avec des paramètres variable. exemple :
script_device_xxx.lua("var1","var2").
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Manipulation des Variables

Message par vil1driver »

Tu n'as pas à lancer les scripts toi même !
Var1, var2 contiendraient quoi ?

https://easydomoticz.com/point-scripts-lua/
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
Deniss
Messages : 8
Inscription : 07 avr. 2017, 15:32

Re: Manipulation des Variables

Message par Deniss »

En fait c' est pour simplifier mon code en utilisant moins de if then. J' utilise pour mon arrosage 6 relais d' une carte USB UART donc j' ai créé 6 devices que j' ai nommé Vanne1,Vanne2... jusqu' à 6. J' utilise qu' un fichier pour gerer les 6 actions, mon code commence par:
if devicechanged['Vanne1'] or devicechanged['Vanne2'] or devicechanged['Vanne3'] or devicechanged['Vanne4'] or devicechanged['Vanne5'] or devicechanged['Vanne6'] then
Comme il est dit dans la convention d' écriture de script LUA domoticz pour arrêter le code si il n y a pas de changement d' état.
.Je trouve ça tres lourd alors que si dans un premier temps le code s' éxecute avec comme argument variable le nom du device ou même un indice du type RLYX, je pourrai le comparer à un tableau de variable dans mon code et continuer si le nom ou l' indice fait partie du tableau. Dans un deuxième temps si je peux passer RLYX comme variable dynamique, le code serait simplifié de 30 lignes :

--Actionner les relais--
if (devicechanged['Vanne1'] == 'On') then
trame=( 'VariableRLYX'+1) --1 pour ON
chaine="Début d'arrosage"
elseif (devicechanged['Vanne1'] == 'Off') then
trame=( 'VariableRLYX'+0) --0 pour OFF
chaine="Fin d'arrosage"

au lieu de:
--Actionner les relais--
if (devicechanged['Vanne1'] == 'On') then
trame=( 'RLY11')
chaine="Début d'arrosage"
elseif (devicechanged['Vanne1'] == 'Off') then
trame=( 'RLY10')
chaine="Fin d'arrosage"
elseif (devicechanged['Vanne2'] == 'On') then
trame=( 'RLY21')
chaine="Début d'arrosage"
elseif (devicechanged['Vanne2'] == 'Off') then
trame=( 'RLY20')
chaine="Fin d'arrosage"
elseif (devicechanged['Vanne3'] == 'On') then
trame=( 'RLY31')
chaine="Début d'arrosage"
elseif (devicechanged['Vanne3'] == 'Off') then
trame=( 'RLY30')
chaine="Fin d'arrosage"
elseif (devicechanged['Vanne4'] == 'On') then
trame=( 'RLY41')
chaine="Début d'arrosage"
elseif (devicechanged['Vanne4'] == 'Off') then
trame=( 'RLY40')
chaine="Fin d'arrosage"
elseif (devicechanged['Vanne5'] == 'On') then
trame=( 'RLY51')
chaine="Début d'arrosage"
elseif (devicechanged['Vanne5'] == 'Off') then
trame=( 'RLY50')
chaine="Fin d'arrosage"
elseif (devicechanged['Vanne6'] == 'On') then
trame=( 'RLY61')
chaine="Début d'arrosage"
elseif (devicechanged['Vanne6'] == 'Off') then
trame=( 'RLY60')
chaine="Fin d'arrosage"
end

J' espère ne pas avoir était trop ennuyeux, et merci d' avoir lu jusqu'au bout. :D
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Manipulation des Variables

Message par vil1driver »

si ton script fonctionne c'est déjà ça :D

si ce n'est qu'une histoire de taille, en voici un plus court :

Code : Tout sélectionner

act = {
['On'] = {'1','Début d\'arrosage'},
['Off'] = {'0','Fin d\'arrosage'}
}
for name, status in pairs(devicechanged) do
	if name:sub(1,5) == 'Vanne' then
		trame=('RLY'..name:sub(-1)..act[status][1])
		chaine=act[status][2]
	break
	end
end
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
Deniss
Messages : 8
Inscription : 07 avr. 2017, 15:32

Re: Manipulation des Variables

Message par Deniss »

Ho ho, c' est noel avant l' heure :o .
Il est propre ton code, moi je dis j' achète... ça ressemble fortement à ce que je recherche.
Merci beaucoup pour ton aide vil1driver.
Répondre