Détail de l'interface RESTful
L'interface rest comprends deux types d'URL et deux méthodes d'accès :
/arduinos/reset
Cette méthode permet de relire le fichier de configuration au cours de l'éxecution et de réinitialiser les connexions aux arduinos. Une fois exécuté, l'interface RESTful est mise à jour avec les nouvelles actions et les nouveaux arduinos.
/%arduino_name%/%action_name%
Les méthodes fournies par l'API de Pyaler réponde à la convention suivante :
%arduino_name% : nom de l'arduino défini dans le fichier de configuration
%action_name% : nom de l'action définie dans le fichier de configuration
Les actions définies comme « read_actions » dans le fichier de configuration ne sont accessibles qu'en requêtes GET, les actions définies comme « write_actions » dans le fichier de configuration ne sont accessibles qu'en requêtes POST avec le champ « value » contenant la valeur à transmettre au programme de l'arduino.
Fichier de configuration
le fichier de configuration se présente comme suit :
arduinos:
arduino1: /dev/ttyUSB0
arduino2: /dev/tty.usbserial-A800eIR3
read_actions:
read: foo
demo: bar
write_actions:
write:
demo: hello
mot clef « arduinos: »
dans cette section sont associés les ports série de la machine hôte avec les noms d'arduino. En l'occurence, arduino1 est associé à /dev/ttyUSB0 (port série USB sous linux), et arduino2 à /dev/tty.usbserial-A800eIR3 (port série USB sous mac, où « -A800eIR3 » est unique à chaque arduino).
mot clef « read_actions: »
On y défini les différentes actions possibles par une requête HTTP GET. Ainsi la valeur de gauche est le nom qui sera proposé dans l'URL, et en partie droite la chaîne de caractères qui sera transmise à l'arduino. Dans le fichier ci-dessus, l'appel à « http://my.host/arduino1/read » enverra « foo » à l'arduino.
mot clef « write_actions: »
Cette fois-ci y sont défini les actions possibles par une requête HTTP POST. La valeur de gauche est le nom qui sera proposé d'ans l'URL et en partie droite la chaîne de caractères qui sera préfixée à la chaîne transmise dans le champ «value» de la requête POST.
Ainsi, dans l'exemple ci-dessus, si on envoie « value=TEST » sur « http://my.host/arduino1/write », l'arduino recevra la chaîne 'TEST'. Si on envoie « value=WORLD » sur « http://my.host/arduino1/demo », l'arduino recevra la chaîne 'helloWORLD'.
Exécution en stand-alone
Le programme Pyaler peut être lancé seul, auquel cas il lancera un serveur web local, « Paste ». Voici les options utilisables pour configurer Pyaler :
Usage: pyaler -v -H HOST -p PORT -c file
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-H HOST, --host=HOST Host to run the pyaler server as. Default: localhost
-p PORT, --port=PORT Port where run the pyaler server on. Default: 8080
-c CONFIG, --conf=CONFIG
Path to configuration file. Default: conf.yaml
-v, --verbose Print logging messages to stdout.
Ainsi pour lancer pyaler en local sur un port non-préviligié, il faut exécuter :
% pyaler -H 127.0.0.1 -p 8080 -c pyaler-config.yaml
En cas de problèmes lancez pyaler avec l'option -v et reportez les messages d'erreur sur la forge.
Intégration à un serveur apache
Il est possible d'intégrer pyaler à un serveur apache avec un fichier de configuration tel celui-ci :
ServerName yourdomain.com WSGIDaemonProcess pyaler user=www-data group=www-data processes=1 threads=5 WSGIScriptAlias / /path/to/pyaler_home/pyaler.wsgi WSGIProcessGroup pyaler WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all
et il faut créer le fichier pyaler.wsgi (utilisé par WSGIScriptAlias) tel que suit
from pyaler import pyaler
application = pyaler.make_app({}, config=’conf.yaml’)
il faudra toutefois avoir configuré apache2 tel qu'il utilise « mod_wsgi ». Pour plus d'informations se réferrer à la configuration de Bottle.
Hacker pyaler !
Pour ce faire, il faut récupérer les sources sur la forge Bearstech :% svn co svn://forge.bearstech.com/forge/Pyaler/ pyaler-svn/
Étendre pyaler
Il est possible d'ajouter des commandes RESTful à l'API de base en étendant pyaler. Pour ce faire, il suffit de suivre l'exemple qui suit :
# -*- coding: utf-8 -*-
from pyaler import app
@app.route('/')
def index():
return '<html><title>live</title></html>'
À faire
Avec les sources à jour, il est possible d'ajouter de nouvelles fonctionnalités. Pour savoir ce qu'il y a à faire sur Pyaler, se réferrer à la page de wiki sur la forge Bearstech.


