Commandes de bases pour les scripts lua

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 <\>.
Jose
Messages : 63
Inscription : 25 sept. 2014, 21:40

Commandes de bases pour les scripts lua

Message par Jose »

Bonjour à tous,

Je cherche la syntaxe des commandes permettant l’exécution de scripts lua dans domoticz. On trouve bien sur le net quelques tuto pour le language lua mais rien de bien concret pour son adaptation sur domoticz.

Je pinaille pour mettre à jour des variables perso en fonction d'un événement. Un exemple vite fait:

Code : Tout sélectionner


commandArray = {}

VAL_QTE_SAC = uservariables["VAL_QTE_SAC"]
VAL_CPT_GRANULE_TOTAL = uservariables["VAL_CPT_GRANULE_TOTAL"]
VAL_CAPTEUR_RFID = uservariables["VAL_CAPTEUR_RFID"]

if VAL_CAPTEUR_RFID == 1 then
        VAL_CPT_GRANULE_TOTAL = VAL_CPT_GRANULE_TOTAL + VAL_QTE_SAC

        print("****** GRANULES TOTAL " .. VAL_CPT_GRANULE_TOTAL)
        
	-- c est la que ca ne va plus. Comment faire pour mettre a jour cette variable dans domoticz ?
	-- je ne connais pas la syntaxe :(  
        update uservariables ["VAL_CAPTEUR_RFID"] = '0'
end

return commandArray
Le code n'est pas terminé vu que je n'arrive pas à franchir cette étape.

Je prends vos conseils avec grand plaisir.

José
Dernière modification par Jose le 07 févr. 2015, 11:35, modifié 1 fois.
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Commandes de bases pour les scripts lua

Message par patrice »

Bonjour
La syntaxe est un

commandArray['Lum_Exterieur']='Off'

exemple :

print (difference)
if (otherdevices['Lum_Exterieur'] == 'On' and difference > 10) then

commandArray['Lum_Exterieur']='Off'
end
return commandArray

il faut assigner commandArray puis à la fin du script faire un
return commandArray
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
Jose
Messages : 63
Inscription : 25 sept. 2014, 21:40

Re: Commandes de bases pour les scripts lua

Message par Jose »

Bonsoir Patrice,

Bon j'ai compris pour les interrupteurs et autres devices mais je bloque particulièrement sur la mise à jour de variables perso.
Voici le code :

Code : Tout sélectionner

commandArray = {}

-- affichage des variables declarées dans domoticz
print(uservariables["VAL_CAPTEUR_RFID"])
print(uservariables["VAL_QTE_SAC"])
print(uservariables["VAL_CPT_GRANULE_TOTAL"])

-- attribution pour rendre les calculs plus simples
Rfid=uservariables["VAL_CAPTEUR_RFID"]
Total=uservariables["VAL_CPT_GRANULE_TOTAL"]
Sac=uservariables["VAL_QTE_SAC"]

print ("-+-+-+-+-")

-- vérification 
print(Rfid)
print(Sac)
print(Total)


-- si passage rfid à 1
if Rfid == 1 then
        Total = Total + Sac
        print("Qte totale:" ..Total)
        --- Transmission de la valeur de Total à la variable domoticz (Pas marche), l'autre non plus
        commandArray["VAL_CPT_GRANULE_TOTAL"] = Total
        commandArray["VAL_CAPTEUR_RFID"] = 0
end

print("****** GRANULES TOTAL " ..  uservariables["VAL_CPT_GRANULE_TOTAL"])

return commandArray
Je suis certain que je me complique la vie quelque part.

Voici les logs

2015-01-11 00:13:06 LUA: 1
2015-01-11 00:13:06 LUA: 15
2015-01-11 00:13:06 LUA: 100
2015-01-11 00:13:06 LUA: -+-+-+-+-
2015-01-11 00:13:06 LUA: 1
2015-01-11 00:13:06 LUA: 15
2015-01-11 00:13:06 LUA: 100
2015-01-11 00:13:06 LUA: Qte totale:115 <=== On voit que le calcul se fait bien
2015-01-11 00:13:06 LUA: ****** GRANULES TOTAL 100
2015-01-11 00:13:06 Error: commandArray should only return ['string']='actionstring' or [integer]={['string']='actionstring'}
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Commandes de bases pour les scripts lua

Message par patrice »

bonjour

Je ne suis pas un expert de lua et je n'ai rien sous la main pour tester mais il me semble qu'il faut convertir ta valeur en chaine avant de l'envoyer dans le command array
Je crois que c'est tostring(variable)

cherche dans le forum dans les scriot tu devrais trouver des pistes
à moins que JackSlayter soit dans le coin pour te répondre ....
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
Jose
Messages : 63
Inscription : 25 sept. 2014, 21:40

Re: Commandes de bases pour les scripts lua

Message par Jose »

Bonsoir,

J'ai essayé également comme tu l'avais décrit dans ton article sans succès. Si JackSlayter passe dans le coin, je serai preneur d'un petit cours de Lua.
En attendant, je n'ai fait en python (sans utiliser les variables de domoticz) mais de manière très classique. L'essentiel c'est que ça marche. :D

Bonne semaine
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Commandes de bases pour les scripts lua

Message par vil1driver »

Jose a écrit : On trouve bien sur le net quelques tuto pour le language lua mais rien de bien concret pour son adaptation sur domoticz.
Salut,

Un petit cours google peut être ????

Il y a un wiki et un forum officiel !

Est-ce si compliqué de taper wiki domoticz uservariable ?

https://www.google.fr/search?q=wiki+dom ... ervariable

Le Premier lien donne la réponse, faut ptète faire un effort !

Code : Tout sélectionner

commandArray['Variable:MyVar']= tostring(uservariables["MyVar"] +25)
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
Jose
Messages : 63
Inscription : 25 sept. 2014, 21:40

Re: Commandes de bases pour les scripts lua

Message par Jose »

Tiens et si tu gardais tes réflexions pour toi ?
hobbe
Messages : 111
Inscription : 15 déc. 2014, 15:33

Re: Commandes de bases pour les scripts lua

Message par hobbe »

Jose a écrit :Je cherche la syntaxe des commandes permettant l’exécution de scripts lua dans domoticz. On trouve bien sur le net quelques tuto pour le language lua mais rien de bien concret pour son adaptation sur domoticz.
L'article du wiki "By adding your own scripts to the scripts/lua/ dir in your domoticz installation folder" répond à tes questions, mais en anglais.

Grosso-modo, Domoticz te fournit un ensemble de tableaux : celui avec les périphériques qui ont changé d'état (devicechanged), celui avec tes variables Domoticz (uservariables) et autres périphériques (otherdevices).

Les valeurs de ces tableaux ne changent pas, donc ton dernier print affiche encore la valeur originale

Code : Tout sélectionner

print("****** GRANULES TOTAL " ..  uservariables["VAL_CPT_GRANULE_TOTAL"])
L'autre concept est la liste des comandes que tu demandes à Domoticz d'effectuer à la fin de ton script.
Il faut les enregistrer dans le tableau commandArray.

Ces commandes ont une syntaxe particulière résumée dans l'article cité ci-dessus.
Par exemple :
  • commandArray['Lumière']='On' -> allumer l’interrupteur "Lumière"
  • commandArray['SendNotification']='subject#body#0' -> envoyer une notification
  • commandArray['SendEmail']='subject#body#your@email.com' -> envoyer un mail
  • commandArray['OpenURL']='www.yourdomain.com/api/movecamtopreset.cgi' -> ouvrir une URL, fait un appel HTTP
  • commandArray['Variable:MyVar']='Some value' -> assigner la valeur 'Some value' à la variable 'MyVar'
Donc pour assigner la valeur de Total à ta variable VAL_CPT_GRANULE_TOTAL, il faut faire :

Code : Tout sélectionner

commandArray["Variable:VAL_CPT_GRANULE_TOTAL"] = Total
Bon courage !
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Commandes de bases pour les scripts lua

Message par vil1driver »

[edit]
@José,

Je te présente mes excuses,
ma réponse était déplacée,
je me suis montré cassant, j'en suis désolé.


Donne un poisson à un homme, il aura à manger pour un jour; apprends-lui à pêcher, il aura à manger [...] pour tous les jours







[/edit]
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
Répondre