Les contributeurs au développement de Domoticz nous font commencer l’année avec une belle évolution; à savoir : un éditeur de scripts Lua intégré directement à Domoticz ainsi que la conservation de ces nouveaux scripts Lua dans la base de données de Domoticz.
La version V2.4025 apporte ces modifications.
L’éditeur de scripts
L’éditeur de scripts autrefois destiné aux scripts Blockly vient donc d’évoluer en apportant un éditeur Lua intégré.
Maintenant lors de la création d’un script nous aurons le choix entre la création d’un Blockly ou d’un Lua
On accède à l’éditeur via « Réglages »/ »Plus d’options »/ »Evénements ».
Un autre type nommé « All » déclenche le script en question dès que N’IMPORTE LEQUEL DES EVENEMENTS SE PRODUIT (toutes les minutes, au changement d’une variable, à une mise à jour d’un périphérique, au changement d’état du panel de sécu), donc en fait en permanence ou quasiment.
Lors de la rédaction de nos scripts Lua une liste de sélection de mots apparait dés lors que vous tapez quelque chose, (auto-complétion) vous y retrouverez les noms de vos matériels Domoticz , les mots clés Lua, vos fonctions…
Il supporte le drag& drop de texte.
Le masquage/déroulement de fonctions par les flèches à droite des numéro de ligne, dont le repliement est marqué par un indicateur violet tout à droite.
Les lignes sont numérotées et en bout de ligne un marqueur rouge indiquera que la ligne en cours n’a pas une syntaxe correcte.
Sous Firefox, mais pas sous Chrome, le clic droit permet de changer le thème de fond et d’inactiver l’auto-complétion.
Ces scripts sont dorénavant conservés dans la base de données de Domoticz (table EventMaster)
N.B Vos anciens scripts Lua (ceux de /domoticz/scripts/lua) NE sont pas concernés, ils ne sont pas éditables ici, ni conservés dans la base de données.
Ici pour faire suite nous allons prendre un exemple que nous allons dérouler et complexifier étape par étape.
L’exemple que je souhaite détailler ici part du fait que je possède un capteur de luminosité, des volets roulants. Je voudrais que lorsque la luminosité descend en dessous de 170 et que il est plus de 17h30, fermer tous les volets automatiquement. 😯
N.B :Pour simplifier j’ai rassemblés tous (!) mes volets roulants au sein d’un groupe (une scène au sens Domoticz) pour pouvoir les commander tous ensemble.
Dans un pseudo langage on pourrait écrire :
A chaque fois que la valeur de mon capteur de luminosité change
je regarde si il est plus de 17H30
ET si
elle est inférieure a 170
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 en permanence alors qu’ils le sont déjà.
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à.
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
Les créateurs du lapin connecté bien connu ont développé une nouvelle invention « Mother » et ses petits cookies.
Les cookies sont des capteurs polyvalents connectés à leur « Mother », elle même reliée au cloud.
La société commercialisant cet objet connecté se nomme sen.se
Dans l’article précédent nous avons vu comment récupérer une clé d’API sen.se, créer les widgets Domoticz, etc…
Voyons ici comment installer, configurer le script python de récupération.
Généralités
Vous trouverez plus loin un script python destiné à récupérer les données POUR 1 seul COOKIE.
Si vous envisagez de gérer plusieurs cookies, il faudra recopier le script plusieurs fois sous des noms différents (celui du cookie par exemple) et faire les paramétrages des widgets Domoticz dans chaque script.
N.B : Il existe une bibliothèque spécifique python sense dans un github. J’ai fait le choix de ne pas l’utiliser car autant l’API sen.se est bien décrite et documentée que cette bibliothèque est pauvre en littérature.
Installation
Si ce n’est déjà fait, installer python et pip par un
puis les bibliothèques ssl pour https, nécessaires pour interroger sen.se.
sudo pip install requests==2.5.3
sudo pip install requests[security]
et si cela ne marchait pas (erreurs SSL lors du lancement du script) faites
sudo pip install pyopenssl ndg-httpsclient pyasn1
L’intégration de ces 3 dernières bibliothèques ralentit considérablement les scripts écrits en python 2 , python 3 donne des temps d’exécution bien plus rapides.
LA solution serait de convertir le script en python3 ou d’atttendre une mise à jour de python2 qui corrigerait ce phénomène.
Le script python
Il n’est pas hyperpythonisé pour qu’il puisse être compréhensible.
Il est téléchargeable ici https://easydomoticz.com/scripts/cookie1.py
Créez un fichier .py au nom de votre cookie par exemple mon cookie se nommant « golden eyes », je choisis de nommer le script golden.py.
Copiez/collez le script dans votre nouveau fichier.
Examinons le contenu du fichier.
La config Domoticz
Tout d’abord arrivent les ip,port, user/password de Domoticz.
Comme j’utilise beaucoup de scripts python j’ai crée, une fois pour toute, un fichier nommé config_Domoticz.py contenant tous les paramètres usuels de ma configuration Domoticz que j’importe systématiquement à chaque nouveau développement.
Voila la structure du config_Domoticz.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# les parametres de Domoticz
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
domoticz_ip='192.168.1.82'
domoticz_port='8080'
domoticz_user=''
domoticz_password=''
Créez ce fichier sous le nom de config_Domoticz.py copier/coller les lignes ci-dessus, modifiez suivant votre installation , les ip, port, user,password.
Mais ceci n’est pas obligatoire, bien que pratique.
Vous verrez dans le script python que l’on peut les encoder directement ou faire référence à ce fichier de paramètres (config_Domoticz.py) que l’on importe et qui fournira ces données. Supprimez le bloc qui n’est pas nécessaire ou commentez le par des # en décommentant l’autre.
~~~~~~~~~~ Parametres Domoticz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
domoticz_ip='192.168.1.82'
domoticz_port='8080'
user=''
password=''
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~ Parametres Domoticz importes depuis le fichier config_Domoticz.py ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
########### import de mes parametres Domoticz #################################
#import config_Domoticz
#domoticz_ip=config_Domoticz.domoticz_ip
#domoticz_port=config_Domoticz.domoticz_port
#user=config_Domoticz.domoticz_user
#password=config_Domoticz.domoticz_password
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mode debug et param
La ligne debug=0 peut être modifiée en debug=1 pour afficher les URL lues de chez sen.se et les URL que nous écrirons dans Domoticz.
fparam=0 , le passage à 1 de cette variable permet d’avoir quelques indications sur les widgets à créer.
Repassez ces 2 variables à 0 une fois débuggé l’ensemble.
les idx des widgets
Il s’agit du bloc ci-dessous :
#~~~~~~~~~~~ Parametres des widget Domoticz~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### Parametrage des idx des widget de Domoticz ##########################
## creer un widget 'compteur' poubelle et affecter a son idx tous les parametres
## non desires
periph_idx= { 'Motion_durationSeconds' : 11,
'Motion_numberMovements' : 13,
'Motion_avgIntensity' : 14,
'Alerte' : 6,
'Presence' : 10,
'Temperature' : 8,
'Batterie' : 7,
}
##################################################################################
Dans l’article précédent nous avions crée des widgets destinés à recevoir nos valeurs et avions noté leurs idx Domoticz.
Nous allons reporter ces idx en face de chaque paramètre (nommé Event chez Sen.se, regardez l’api sen.se ou l’article précédent pour la signification de ces events)
Ne supprimez pas de ligne dans ce bloc.
Si vous ne désirez pas certaines valeurs, mettez un chiffre bidon, mais gardez les textes tels qu’ils sont.
Ou alors créez un compteur « poubelle » et affectez son idx à tous les compteurs que vous ne voulez pas afficher.
Ainsi si j’ai un compteur caché nomme $dechets dont l’idx est 44 , les 3 valeurs de motion et la batterie ne seront pas affichés dans Domoticz grâce à