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/

Installer, configurer Domoticz sur un Raspberry Pi.

Une mise à jour de l’article concernant l’installation sur un Raspberry Pi de Domoticz à été faite.

Elle décrit dorénavant  tout le processus depuis le téléchargement de l’image, l’utilisation de putty, winscp, les optimisations de raspi-config et la mise en place d’une adresse IP fixe.

J’espère que les grands débutants trouveront le bonheur.

https://easydomoticz.com/domotique-comment-debuter/installation-de-domoticz-sur-raspberrylinux-debian/

La suite concernant l’utilisation de l’interface graphique est lisible ici https://easydomoticz.com/2490-2/

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

Mémento instructions shell bash

Cet article fait suite à  https://easydomoticz.com/domoticz-et-scripts-les-bases/ qui tentait de définir les bases du scripting. Ce second opus concerne les commandes Linux usuelles à connaitre pour piloter Domoticz via le shell bash.

Cette liste n’est pas exhaustive et n’empêche pas la lecture de site web spécialisés dans le shell Linux (OpenClassRoom par exemple à des très bons tutoriaux).

Pourquoi écrire des scripts ?

On à besoin d’écrire des scripts quand on commence à s’interfacer avec le monde extérieur, par exemple piloter un ampli via http, récupérer son calendrier google, gérer ses plantes vertes …

C’est la que l’on va avoir besoin d’envoyer des requêtes, récupérer et traiter le résultat, puis mettre à jour Domoticz via l’API JSON.

L’API JSON

« Dans Domoticz vous parlez tout le temps de l’API JSON qu’est ce que c’est ? »

Il s’agit d’un moyen de lecture et d’envoi de données depuis/vers Domoticz.

L’intérêt est de pouvoir interroger ou écrire des données, par le biais de requêtes http, depuis n’importe quel langage (shell, php, python, perl, Lua…) pour peu que l’on respecte le format imposé par Domoticz.

L’API est donc le dictionnaire des commandes que sait comprendre et exploiter Domoticz.

La référence de l’API est ici http://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s

Pour utiliser les fonctions de l’API à l’aide du shell Linux nous avons souvent besoin de commandes http, de récupérer des données extérieures…

Voici un petit mémo des commandes récurrentes:

Ecrire et rendre exécutable un script

Ou placer les scripts ?

Il n’y a pas d’emplacement privilégié du moment que domoticz puisse aller lire à cet endroit.

Toutefois les développeurs de Domoticz ont crée domoticz/scripts, domoticz/scripts/lua cela serait quand même logique de les utiliser.

Quitte à créer domoticz/scripts/python, domoticz/scripts/sh, domoticz/scripts/php pour faciliter la gestion des scripts.

Ce qui suit ne s’applique pas aux scripts LUA de domoticz/scripts/lua qui sont entièrement géres par Domoticz et à ce titre doivent correspondre à des “nommages” précis (script_time, script_device…)

Comment écrire un script ?

Tout d’abord quelques considérations générales.

  • Nommez votre script d’un nom explicite et pas toto.py mais clignotement_lampe_exterieur.sh
  • Utilisez les .sh à la fin du fichier, cela n’est pas obligatoire mais pour les pauvres êtres humains que nous sommes c’est mieux.
  • LA chose qu’il faut savoir c’est que votre script doit commencer par un shebang approprié, http://fr.wikipedia.org/wiki/Shebang, en effet les scripts sont des fichiers texte dont la première ligne devra être le shebang qui indique au système dans quel langage est rédigé le script et le chemin vers ce langage. Pour le shell c’est

Rédaction du fichier.

ouvrira un éditeur de texte qui vous permettra d’écrire vos commandes shell dans le fichier nommé monscript.sh.

  • CTRL k  : permet de couper des lignes.
  • CTRL u : de coller les lignes précédemment coupées.
  • CTRL x  : permet de quitter cet éditeur, une confirmation est demandée.
  • CTRL G : aide du logiciel pico.

Rendre exécutable ce script et le lancer

permet de rendre exécutable votre script.

le lancement se fait par un

voici quelques commandes que nous utilisons régulièrement dans des scripts bash.

Appeler une url http

Pour piloter Domoticz on doit appeler une requête http dont l’écriture nous est imposée par l’API Domoticz.http://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s

Ainsi pour allumer une lampe dont l’idx est 44

On utilise la commande curl en ligne de commande

Ou dans un script

envoie 25,60,2 (température, humidité, indice confort) dans l’idx 44 de mon Domoticz, ce qui à peu d’intérêt.

Affecter une variable shell bash

L’idée est de récupérer une valeur de quelque part puis de la réutiliser.

la définition et l’affectation de valeurs d’une variable est faite simplement par son nom.

son utilisation (affichage, tests) est préfixée par « $ »

ici je récupère « bleu », »blanc », ou « rouge » dans la variable tempo en appelant curl.

les tests sont faits sur $tempo= »bleu »

 Envoyer des données dans un fichier

N’importe quelle commande Linux peut être renvoyée à l’intérieur d’un fichier, il suffit de faire suivre la commande de > nom_du_fichier.txt.

l’affichage au lieu de se faire à l’écran se fait dans le fichier.

ainsi un ./domoticz > mon_fichier_log.txt envoie tous les messages Domoticz dans ce fichier.

Afficher des données d’un fichier, d’un port.

Pour afficher les données contenues dans un fichier texte, qui arrivent d’un port ttyXXX, on utilise la commande ‘cat’

affiche les données du port série ttyAMAO

affiche le contenu de ce fichier.

Manipulation de chaines

Extraire une chaîne de caractères entre deux positions précises:

On utilise les symboles ${}.

La syntaxe est ${chaine,position,longueur}

ainsi

affiche efg (3 caractères à partir du 4eme caractère)

http://pierrellensa.free.fr/dev/bash/www.bsdbooks.net/shells/scripting/fr/string-manipulation.html

Extraire un champ

Cas de figure un peu diffèrent de ci dessus, lorsque je reçois une chaine correctement formatée avec des séparateurs entre chaque champ.

Soit des données telles que :

les champs sont séparés par un espace (3A40espacemixerespacevolumeespace30)
un cut -d’  ‘ -f3 renvoie le 3eme champ de la chaine soit « volume »
et donc cut -d’  ‘ -f4 affiche le 4eme champ soit « 30 » (Attention à l’espace au milieu des simples ‘)

le -d’ ‘ indique le caractère de séparation des champs, ainsi si les champs sont séparés par un caractère @

3A40@mixer@volume@30

cut -d’@’ -f3 affiche  « volume »

 

To be continued

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