There are no translations available.


Les commandes SHELL sur ZiBASE Mini

 

 

 

Ce tutoriel est divisé en 3 parties :

A)  Exemple d'application de l'action "COMMANDER PAR SHELL" dans un scénario,

B)  Pilotage d'actionneurs virtuels par commande SHELL,

C)  Exécution de programmes écrits en C, PHP, PERL, PYTHON, JAVASCRIPT et LUA.


Version Minimum de ZiBASE Mini : V857.

NOTA: L'exécution de commandes SHELL nécessite la Licence.

Il n'est pas détaillé le lancement de scripts SHELL par  /usr/bin/sh ou usr/bin/bash, qui est bien-entendu et a fortiori possible.


 

 

 

A) commande SHELL  dans un scénario


soit l'exemple ci dessous (programme compilé en C)

(fichiers d'exemples ici)

compiler avec :  gcc -o test_call test_call.c

cet exemple incrémente de 1 chaque valeur donnée en argument.

#include <stdio.h>
int main(int argc, char *argv[] )
{
int i;
int valread;
printf("results... ");
for (i=1; i<argc; i++)
{
valread = strtol (argv[i],NULL,10);
printf("value %d ",valread+1);
}
printf("\n");
}


On appelle maintenant cet exécutable dans le scénario nommé arbitrairement "test_call.c"  en lui donnant quelques arguments soit 2 5 7 et 8...

NOTA : Il est tout à fait possible de spécifier en arguments des variables globales $Vx (0...59)  ou système $Sx et de cocher l'option "Etendre les variables par valeur". Les variables  $Ix ne sont pas utilisables.

On obtient à l'exécution :

Chaque argument a bien été incrémenté de 1 (Résultats :  3 6 8 et 9) et rangé en retour dans les variables systèmes S31 à S39 conformément à ce qui est décrit ici .

Le simple fait de faire un 'print' (sans line-feed intermédiaire)  d'une valeur sur stdout "fabrique" un argument de retour: les valeurs numériques (jusqu'à 9) sont scannées dans le flux retourné par le programme exécutable.


B) Commande SHELL appelée par l'activation d'un actionneur

A chaque lancement d'ordre sur un actionneur (ON/OFF/DIM), ZIBASE Mini teste la présence de fichiers particuliers dans le répertoire plugins.

Si un fichier est reconnu comme représentant cet actionneur, celui-ci est exécuté. S'il retourne un résultat non-nul (exemple : print "1"), la commande RF (qu'il remplace) est annulée. Il peut donc se "substituer" à n'importe quel protocole RF avec une grande granularité comme il est vu ci-dessous.

Syntaxe générale d'un fichier de commande d'un actionneur virtuel :

actuator_cmd <protocole> <device> <commande> <dim_value 0...100>

commande : 0 : OFF, 1: ON, 2: DIM

Le répertoire plugins contient ces commandes. Elles sont obligatoirement rangées dans /opt/zodianet/plugins

Si le fichier existe et est reconnu par ZIBASE Mini (il doit être exécutable), son exécution remplace la commande RF associée à l'actionneur.

Partant de la constatation qu'avoir un fichier unique actuator_cmd oblige a faire un "parsing" approfondi, selon le protocole, l'adresse, l'action (ON/OFF/DIM), tous les arguments (sauf la valeur de DIM) peuvent être concaténés au fichier de commande avec le caractère '_'  pour éviter de faire ce parsing.

si un protocole est spécifié (voir la spécification ZAPI1 pour leur numérotation) , les syntaxes suivantes sont autorisées (par complexité croissante de parsing) :
1) actuator_cmd_prot2_a12_1  0
2) actuator_cmd_prot2_a12  1  0
3) actuator_cmd_prot2 a12  1  0
4) actuator_cmd prot2 a12 1  0

Si aucun protocole est spécifié (protocole par défaut), les syntaxes suivantes sont autorisées :

1) actuator_cmd_a12_1 0
2) actuator_cmd_a12 1 0
3) actuator_cmd  a12 1 0


Par exemple, si on copie l'exécutable test_call ci-dessus dans actuator_cmd_p2

et si on fait un "ON" sur P2 (périphérique sans protocole spécifié) sur la page de déclaration de l'actionneur.

on obtient dans le suivi d'activité :

Ce qui montre que le fichier exécutable  actuator_cmd_p2 a bien été exécuté et  a bien incrémenté de 1 chaque argument passé à l'appel.

NOTA : Penser à donner le droit d'exécution  par chmod +x sur les fichiers à lancer.


C) Installation de différents interpréteurs de langage sur Raspberry et test par fichier de commande/actionneur virtuel.

Conseil : Faire  apt-get update avant de télécharger un interpréteur.

Langage PHP

Installation :  apt-get install php5-cli

Vérification : php -v

Exemple de fichier de commande:

#!/usr/bin/php
<?php
echo"Hello PHP!";
?>


Langage PERL

Installation : apt-get install perl

Vérification : perl -v

Exemple de fichier de commande:

#!/usr/bin/perl
print "Hello PERL!\n";


Langage PYTHON

Installation : apt-get install python3

Vérification : python --version

Exemple de fichier de commande:

#!/usr/bin/env python
print "Hello PYTHON!"


Langage JAVASCRIPT

Installation : apt-get install nodejs

Vérification : nodejs -v

Exemple de fichier de commande:

#!/usr/bin/env nodejs
console.log('Hello JAVASCRIPT!');


Langage LUA

Installation :

wget http://www.lua.org/ftp/lua-5.2.0.tar.gz
tar xzvf lua-5.2.0.tar.gz
cd lua-5.2.0
apt-get install libreadline5-dev
make linux install

Vérification : lua -v

exemple de fichier de commande:

#!/usr/bin/env lua
print("Hello LUA!")

 

En affectant un 'actionneur virtuel' (avec sa pseudo adresse X10),   P3: PHP, P4 : PERL, P5: PYTHON, P6: JAVASCRIPT, P7: LUA,

à chacun des exemples de scripts de chaque langage évoqué ci dessus, on obtient :

 

 

Conclusion :

Tirant partie de la puissance de Linux, ZiBASE Mini peut appeler n'importe quel programme exécutable ou script interprété, soit explicitement (commande SHELL), soit pour créer un actionneur virtuel, activé par une commande ON/OFF/DIM.

L'utilisateur n'a pas de contrainte sur le langage utilisé. Tous les langages compilés ou interprétés sont accessibles.