Un éditeur de scripts Lua intégré à Domoticz

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

ed_lua

On accède à l’éditeur via « Réglages »/ »Plus d’options »/ »Evénements ».

 

Le sélecteur permet de choisir le type de script Lua ou Blockly et d’affecter une catégorie entre Device, security, time,variables , ces type correspondent au types d’événements déclencheurs de scripts Lua dans Domoticz . c.f la référence aux noms usuels des scripts Lua : script_devices, script_security, script_time et script_uservariable

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…

 

ide_lua2

  • 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.ide_lua32
  • Les lignes sont numérotées et en bout de ligne un marqueur rouge error 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.
  • Plein de raccourcis clavier existent, la liste complète ici https://github.com/ajaxorg/ace/wiki/Default-Keyboard-Shortcut  (merci Vil1Driver)

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.

Recopiez les ici par des copier/coller si besoin.

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Mon premier script Lua dans Domoticz : La mise en oeuvre

Cet article fait suite à deux autres permettant de poser les bases du langage Lua dans Domoticz.

Le premier  (https://easydomoticz.com/point-scripts-lua/)  décrivait quels étaient les principes de fonctionnement des script Lua.

Le second donnait quelques notions de langage.

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. 😯

fenetres_maison

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à.

Lire la suite

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Mon premier script Lua dans Domoticz : Les fondations

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

idees

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à.

Lire la suite

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Le point sur les scripts lua de Domoticz

Vous le savez logo_domoticzincorpore le langage Lua

au même titre que  wc

ou bien fc

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

Lire la suite

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Mother & Cookies Sen.se : intégration dans Domoticz 2eme partie

Les créateurs du lapin connecté bien connu ont développé une nouvelle invention « Mother » et ses petits cookies.

Mother

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

sudo apt-get install python	 	
sudo apt-get install python-pip

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.

A ce jour un bug est ouvert https://github.com/pyca/pyopenssl/issues/137

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 à

periph_idx= { 'Motion_durationSeconds' : 44, 	 	 
 'Motion_numberMovements' : 44,	 	 
 'Motion_avgIntensity' : 44,	 	 
 'Alerte' : 6,	 	 
 'Presence' : 10,	 	 
 'Temperature' : 8,	 	 
 'Batterie' : 44,	 	 
 }	 	 
##################################################################################

Les paramètres de chez sen.se

Ensuite nous  configurons les paramètres de notre compte sen.se

La clé d’api (c.f le 1er épisode ou https://sen.se/board/ ) puis le nom du cookie (c.f le 1er épisode ou https://sen.se/board/ )

# la cle API
sense_api_key = '5qddhhhjtddsj443EFGTYGghgg35RDZfff'
# cookie_id
cookie_name='golden eyes'

Utilisation du script python.

chmod +x golden_eye.py
./golden_eye.py pour le lancer

Vérifiez, vérifiez et vérifiez que tous les widgets sont correctement alimentés.

Une fois correct placez une ligne dans le crontab  à la fréquence que vous désirez par un crontab -e

*/10 * * * * root /domoticz/scripts/golden_eye.py

Cette ligne déclenche le script golden_eye.py toutes les 10 minutes

A ce sujet je constate que les envois de données ne se font pas régulièrement mais à chaque fois que une valeur change pour ce cookie.

Le script python ne récupère QUE la valeur la plus récente.

Merci à Knox du forum pour sa demande initiale, sa participation aux tests et sa relecture attentive.

J’espère que cet article vous prouvera une fois de plus que : Nobody loves me but my mother.

et pour les amateurs de blues | bd
http://zepworld.blog.lemonde.fr/2015/05/18/b-b-king-moi/

 

P.S :Et vous qui êtes le petit cookie de votre Mother, n’oubliez pas de lui souhaiter sa fête le 31 Mai 😆

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/