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/

Domoticz, Raspberry et ImperiHome en français

Ajout du 26/03/2016 : Cette documentation n’est conservée ici que pour historique, une nouvelle version de Imperihome/MyDomoAtHome en NodeJS est maintenant disponible rendant ce qui est décrit ci-dessous obsolète , utilisez donc ce lien https://easydomoticz.com/?p=3269

 

Cet article est la mise à jour du post initial concernant la mise en place de la passerelle Imperihome sur Domoticz.

Ajout du 07/11/2015: Comment se connecter avec Imperihome depuis l’extérieur de notre domicile.

Correctifs sur l’installation de la passerelle : le 12/11/2015

Objectif :

Il existe un article sur le wiki anglophone de Domoticz http://www.domoticz.com/wiki/ImperiHome décrivant l’utilisation de ImperiHome sous Android avec notre plateforme de domotique préférée.

Je vous en propose ici une traduction libre agrémentée de mes remarques rencontrées lors de la configuration de cet outil.

L’installation est vraiment facile.

Les liens sur le site ImperiHome http://www.imperihome.com/fr/

Le lien sur l’appli Android https://play.google.com/store/apps/details?id=com.imperihome.lite&hl=fr

Une version pro avec des fonctionnalités additionnelles existe sur le PlayStore.

Un lien vers le wiki de Domoticz http://domoticz.com/wiki/ImperiHome

Un joli readme.md concocté par epierre https://github.com/empierre/MyDomoAtHom … /README.md

Ma gratitude à epierre et aux contributeurs du projet.

Généralités  :

Imperihome est une application pour smartphone qui s’intègre nativement à bon nombre de systèmes de domotique via une API génerique.

Contrairement aux autres applis existantes (Andromoticz par exemple) , ImperiHome est donc multiplateforme domotique.

La procédure ci dessous est faite pour ajouter à Domoticz une passerelle ImperiHome afin de permettre le pilotage via smartphone.

Cette passerelle agira comme une interface entre Domoticz et Imperihome et vice versa.

Il y a donc un Client (ImperiHome), une Passerelle (voir ci dessous l’install et configuration) et un Serveur (notre Domoticz). La Passerelle est un Web serveur REST avec son propre IP:port qui sera différent de celui existant déjà pour Domoticz.

Voila quelques screens tirés du wiki anglais de Domoticz.

Imperihome screen 1

Imperihome screen 2

Possibilités

Lire la suite

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

Préserver la carte SD ;Episode II, booter sur USB

episode2L’épisode II reprend quelque part après le premier de la serie.

Nous y avions vu comment limiter les écritures pour économiser la carte SD.

Dans ce nouvel opus, voyons comment passer une étape de plus en bootant sur une clé USB et en y déportant tout le système.

Pour être exact il y a une séquence de boot qui DOIT se dérouler sur la carte SD, c’est comme cela par construction du Raspberry, puis ensuite le raspberry monte une partition nommée root fs Linux et utilise les informations de ce root fs.

Un root fs contient applications, fichiers spéciaux d’accès aux périphériques, les fichiers de configuration, les données… C’est root fs qui fait tout le boulot sous Linux.

C’est donc lui que nous allons déplacer sur l’USB pour économiser notre μSD

Lire la suite

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

gpio readall mon amour

Comment dire, parfois , je suis pris d’un amour passionné pour un utilitaire, un bout de code, un script  …

Ce soir c’est gpio readall sur le Raspberry qui à toute mes faveurs

Bon c’est un vieux de la vieille que ce gpio mais à chaque fois que je m’en sert je dit merci à son/ses concepteurs

On a TOUT dans gpio readall et TOUT est dans gpio readall,

les numéros de WiringPi, les GPIO , les emplacements physiques , si on est Rev1 ou 2, le nom, l’état de chaque GPIO (si on est en input ou output sur ce GPIO, la value

Et combien de fois as t’on branché un truc sur le Gpio X et que on ne se souvient pas sous quel numéro le connait WiringPi

2014-09-04 22_29_56-mRemoteNG - confCons.xmloui, oui je sais que GPIO  peut servir aussi à agir sur les GPIO en gpio read, gpio write …

mais je suis moins ébahi que par la puissance et la beaute de  gpio readall  🙄

Plus d’infos sur les GPIO  sur  la doc de l’internet.

 

 

 

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

1-wire et Raspberry : le duo

On à vu précédemment comment recycler nos câblages téléphoniques inutilisés pour installer des sondes de température ds18b20 et effectuer la liaison au Raspberry.

Ici sont décrits les aspects linux de l’installation

Les modprobe

sudo modprobe w1-gpio
sudo modprobe w1-therm

permettent d’installer les drivers (pardon) gpio et therm pour le 1-wire.

Lire la suite

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