Vous le savez incorpore le langage Lua
Essayons, nous aussi, de jouer avec et de préciser les bases de l’utilisation de ces scripts qui parfois déroutent les débutants.
Il ne s’agit pas ici de faire un cours de lua mais de détailler l’intégration de ces scripts dans Domoticz.
La page source sur le wiki Domoticz https://www.domoticz.com/wiki/Events#Using_the_events_system
Généralités
Il en existe de 4 types différents basés sur les événements qui surviennent sur le matériel, le temps, les variables, le panel de sécurité. Par événement on entend toute modification qui survient.
Il est important de comprendre (et je le répéterai) que TOUS les scripts événements se déclenchent à toute modification sur l’événement correspondant (changement d’état d’un des matériels, toutes les minutes, à chaque changement d’une variable).
- Tous les scripts Lua se trouvent dans le dossier domoticz/scripts/lua
- Ils finissent par l’extension .lua sinon ils ne sont pas exécutés par Domoticz
- Pour nos amis modifiant les fichiers sous Windows, enregistrez les en UTF8 sans BOM (Notepad++)
- Ils n’ont pas besoin d’être chmodés (pas de chmod +x, +777) chrgp … non plus
- Les scripts ne sont pas lancés en tache de fond, il sont lancés par Domoticz et n’ont que 10 secondes pour faire leur boulot, passé ce temps Domoticz les tue. En vertu de quoi évitez les sleep (20), d’interroger des services web qui répondent trop lentement …
- Les noms à utiliser à l’intérieur des scripts sont ceux donnés dans la colonne Nom des périphériques, respectez EXACTEMENT l’orthographe majuscules/minuscules/espaces/accent. Et pour ne pas être embêtés bannissez les espaces/accents/caractères bizarres (‘/&…) en renommant votre matériel
- Les valeurs reçues des capteurs ne sont pas modifiables via Lua, utilisez JSON
- Tous les script doivent contenir un bloc commandArray={} puis return commandArray contenant les instructions à effectuer
Ex :
commandArray = {} print('coucou') return commandArray
N.B. Les instructions print sont affichées dans le log de Domoticz.
Les différents types de scripts Lua
Il en existe donc de 4 types
- Les scripts device basés sur le changement d’état du matériel : Le nom de ces script est script_device_xxxxxxxxx.lua
- Les scripts basés sur le temps , il s’exécutent toutes les minutes. Ces script DOIVENT se nommer script_time_xxxxxxxx.lua
- Les scripts basés sur le changement de valeur d’une variable Domoticz: Ces script DOIVENT se nommer script_variable_xxxxxx.lua
- Les script bases sur le panel de sécurité : script_security_xxxxxx.lua qui réagit au security panel de Domoticz.
Vous remarquerez que rien dans le nom du fichier ne fait référence au matériel concerné, toutefois pour des facilités de lecture l’usage veut que dans le nom du script_ on mette le nom du matériel après les tirets bas script_time_EDF.lua, script_device_CPU_Usage.lua.
Il est important de comprendre que TOUS les scripts évènementiels se déclenchent à tout événement ci dessus :
Lorsque n’importe quelle variable change, TOUS les script_variable sont passés en revue pour voir si il y a quelque chose à faire avec la variable qui vient de changer de valeur.
Lorsque n’importe quel matériel change de valeur TOUS les script_device sont passés en revue pour voir si il y a quelque chose à faire avec ce matériel qui vient de changer de valeur. Cela est vrai avec les interrupteurs qui passent de On à Off mais aussi avec les capteurs dont la valeur se modifie au cours du temps.
Lorsque la minute change, ce qui arrive toutes les minutes 🙂 , TOUS les script_time sont lus pour voir si il y a quelque chose à faire avec.
Comment gérer les scripts Lua
Vous voyez donc que rapidement et sans précaution on peut avoir de nombreux scripts qui se déclenchent à mauvais escient. C’est pour cela que votre script doit commencer par l’instruction if (devicechanged[‘Materiel 1’] afin de quitter le plus rapidement possible le script en question si le matériel Materiel 1 n’a pas changé de valeur et passer ainsi au script_device suivant
Illustration :
commandArray = {} if (devicechanged['Materiel 1'] == 'On' ) then commandArray['Materiel 2']='On' end return commandArray
- Les noms font référence à la colonne Nom des périphériques, respectez EXACTEMENT l’orthographe majuscules/minuscules/espaces/accent. Et pour ne pas être embêtés bannissez les espaces/accents/caractères bizarres (‘/&…) en renommant votre matériel Ex: Lumiere_Exterieure sera mieux que Lumière Extérieure.
- Dans les scripts les noms doivent être entourés de simples guillemets ‘
- N’hésitez pas à placer dans le commandArray des print réguliers pour debugger tout ça.
val_rasp = tonumber(otherdevices_svalues['CPU_Usage']) print("cpu = "..val_rasp)
- Sans entrer dans les détails sachez que il y a deux instructions basiques à connaitre:
le devicechanged[‘XXXXXX’] qui permet de lancer le script et le otherdevices_svalues qui permet de récupérer la valeur, par exemple pour le matériel Cpu_Usage
commandArray = {} if (devicechanged['CPU_Usage']) then val_rasp = tonumber(otherdevices_svalues['CPU_Usage']) print("cpu = "..val_rasp) end return commandArray
- Le langage permet de gérer de nombreux éléments de Domoticz comme les scènes, les groupes, les dimmables, de faire du déclenchement aléatoire(RANDOM X), pour une durée déterminée en minutes (FOR 2) …
Quelques exemples tirés du Wiki :
commandArray['Switch']='On' commandArray['Scene:Livingroom']='On' commandArray['Group:Kitchen']='Inactive' commandArray['Keyfob']='Group On' commandArray['DimmableDevice']='Set Level 50' commandArray['SendNotification']='subject#body#0' commandArray['SendEmail']='subject#body#your@email.com' commandArray['OpenURL']='www.yourdomain.com/api/movecamtopreset.cgi' commandArray['Blinds']='On RANDOM 30' commandArray['Porch Light']='On FOR 2' commandArray['Variable:MyVar']='Some value' commandArray['Variable:MyVar']='Some value AFTER 3'
- On peut également appeler des modules systèmes tel que os.date pour avoir une date
local today = os.date("%A"),
lancer un programme externe paros.execute('/home/pi/domoticz/scripts/python/put_iot.py').
- Dans le dossier scripts/lua il y a des exemples de script time et script device dont on peut s’inspirer.
Références
Cet article n’est qu’un condensé de https://www.domoticz.com/wiki/Events#Using_the_events_system
D’autres discussions ici
https://easydomoticz.com/forum/viewtopic.php?f=10&t=929
et plus de discussions ici
https://easydomoticz.com/forum/viewforum.php?f=10
Le manuel de référence Lua http://www.lua.org/pil/contents.html
Cet article n’avait pas pour but l’exhaustivité du sujet mais de poser quelques base de départ.
J’espère qu’il vous aura donné envie d’en savoir plus et d’élucider quelques mystères.
comme le fait que lua signifie lune en portugais.
Merci pour cette « initiation » mais y a-t-il quelque part ou avoir des informations pour les scripts quand on est sous windows ?
Y a-t-il des trucs à installer pour par exemple utiliser curl etc….
Merci
Bonjour
Concernant Lua il n’y a rien a faire puisque ce langage arrive avec Domoticz.
Ensuite si tu souhaite utiliser d’autres langages tels que python, perl, php il te faut installer la version Windows correspondante et faire attention que depuis ton Domoticz , ces langages soient accessibles (path à mettre a jour en conséquence)
Concernant curl il s’agit de fonction native Linux,mais tu peux trouver des curl.exe a installer dans ton repertoire de travail de tes scripts Domoticz et l’appeler dans tes scripts
Bonjour,
Il est bien cet article 🙂
Arrivant sur domoticz sur Synology, je découvre petit à petit. J’ai un gros problème avec les scripts, c’est que quand je veux écrire un nouveau fichier sur le synology depuis windows 10 grace à WinSCP, j’ai le message d’erreur suivant:
« scp: /volume1/@appstore/domoticz/var/scripts/lua/er: Permission denied »
Je suis connecté en admin avec WinSCP.
J’ai créé un répertoire MyScripts à la racine de domoticz (« /volume1/@appstore/domoticz/MyScripts ») et la j’ai bien le droit de copier de nouveaux fichiers mais cela ne marchera pas car tu indiques que les scripts doivent etre dans le repertoire lua.
J’ai essayé différents trucs sans succès (comme l’arret de Domoticz pendant la tentative de creation de fichier), est-ce que ce problème est connu?
Merci
Pierryck
Bonsoir
Il s’agit d’un probleme de droits non suffisants avec winscp, il faut utiliser un compte « root » avec plus de droits dans ces dossiers
Pingback: Domoticz : script Lua pour créer un affichage déporté OLED avec ESP Easy - Projets DIY
Bonsoir,
Très bon article.
J’aurai une petite question. J’aimerai savoir s’il est possible de lancer à partir d’un script LUA, un script Python mais avec la version Windows de domoticz ?
J’arrive bien à lancer mon script python depuis l' »Action On » et l' »Action Off » d’un interrupteur : « script://scripts\python/play.py scripts\python/lightDining_On.txt » mais impossible depuis un script LUA.
Merci
bonjour et merci
A priori cela devrait fonctionner
ton script lua doit faire un os.execute (chemin_complet_vers_ton_script\ton_script.py) pour pouvoir lancer autre chose que du lua
je ne connais pas le fonctionnement sous Windows
Si tu es à l’aise avec python utilise les plugin python qui ont l’avantage d’etre 100% python