LUA Debute 1 inter et 1 sortie

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 <\>.
daniel4860
Messages : 84
Inscription : 26 sept. 2016, 18:31
Localisation : Lapoutroie Haut-Rhin

Re: LUA Debute 1 inter et 1 sortie

Message 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.
Domoticz sur Raspberry sur lequel 3 sondes prennent la température.
Une Gpio Out fait basculer un relais pour enclencher un circulateur.
fcBourgogne
Messages : 172
Inscription : 31 mars 2020, 14:22

Re: LUA Debute 1 inter et 1 sortie

Message 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+
Raspberry PI5+ 1WIRE + I2C +ESP8266 +esp32
daniel4860
Messages : 84
Inscription : 26 sept. 2016, 18:31
Localisation : Lapoutroie Haut-Rhin

Re: LUA Debute 1 inter et 1 sortie

Message 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+
Domoticz sur Raspberry sur lequel 3 sondes prennent la température.
Une Gpio Out fait basculer un relais pour enclencher un circulateur.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: LUA Debute 1 inter et 1 sortie

Message 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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
daniel4860
Messages : 84
Inscription : 26 sept. 2016, 18:31
Localisation : Lapoutroie Haut-Rhin

Re: LUA Debute 1 inter et 1 sortie

Message 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
Domoticz sur Raspberry sur lequel 3 sondes prennent la température.
Une Gpio Out fait basculer un relais pour enclencher un circulateur.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: LUA Debute 1 inter et 1 sortie

Message par Keros »

Désolé, je ne l'avais pas vu dans tes premiers messages.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
fcBourgogne
Messages : 172
Inscription : 31 mars 2020, 14:22

Re: LUA Debute 1 inter et 1 sortie

Message 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+
Raspberry PI5+ 1WIRE + I2C +ESP8266 +esp32
daniel4860
Messages : 84
Inscription : 26 sept. 2016, 18:31
Localisation : Lapoutroie Haut-Rhin

Re: LUA Debute 1 inter et 1 sortie

Message 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+
Domoticz sur Raspberry sur lequel 3 sondes prennent la température.
Une Gpio Out fait basculer un relais pour enclencher un circulateur.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: LUA Debute 1 inter et 1 sortie

Message 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).
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: LUA Debute 1 inter et 1 sortie

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Répondre