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/

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/

Nouveau système de notification

La version 2404 de Domoticz introduit une nouvelle gestion des notifications liées aux interrupteurs, capteurs, etc.

Le système de notification à été étendu en fonctionnalités et services puisque on peut dorénavant envoyer, pour un même événement,  plusieurs types de notification (mail,sms,http…) mais également paramétrer le contenu des messages de notification.

Examinons cela en précision.

Les notifications : rappels.

Quelques petits rappels : ce sont des messages, principalement destinés à nos smartphones, qui peuvent être envoyés au changement d’état d’un dispositif Domoticz (basculement d’un interrupteur, température supérieure à, inférieure à… ).

Plusieurs systèmes de notification sont disponibles que ce soit pour Iphone (Prowl et PushOver) ou pour Android (Mma, Pushover) et même pour Windows Phone (!) via Pushalot.

Ces services nécessitent  une inscription, les versions ‘free’ ne permettent de recevoir que X notifications par jour, variable suivant les fournisseurs.

L’utilisation de ces services est paramétrable dans le menu « Réglages/Paramètres/Notifications ».

Notifications_Domoticz

Vous pouvez depuis ici accéder aux sites web des fournisseurs de service puis copier/coller les clés d’utilisation qu’ils vous ont octroyées.

Concernant l’utilisation des notifications, les boutons « Notification » permettent de définir les critères d’alerte et depuis la version 2404, bien plus.

En effet, jusqu’à la version 2404, une seule notification pouvait être envoyée.

Maintenant plusieurs services peuvent être contactés pour une même notification, on peut envoyer des SMS par le biais de Clickatell, le contenu des messages envoyés est configurable.

Un lien nous renvoie vers clickatell ou 10 messages sms nous sont offerts, sinon c’est 5.1 centime le SMS (pour la France) une fois le compte ouvert.

Les champs HTTP Personnalisés/Action servent à pouvoir appeler un script ou une url en lui donnant des paramètres.

Ainsi imaginez que je veuille contacter un site web nommé messms.com qui nécessite une url de ce type :

https://www.messms.com/pushurl.php?username=mon_user_name&password=#mon_password&apikey=#ma_cle_secrete&from=#le_nom_de_l’emetteur&to=#le_numero_a_contacter&message=#mon_message

En remplissant comme suit ce formulaire , les champs FIELD1,2,3,4 et TO,MESSAGE sont remplacés par leur correspondance lord de l’envoi de la notification.

notifs2

Donc si votre fournisseur favori de SMS vous donne une url spéciale pour envoyer vos SMS , le paramétrage se fait ici dans le champ URL et les champs FIELD1234 permettre de définir vos user/password …

Si vous avez un autre système à la maison qui dialogue via http, envoyez lui vos notifications par ce biais.

Ce système permet aussi de passer des valeurs à un de vos propres scripts pour peu que celui gère correctement le passage de paramètres.

notifs

Voyez ici que le script home/pi/domoticz/scripts/envsms.sh est appelé et Domoticz « lui donne à manger » FIELD1,FIELD2, MESSAGE que le script utilise suivant sa logique. (Il y a bien 3 / après script:, ce n’est pas une erreur)

Le script ressemble à cela :

#!/bin/sh
curl -s -i -k "https://smsapi.free-mobile.fr/sendmsg?user=#FIELD1&pass=#FIELD2&msg=#MESSAGE"

il appelle l’url free ici par exemple et lui passe les 3 variables FIELD1,2;MESSAGE

N.B

En bas de l’écran de configuration des notifications il y a un paramétrage qui permet de définir la fréquence d’envoi des messages de notification afin d’éviter d’être  bipé en permanence par la température de son aquarium.

Par défaut une notification survenant sur un interrupteur est envoyée directement, alors que les capteurs attendront 12h pour vous renvoyer une nouvelle alerte.

notif_intervalles

Gérer les notifications

Sur chaque dispositif on peut assigner des notifications.

notif

L’écran suivant permet d’ajouter autant de notification et de moyen de les envoyer.

ajout_notif

Ainsi on voit ici que si la température est supérieure à 22 , j’envoie un email et une notification via nma (Android) avec le message « Température sup a 22 » et lorsque on est a 28 ° idem plus un sms clickatell avec le message « Temperature sup a 28 ».

Les notifications sur les switches sont configurables de la même manière.

Voila encore une joli avancée qui va nous éviter quelques scripts shell et python 😛

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

Cacher un widget dans Domoticz

Dans la série « Je me coucherai moins bête ce soir », voici un nouvel épisode, un simple truc qui permet de masquer un widget de l’interface web de Domoticz.

C’est tout simple :

En sélectionnant le plan $Hidden Devices et en y affectant les périphériques non désirés on peut les masquer de l’interface web. Cela se passe dans le menu « périphériques par emplacement » du menu des plans il suffit d’affecter un périphérique à la liste nommée $Hidden Devices.

Screenshot - 22032015 - 18:28:09

 

Une autre technique de « masquage » basée sur les noms existe.

Editez le widget concerné et placez un signe dollar ‘$’ devant son nom. Il disparaît.

2015-03-22 10_05_36

Il est toujours dans la liste des dispositifs et continue à faire le job (plannings, récupération de valeurs …), il est juste « pas affiché ».

2015-03-22 10_06_37

Si vous voulez le récupérer, depuis la liste des dispositifz, la flèche verte vous permet de le renommer et donc de supprimer le $ devant et ainsi de réafficher le widget en question et d’en récupérer tout l’historique d’ailleurs.

2015-03-22 10_07_19

2015-03-22 10_06_02

Cette manip me semble valable pour tous les widgets (bien que je n’ai pas tout testé)

Indiana,  lecteur attentif nous informe :

Attention toutefois : cette manip a pour inconvénient de changer le nom du switch et donc de rendre inopérable les scripts lua qui l’utilisent. Perso, je préfère les cacher en les mettant dans l’emplacement $$HiddenDevices dans le menu emplacements.

Merci de l’info.

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
    #! /bin/bash

Rédaction du fichier.

sudo pico monscript.sh

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

chmod +x monscript.sh

permet de rendre exécutable votre script.

le lancement se fait par un

./monscript.sh

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

curl 'http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=112&switchcmd=On&level=0'

Ou dans un script

#! /bin/sh
curl 'http://192.168.1.81:8080/json.htm?type=command&param=udevice&idx=44&nvalue=0&svalue=25;60;2'

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 « $ »

#!/bin/bash
tempo=$(curl -s "http://domogeek.entropialux.com/tempoedf/now")
echo $tempo

if [ $tempo = "bleu" ]
then
...
tempo=rouge

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’

cat /dev/ttyAMA0

affiche les données du port série ttyAMAO

cat domoticz.sh

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

chaine=abcdefgh
souschaine=${chaine:4:3}
echo $souschaine

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 :

3A40 mixer volume 30

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/