L’Apéiseur de script

Bonjour à tous,

Comme beaucoup de gens, j’ai craqué il y a plusieurs mois pour un RaspberryPi. Je m’en sers principalement pour l’utilisation des GPIOs. Le contrôle des différentes entrées/sorties en est vraiment simplifié avec l’utilisation des différentes librairies python. Le problème c’est que c’est simple uniquement en local. Par conséquent, j’ai ajouté une interface HTTP à mes différents scripts de contrôle. A force de l’utiliser et surtout après la découverte du projet S.A.R.A.H, le besoin de rendre mes scripts simplement exécutables depuis un appel HTTP a été décuplé. C’est pourquoi l’idée « d’apéiser » mes scripts a surgit.

Image1

 

L’apéiseur de scripts est disponible ici : https://github.com/bewiwi/py-script et fonctionne très simplement.

Une fois le projet récupéré, il suffit de mettre les scripts dans le dossier « script » du projet et de lancer le script avec la commande suivante :

./start.py

Ensuite on peut facilement exécuter nos différents scripts disponibles dans le dossier en contactant le service (port 8080) avec le nom du script :

#curl "http://127.0.0.1:8080/test.sh?t=23&p=1&c=%20er0er&t=sd"
ok ceci est un test
arg : -p 1 -c er0er -t 23

On constate que les arguments GET sont transformés en paramètres du script. Comme certains l’auront déjà compris, il y a potentiellement un problème de sécurité et de droit. Les scripts sont exécutés avec l’utilisateur qui a lancé le script (attention à root) et les scripts peuvent être exécutés par n’importe qui possédant le lien http.

Le projet est fourni avec le script de test présenté ci-dessus ainsi qu’un script python pour contrôler les GPIOs en sortie que j’utilise personnellement avec le projet S.A.R.A.H que je vous conseille fortement d’aller voir.

12 comments

  1. Salut,

    J’ai utilisé l’apéiseur sur une installation RPI mais je coince pour lancer le serveur au démarrage de RaspBXMC.

    Actuellement, j’ai ajouté les deux lignes ci-dessous à /etc/rc.local :

    cd /home/pi/serveur_httpy/py-script-master/
    sudo python start.py &
    exit 0

    Une fois le RPI rebooté, je n’ai pas accès depuis le navigateur. Qu’est ce que je fais de travers d’après toi ?

    Merci par avance,
    Aurélien

  2. PORTE Loïc dit :

    Salut,
    Ça viens peut-être de ta commande sudo. Je pense que tu peux l’enlever car le rc.local est directement lancé avec root.

  3. nathan04 dit :

    bonjour , j ai suivi le tuto mais quant je tape ./start.py j obtient un message d erreur suivant:

    pi@raspberrypi /home/sarahserv/sarah/script/py-script-master $ ./start.py
    Start HTTP server on 8080
    Traceback (most recent call last):
    File « ./start.py », line 11, in
    domopy=Domopy()
    File « ./start.py », line 8, in __init__
    http=SondeHTTP()
    File « /home/sarahserv/sarah/script/py-script-master/sondeHTTP.py », line 51, in __init__
    self.server = myHTTPServer(( »,self.port),SondeHandler)
    File « /home/sarahserv/sarah/script/py-script-master/sondeHTTP.py », line 37, in __init__
    HTTPServer.__init__(self, *args, **kw)
    File « /usr/lib/python2.7/SocketServer.py », line 419, in __init__
    self.server_bind()
    File « /usr/lib/python2.7/BaseHTTPServer.py », line 108, in server_bind
    SocketServer.TCPServer.server_bind(self)
    File « /usr/lib/python2.7/SocketServer.py », line 430, in server_bind
    self.socket.bind(self.server_address)
    File « /usr/lib/python2.7/socket.py », line 224, in meth
    return getattr(self._sock,name)(*args)
    socket.error: [Errno 98] Address already in use

    • PORTE Loïc dit :

      Cela signifie que le port qu’utilise l’apeiseur (8080/tcp) est déjà utilisé. Soit tu as déjà un service qui utilise ce port, peut-être tomcat. Soit il est déjà lancé.

  4. chevalier dit :

    bonjour, je debute j’ai essaye yana d’idleman, j’ai reussi à l’installer mais ensuite impossible que mes modification simple soit prise en compte le fichier etait bien modifier mais yana ne le prenais pas (ex:pour la comprehension de 0.9 passer à0.8). elle ne voulais rien comprendre.

    je suis donc revenu à sarah pour tout ces plugings pret mais maintenant je veux controler les port du raspi, je le reinstalle avec raspian, qu’est ce que j’ai besoin d’installer ? (php5,sqlite etc ou rien?)

    apres je met ou le dossier py-script-master dans etc ? car j’avais pas trouver script et ca me mettez denied quand je faisait le test, dois-je rajouter des permission sur ce dossier ou à d autres? sarah et le pluging samsung remote utilise le port 8080 , puis je en mettre un autre pour ce script ou il faut absolument celui la.

    j’espere avoir etais assez claire et que vous aurez le temps de me repondre. merci d’avance de votre aide.

    ps:une dernier est ce que je pourrait controler la carte radio emetteur avec votre script en le modifiant?

  5. Chevalier dit :

    Pour le test c’est bon j’ai reussi, enfin, par contre c est seuleument en root que ca fonctionne, et pour ce qui est de demarrer start.py au demarrage du RPI , j ai tout essayer il veux rien savoir , peut etre changer le mode demarage? Car par rc.local ca fonction pas avec sudo ou sans etc

  6. manu dit :

    bonjour , j ai installer py-script-master que j ai copier dans /home/pi
    j ai fais un:
    sudo chmod +x /home/pi/py-script-master/start.py
    dans le fichier etc/rc.local j ai copier
    # Pin GPIO25 (OUT)
    echo « 25 » > /sys/class/gpio/export
    chmod 777 -R /sys/class/gpio/gpio25
    echo « out » > /sys/class/gpio/gpio25/direction
    puis sudo reboot
    cd /py-script-master
    sudo ./start.py
    et quand je prononce « sarah allume la guirlande  » j obtient ca :

    pi@raspberrypi ~/py-script-master $ sudo ./start.py
    Start HTTP server on 8080
    192.168.1.89 – – [15/Nov/2014 17:34:36] « GET /rb.py?s=1&i=25 HTTP/1.1 » 200 –
    [‘./script//rb.py’, ‘-i’, ’25’, ‘-s’, ‘1’]
    192.168.1.89 – – [15/Nov/2014 17:34:36] « GET /rb.py?s=1&i=25 HTTP/1.1 » 500 –
    192.168.1.89 – – [15/Nov/2014 17:35:04] « GET /rb.py?s=0&i=25 HTTP/1.1 » 200 –
    [‘./script//rb.py’, ‘-i’, ’25’, ‘-s’, ‘0’]
    192.168.1.89 – – [15/Nov/2014 17:35:04] « GET /rb.py?s=0&i=25 HTTP/1.1 » 500 –
    192.168.1.89 – – [15/Nov/2014 17:35:20] « GET /rb.py?s=1&i=25 HTTP/1.1 » 200 –
    [‘./script//rb.py’, ‘-i’, ’25’, ‘-s’, ‘1’]
    192.168.1.89 – – [15/Nov/2014 17:35:20] « GET /rb.py?s=1&i=25 HTTP/1.1 » 500 –
    192.168.1.89 – – [15/Nov/2014 17:36:02] « GET /rb.py?s=1&i=25 HTTP/1.1 » 200 –

    mais le gpio 25 ne fonctionne

  7. nonoyes01 dit :

    Bonjour, un peu tardivement je répond à un problème posé:
    quand on lance « start.py » au démarrage du RPI (ligne ajouté dans le fichier RC.LOCAL),on accède plus au répertoire ./script via une requette HTTP: perso j’ai solutionné le problème en modifiant la ligne suivante du fichier « sondeHTTP.py » :

    arg=[« ./script/ »+script]

    modifier en :

    arg=[« home/pi/py-script-master/script/ »+script]

    ou par le chemin complet où vous avez copié « l’apéiseur de script »
    et tout roule du bonheur!

  8. STEFANINI dit :

    Bonjour,

    J’ai besoin de votre aide, je sais pas ou ni comment copier les fichiers… aidez moi s’il vous plait.

  9. Kaorue dit :

    Bonjour,

    Lorsque je lance sudo python start.py

    Dans le navigateur j’obtient un message d’erreur « ERROR : [Errno 13] Permission denied »

    Piuvez vous m’aider?

    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *