Domoticz prend l’air de Paris avec Airparif

« Atmosphère, atmosphère. Est ce que j’ai une gueule d’atmosphère » nous disait notre Domoticz à l’instar d’Arletty  dans Hotel du Nord.

Faisons donc prendre l’air à Domoticz en récupérant depuis le site de Airparif.com les mesures de pollution de la capitale.

pollution parisienne

Nous récupérons depuis une API airparif, 4 valeurs d’indice de pollution (indice global, NO2, O3 et pm10: qui sont les particules )

Un programme python est disponible sur le forum dans la section des scripts https://easydomoticz.com/forum/viewtopic.php?f=17&t=436

I – Prérequis

Ce script utilise 4 widgets Pourcentage qu’il faudra créer en tant que capteurs virtuels pourcentages dans le matériel
Dans la liste des périphériques il faudra les nommer avec la flèche verte (global, no2, o3, pm10) et noter leurs idx respectifs

Ce script nécessite le module python requests.

Pour l’installer

sudo apt-get install python-setuptools puis 
sudo pip install requests

Une fois téléchargé puis recopié sous le nom que vous voulez en .py , faites un chmod +x sur ce fichier

Ouvrez le et
Modiifez vos IP et ports, les éventuels user/password

puis affectez les idx de vos périphériques pourcentage virtuels dans cette partie du script :

periph_idx={'dz_indice_global': 52,
            'dz_no2' : 53,
            'dz_o3' : 54,
            'dz_pm10' : 55
            }

On lance ce script par ./le_nom_choisi.py
On le place dans un crontab -e à la fréquence voulue

Vous pouvez télécharger le script ici :

https://easydomoticz.com/scripts/airparif.py

 

Et pour les plus jeunes d’entre vous voici la vidéo de Hotel du Nord avec Arletty et son mythique « Atmosphère, Atmosphère »

 

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

Etats de périphériques au démarrage de Domoticz

Lors d’un arrêt inopiné et du redémarrage de Domoticz certains périphériques (entrées, sorties: GPIO de façon générale) se retrouvent dans un état X alors que le fonctionnement correct est Y : un switch est Off alors que son état devrait être On.

Un script Lua permet de forcer l’état de TOUS les périphériques à l’état qu’ils avaient précédemment (last state).Script qui est une script_time déclenché toutes les minutes.

Sauf que certains périphériques tels que les capteurs z-wave n’aiment pas que l’on leur force un état alors qu’il ne sont que emetteurs. On a alors l’erreur

2015-04-04 10:11:03.801 Error: OpenZWave: Internal Node ValueID not found! NodeID: 9 (0x09), instanceID: 0"

toutes les minutes et le périphérique en question n’est pas utilisable.

J’ai donc commis un script python destiné à remettre certains équipements précis à On ou Off et uniquement ceux mentionnés dans le script.

Le détail des opérations peut être trouvé sur le forum ici

https://easydomoticz.com/forum/viewtopic.php?f=17&t=456

Bon démarrage

demarrage

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/

Une gestion efficace des GPIO en python

Une petite note pour mentionner l'existence d'une bibliothèque python dont j'ai appris l'existence sur le forum grâce à Dr No.

Destinée à la gestion des GPIO elle est vraiment efficace, bien pensée, peu consommatrice de CPU, sachant gérer les input, les outputs, les mode up/down, le mode PWM...

Il s'agit du module RPi.GPIO installé de base sur les raspbian.

La doc bien que en anglais est très claire et bourrée d'exemples.

Un petit :

#!/usr/bin/python
import RPi.GPIO as GPIO

et le nirvana se profile à l'horizon.

 

Le wiki du project sourceforge est ici http://sourceforge.net/p/raspberry-gpio-python/wiki/Home/

 

Bref, j'ai testé et j'ai aimé.

PS : j'adore le

GPIO.wait_for_edge(channel, GPIO.RISING)

et le

do_something()
if GPIO.event_detected(channel):
    print('Button pressed')

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

Domoticz et Parrot flower power

flowerpower-brown

Non, non , il ne s’agit pas de ce à quoi vous pensez  😳

Un autre indice :

fertil_ico water_ico temp_ico sun_ico

Vous voyez ce n’était vraiment pas ce à quoi vous avez pensé.

fl2Encore que !

 

Bon, vous l’avez compris, une fois n’est pas coutume, nous allons parler de jardinage grâce au Parrot Flower Power, cet objet connecté qui permet de surveiller nos plantations.

Lire la suite

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