Nous avons vu précédemment https://easydomoticz.com/point-scripts-lua/ quels sont les principes de fonctionnement des script Lua au sein de Domoticz, voyons dans cet article les premières base de la rédaction de scripts puis nous prendrons un exemple que nous allons dérouler et complexifier de bout en bout afin de voir quelques instructions.
Les bases des scripts : Avoir les idées claires
Avant toute chose, il faut que vous ayez les idées claires concernant les actions que vous devez réaliser, prenez un papier et un crayon et écrivez en français ce que vous devez faire.
Partant du fait que je possède un capteur de luminosité, des volets roulants que j’ai tous rassemblés dans un groupe (une scène au sens Domoticz) pour pouvoir les commander tous ensemble, je voudrais que lorsque la luminosité descend en dessous de 170 et que il est plus de 17h30, fermer tous les volets.
Ce qui pourrait commencer à se traduire par :
- A chaque fois que la valeur de mon capteur de luminosité change
je regarde si elle est inférieure a 170
ET si
il est plus de 17H30
ALORS
je passe le groupe des volets à ON
Ce qui signifie qu’il nous faut un script basé sur les devices puisque je cherche à déclencher tout cela lorsque la luminosité change, il faudra récupérer la valeur de notre capteur , la comparer à un seuil, aller chercher l’heure actuelle la comparer à un seuil horaire, puis passer le groupe de volets à ON.
N.B : il y a un petit bug de conception car une fois que les volets vont être fermés, si j’allume puis éteint la lumière de mon salon, la luminosité va changer, il sera plus de 17h30 et on tentera de fermer les volets alors qu’ils le sont déjà.
Domoticz et Lua
Voyons quelques fonctions de base en Lua.
Rappel
N’oubliez pas que les scripts Lua peuvent se déclencher suivant 4 types d’événements :
- toutes les minutes,
- au changement d’état d’un des périphériques,
- au changement d’état d’une variable,
- au changement d’état du panel de sécurité.
Quelques instructions utiles
Découvrons les quelques instructions dont nous aurons besoin ici et tout le temps.
Afficher quelque chose
Dans Domoticz le SEUL ENDROIT (en dehors des widgets bien entendu) ou l’on puisse afficher quelque chose est le log Domoticz (celui du menu « Réglages/Log » ) ou alors en affichage depuis la ligne de commande Linux par un lancement manuel de ./domoticz.
Pour afficher on utilisera l’instruction print ()
print ("coucou")
affichera le texte coucou dans le log
print (temp_chambre_enfant_1)
Remarquez que il n’y a pas de guillemets autour de temp_chambre_enfant_1 ce qui veut dire que Lua va aller chercher la valeur que contient la variable nommée temp_chambre_enfant_1 (pour peu que j’ai récupéré cette valeur avant).
Autre exemple :
print("La Température de la chambre d'enfant numéro 1 est : " .. temp_chambre_enfant_1 .. " °C" )
affichera dans le log le message suivant :
La Température de la chambre d'enfant numéro 1 est : 19.5 °C
car les .. permettent de concaténer, d’ajouter plusieurs chaines entres elles, comme ici le texte « La Température bla bla » s’ajoute à une variable contenant quelque chose (temp_chambre_enfant_1) puis on y ajoute encore « °C »
Ecrire des commentaires ou empêcher une ligne de programme de s’exécuter
Toute ligne commençant par un double tiret — n’est pas exécutée par Lua, cela sert à mettre des explications dans vos programmes ou à empêcher cette ligne d’être exécutée , par exemple vous aurez mis plein de print (« coucou ») pour debugger , en ecrivant — print (« coucou ») cette ligne est « inhibée ».
Recevoir des valeurs issues de Domoticz : Les tables
Comment recevoir/interroger Domoticz en Lua pour récupérer, agir sur telle ou telle valeur ?
Il faut savoir que Domoticz met à la disposition de Lua plusieurs tables nous allons pouvoir interroger.
Par exemple
- l’interrogation de la table devicechanged[‘peripherique’] « saura » nous dire si le ‘peripherique’ à changé de valeur ou d’état depuis la dernière fois.
Ici une précision s’impose :
Pour un capteur, même si on à exactement la même valeur que précédemment, (la valeur n’a pas changé), il y a eu toutefois une mise à jour de l’état dans Domoticz , donc le script se déclenche.
Si j’ai un script qui se lance lorsque j’allume ma lampe, si j’appuie 2 fois sur On, le script se lancera 2 fois..
- la table otherdevices_svalues contiendra la dernière valeur obtenue de [‘peripherique’].
- la table otherdevices_lastupdate me donnera la date et l’heure de la dernière modif d’état de ce périphérique.
Attention :
Sachez que suivant le type de script vous accéderez ou pas a telle ou telle table.
- Les scripts_device utilisent 6 tables de Domoticz: devicechanged, otherdevices, otherdevices_lastupdate, otherdevices_svalues, uservariables et uservariables_lastupdate
- Les scripts_variable : 6 tables : otherdevices, otherdevices_lastupdate, otherdevices_svalues, uservariables, uservariables_lastupdate et uservariablechanged
- Les script_time connaissent 5 tables Domoticz : otherdevices, otherdevices_lastupdate, otherdevices_svalues, uservariables et uservariables_lastupdate
Cela signifie que dans un script_time_xxxx.lua si j’utilise la fonction devicechanged j’aurais une erreur :Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_xxxx.lua:9: attempt to index global ‘devicechanged’ (a nil value)
Pour plus de détails les plus assidus iront lire cette portion du Wiki officiel https://www.domoticz.com/wiki/Events#Using_the_events_system
Nous en savons assez ( 😆 ) pour commencer quelque chose.
Rendez vous au prochain épisode pour les T.P
Bonjour
Parfait, nickel pour moi ce TP sur les scripts ! Je ne suis pas du tout un geek et le monde de Linux, Json et autres m’est complètement étranger.
Je trouve cette présentation tres didactique.
Vivement la suite.
Merci encore
Bonsor
Parfait, cela me fait plaisir que cela puisse rendre service ou donner envie.
More to come …
Bonsoir
En effet vous avez bien lu et votre remarque est exacte.
C’est pour cela que j’ai noté au sein de l’article
Je n’ai pas voulu compliquer encore en utilisant l’écriture/lecture de variables Domoticz