Page 2 sur 3

Re: LUA Debute 1 inter et 1 sortie

Publié : 13 mars 2025, 13:29
par daniel4860
Je vais voir vos guides et reviendrais pour vous informer de mon avancement ou pas!
Je n' avais pas encore utiliser le LUA et je voudrais découvrir afin de pouvoir m'améliorer.
je ne trouve pas beaucoup d'aide sur l'Internet!
Bonne après midi.

Re: LUA Debute 1 inter et 1 sortie

Publié : 13 mars 2025, 17:28
par fcBourgogne
Re,

Ah désolé j'avais pas vu le moment où tu parles de la led du Gpio16 qui s'allume en Blocky.
Cela vient de ton script certainement, tu utilises ceci
-- Numéro du GPIO à contrôler (exemple: GPIO17)
local gpioPin = 16
ceci est un exemple que tu as pêché?

Chez moi la sortie Gpio est déclarée dans les Dispositifs, puis dans le script lua je le reprends comme ceci

Code : Tout sélectionner

local sirene = 'Sirenes'
ensuite la commande

Code : Tout sélectionner

commandArray[sirene] = 'On'
A+

Re: LUA Debute 1 inter et 1 sortie

Publié : 20 mars 2025, 10:27
par daniel4860
Bonjour a tous,
Mon but est toujours de commander une gpio avec un inter virtuel en LUA.
Après quelque recherche voici celui qui fonctionne:

Code : Tout sélectionner

commandArray = {}

local marche = "BPVirtuelGpio16"
local sortie = "Sortie16"

if (devicechanged['BPVirtuelGpio16'] == 'On' and otherdevices['Sortie16'] == 'Off') then
    print("Marche On")
	commandArray['Sortie16']='On'
	end
	
if (devicechanged['BPVirtuelGpio16'] == 'Off' and otherdevices['Sortie16'] == 'On') then
    print("Marche On")
	commandArray['Sortie16']='Off'

end

return commandArray
et celui qui ne fonctionne pas:

Code : Tout sélectionner

commandArray = {}

local marche = "BPVirtuelGpio16"
local sortie = "Sortie16"

print(marche)
print(sortie)

if (devicechanged['marche'] == 'On' and otherdevices['sortie'] == 'Off') then
    print("Marche On")
	commandArray['sortie']='On'
	end
	
if (devicechanged['marche'] == 'Off' and otherdevices['sortie'] == 'On') then
    print("Marche Off")
	commandArray['sortie']='Off'

end

return commandArray
ET le code avec if elseif:

Code : Tout sélectionner

commandArray = {}

local marche = "BPVirtuelGpio16"
local sortie = "Sortie16"

if (devicechanged['BPVirtuelGpio16'] == 'On' and otherdevices['Sortie16'] == 'Off') then
    print("Marche On")
	commandArray['Sortie16']='On'
elseif (devicechanged['BPVirtuelGpio16'] == 'Off' and otherdevices['Sortie16'] == 'On') then
    print("Marche Off")
	commandArray['Sortie16']='Off'

end

return commandArray
Faut-il toujours utilisez les noms définies des Interrupteurs, pourquoi je ne peut pas passez par des variables local?
A+

Re: LUA Debute 1 inter et 1 sortie

Publié : 20 mars 2025, 12:32
par Keros
Quand tu écris commandArray['sortie']='On', c'est le widget sortie qui est commandé.
Essaye d'enlever les guillemets pour que ce soit le valeur de la variable qui soit utilisée.

Re: LUA Debute 1 inter et 1 sortie

Publié : 20 mars 2025, 13:46
par daniel4860
Effectivement en enlevant tout les 'marche' 'sortie' ce qui donne:

Code : Tout sélectionner

commandArray = {}

local marche = "BPVirtuelGpio16"
local sortie = "Sortie16"

if (devicechanged[marche] == 'On' and otherdevices[sortie] == 'Off') then
    print("Marche On")
	commandArray[sortie]='On'
	
elseif (devicechanged[marche] == 'Off' and otherdevices[sortie] == 'On') then
    print("Marche Off")
	commandArray[sortie]='Off'

end

return commandArray
Cela fonctionne.
Merci

Re: LUA Debute 1 inter et 1 sortie

Publié : 20 mars 2025, 21:47
par Keros
Désolé, je ne l'avais pas vu dans tes premiers messages.

Re: LUA Debute 1 inter et 1 sortie

Publié : 21 mars 2025, 08:05
par fcBourgogne
Bonjour,

Tu dis:
et celui qui ne fonctionne pas:
Code : Tout sélectionner

commandArray = {}

local marche = "BPVirtuelGpio16"
local sortie = "Sortie16"

print(marche)
print(sortie)

if (devicechanged['marche'] == 'On' and otherdevices['sortie'] == 'Off') then
print("Marche On")
commandArray['sortie']='On'
end
Normal que ça ne marche pas, il faut enlever les ' ' quand c'est une variable déclarée tu aurais dû écrire:

Code : Tout sélectionner

if (devicechanged[marche] == 'On' and otherdevices[sortie] == 'Off') then
A+

Re: LUA Debute 1 inter et 1 sortie

Publié : 21 mars 2025, 13:35
par daniel4860
Bonjour,
Merci à tous du moins ceux qui me réponde et courage à ceux qui lisent.

J'ai effectivement enlever les ' et cela fonctionne avec la déclaration des local.
Quand j'avais déclarer la gpio dans le /etc/init.d/domoticz.sh, cela ne fonctionnais pas. Alors je l'ai aussi déclaré dans le /etc/rc.local, et là la gpio est reconnu et fonctionne.

Maintenant j'ai un autre petit problème, sur une ESP8266 j'ai un DHT22. Je récupére les valeurs de température et d’humidité dans un dispositif ou il m'affiche les deux valeurs.
Comment je peux faire pour récupérer uniquement la température dans une variable lua?

N'existe t'il pas un mode d’emplois LUA pour domoticz?

A+

Re: LUA Debute 1 inter et 1 sortie

Publié : 21 mars 2025, 21:04
par Keros
C'est au moment de la création du widget virtuel que tu indiques quel type de donnée, tu souhaites afficher.

Il y a quelques tutos Lua ici et là : j'ai essayé de regrouper les infos que j'ai dans mon petit guide "Débuter en programmation" (lien dans ma signature).

Tu peux aussi regarder le DzVent : là, il y a une documentation avec pleins d'explications, d'exemples et une grande majorité des commandes possibles (voir le wiki de DomoticZ).

Re: LUA Debute 1 inter et 1 sortie

Publié : 22 mars 2025, 07:07
par denis_brasseur
daniel4860 a écrit : 21 mars 2025, 13:35
Comment je peux faire pour récupérer uniquement la température dans une variable lua?
Tu peux utiliser :

Code : Tout sélectionner

otherdevices_temperature['NomDuDevice']
LUA commands