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.