Un bel article que nous devons à Bruno Il a pris comme base deux articles publiés sur le blog et s’en est inspiré pour créer un système « simple » qui met quand même en œuvre des fonctionnalités avancées… Je lui laisse la parole :
C’est sur framboise314 que j’ai trouvé ces deux descriptions. La première signée TheFreeElectron concerne l’interface web qui permet de piloter facilement 8 sorties GPIO du Raspberry Pi.
La seconde est une application de cette interface, réalisée par rleddington. Elle permet de piloter facilement 8 prises secteur à partir de votre smartphone. Je vous propose de la modifier et d’utiliser uniquement la librairie python GPIO.
Ce tutoriel se limitera au langage Python et plus précisément à la librairie RPi.GPIO.
Au sommaire :
- 1 L’électronique
- 2 Utilisation de la bibliothèque GPIO
- 2.1 La librairie RPi.GPIO
- 2.2 Accès au GPIO par ligne de commande
- 2.3 Accès au GPIO à partir d’un site WEB en PHP
- 2.4 GESTION DE MULTIPLES PROCESSUS:
- 3 L’auteur
- 4 Sources
L’électronique
La partie électronique n’a rien de spécial, elle ne comporte que 8 LED avec leur résistance de protection… La seule partie délicate est de bien relier chaque LED à la bonne broche sur le GPIO du Raspberry Pi.
Le GPIO (General Purpose Input/Output = Entrée/Sortie pour un Usage Général) sont des broches d’entrée/sortie permettant au Raspberry PI de communiquer avec des périphériques extérieurs. Ces broches peuvent assurer différentes fonctions mais sont uniquement de type numérique :
- Entrée/Sortie Numérique (Tout ou Rien).
- Bus SPI.
- Bus I2C.
- Bus Série (UART).
- PWM.
- et les broches d’alimentation : GND, 3,3V et 5V
Pour ce qui est des résistances, elles devraient valoir 1,5kΩ pour une diode LED rouge HLMP-K150
Calcul UR=Vs-VLED=3,3-1,6= 1,7 V avec IF=1mA -> R=UR/IF= 1700Ω
Utilisation de la bibliothèque GPIO
Le choix se porte sur du Python car ce langage de programmation est celui retenu à l’origine pour le développement sur le Raspberry PI et il est proche des langages de programmation comme le C mais avec sa propre syntaxe, ceci facilitera malgré tout son apprentissage et le 2eme avantage est que la librairie RPi.GPIO est déjà installée sur le Raspbery PI si ce dernier est à jour où si vous utilisez une version de la distribution Raspbian de 2016.
Pour vérifier et connaitre la version installée tapez la commande à l’invite de commande:
pi@raspberry - $ find /usr | grep -i gpio
Toutefois si vous souhaitez utiliser la dernière version, tapez au niveau de l’invite de commande la commande suivante pour installer la librairie :
pi@raspberry - $ sudo apt-get install raspi-gpio
La librairie RPi.GPIO
La librairie Python RPi.GPIO nécessite d’être en ROOT (super utilisateur) ou d’en posséder les droits (SUDO) pour utiliser le GPIO. Avec la nouvelle distribution « Jessie » de Raspbian le problème ne se pose plus puisqu’un simple utilisateur peut accéder au GPIO (PI par exemple) mais actuellement travaillant avec un Rasberry PI2 sur « Wheezy » (ancienne distribution) il me sera nécessaire de faire précéder les commandes Python par sudo.
Plusieurs possibilités existent, vous pouvez exécuter vos commandes Python soit:
- En ligne de commande Python.
- Avec un script Python.
- A partir d’une page WEB en PHP qui appel un script Python.
Accès au GPIO par ligne de commande
Cette manière est surtout utilisée lorsque l’on est en cours de développement pour tester une partie des commandes ou pour l’apprentissage de façon à comprendre la réaction d’une commande particulière.
Interpréteur Python avec les droits du Super Utilisateur
Tapez la commande sur l’invite de commande :
pi@raspberry - $sudo python3
Apparait la version de Python et l’invite de commande Python représentée par 3 chevrons : >>>
Si vous souhaitez sortir de l’interpréteur de commandes Python tapez sur l’association des touches CTRL+D
Importer la librairie RPi.GPIO
Pour utiliser les commandes de la librairie RPi.GPIO il faut dans un premier temps importer la librairie avec la commande :
>>> Import RPi.GPIO as GPIO
Choix de la désignation des broches BCM (N° de broche du microcontrôleur) ou Connecteur GPIO :
GPIO.setmode(GPIO.BCM) ou GPIO.setmode(GPIO.BOARD)
Il est plus simple de choisir le connecteur, exemple pour le GPIO 0 le numéro broche du connecteur est 11
Commandes des broches d’entrée/sortie TOR (Tout ou Rien):
Les commandes suivantes permettent de gérer des entrées/sorties TOR (Tout Ou Rien).
Définir le sens d’une broche
Il est nécessaire avant d’utiliser une broche de définir le type d’utilisation c’est-à-dire soit une entrée soit une sortie avec la commande suivante :
Sortie : GPIO.setup(11, GPIO.OUT)
ou
Entrée : GPIO.setup(11, GPIO.IN)
Réinitialiser la configuration d’une broche ou de l’ensemble du GPIO
Il est conseillé de réinitialiser la configuration des broches ou de l’ensemble du GPIO à la fin d’un script pour finir proprement Pour réinitialiser une broche, il faut mettre entre les parenthèses le N° de la broche concernée.
GPIO.cleanup(11)
Pour réinitialiser l’ensemble du GPIO, il ne faut rien mettre en les parenthèses.
GPIO.cleanup()
Imposer un état logique sur une sortie
Une des commandes les plus utilisées est celle permettant de fixer un état logique Haut ou Bas sur une sortie de façon à commander un périphérique. La syntaxe générale de la commande imposant un niveau logique sur une sortie est :
Sortie à « 1 » : GPIO.output (11, GPIO.HIGH) ou GPIO.output (11, 1)
Sortie à « 0 » : GPIO.output (11, GPIO.LOW) ou GPIO.output (11, 0)
Lire l’état logique d’une entrée
Les systèmes doivent tenir compte de stimuli extérieurs, il est donc nécessaire de pouvoir lire les broches en entrée. La syntaxe générale permettant de lire l’état d’une broche qu’elle soit en entrée ou en sortie est :
GPIO.input (11) -> Variable = GPIO.input (11)
Python Shell
La fenêtre python Shell s’ouvre permettant de tester les lignes de commande une après l’autre et de vérifier le résultat mais il est possible de regrouper ces lignes dans un fichier. Dans le fichier fifi.py ajoutez la ligne suivante en entête pour qu’il puisse être interprété comme du python3 : #!/usr/bin/env python3
Vous allez tester vos lignes avec le Shell (fenêtre de droite) puis les copier dans fichier (fenêtre de gauche) si elles fonctionnent correctement.
Puis sauvegarder votre fichier :
Donner les droits à votre fichier
pi@raspberry - $ sudo chmod 777 /home/pi/titi/fifi.py
Droits 777 : correspond à rwxrwxrwx (soit tous les droits) :
La commande ls –l exécutée dans le répertoire où se situe le fichier permet de lister les fichiers et leurs droits.
Testez votre programme ainsi si vous êtes dans son répertoire :
Sinon il faut taper son chemin absolu : /home/pi/titi/fifi.py
Pour exécuter de n’importe où votre programme, on va le copier dans un répertoire particulier, pour connaitre l’ensemble des répertoires ou votre programme peut-être stocké et exécuté sans avoir à préciser son chemin taper :
Chaque chemin proposé est séparé par « : », on va choisir /usr/local/bin, on copie le fichier dans ce répertoire
On peut simplifier l’écriture du fichier en supprimant son extension .py. Pour cela effectuez la commande suivante, ainsi le fichier devient exécutable sans extension :
Taper le nom du fichier sous n’importe quel dossier :
Exécution du script python au démarrage :
Puis placer le nom du programme avec son chemin : /home/pi/titi/fifi.py & (entre fi et exit 0)
Sauvegardez le fichier avec « Ctrl+o » puis valider en tapant sur « ENTREE » et fermez l’éditeur avec « Ctrl+x ».
Installation du SERVEUR apache voir ce lien
Accès au GPIO à partir d’un site WEB en PHP
Introduction
Vous allez découvrir comme gérer le GPIO et exécuter des commandes Pythons à partir d’une page WEB qui est écrite en langage PHP. Dans le PHP il existe des commandes permettant d’exécuter des programmes externes et de récupérer des données renvoyées par ces derniers.
Droits super utilisateur au Serveur APACHE
Cette bibliothèque ne peut être utilisée qu’en super utilisateur (root) ou avec la commande « sudo ».
Il faut paramétrer le Raspberry pi pour que le serveur apache2 (www-data) puisse exécuter des commandes système linux.
Ouvrir le fichier suivant :
pi@raspberry - $ sudo nano /etc/sudoers
Limiter les privilèges de www-data uniquement à certains fichiers, ici ecriture.py, lecture.py pour la suite de notre application.
Les programmes en python pourront être exécuté à partir d’un site WEB avec les commandes PHP EXEC() et SYSTEM().
Du côté de Python il existe une librairie système permettant de gérer entre autre le passage d’arguments. Il faut donc l’importer au début du programme Python au niveau des autres librairies importées (RPi.GPIO et tempo).
Import sys
Ensuite il ne reste qu’à récupérer les arguments, ces derniers sont stockés dans une variable système argv de type tableau. Ce tableau contiendra une case de plus que le nombre d’arguments passés en PHP. En effet la 1ere case contient le nom du programme (ici le fichier Python) à qui sont passés les arguments.
Syntaxe
sys.argv[0] contient le nom du programme Python destinataire des arguments.
sys.argv[1] contient le 1er argument passé en PHP et ainsi de suite.
Droits des fichiers Python
Copier : sur /usr/local/bin les deux fichiers python « lecture.py » et « ecriture.py » puis donner les droits suivants
pi@raspberry - $ sudo chmod 777 /usr/local/bin/lecture.py pi@raspberry - $ sudo chmod 777 /usr/local/bin/ecriture.py
Tester les deux fichiers avec la broche 11 en passant les arguments.
Placer vos fichier web
Utiliser WinSCP en SSH
Copier sur /var/ www l’ensemble des fichiers (sans oublier les droits) du zip
Le langage client (exécuté sur votre machine) HTML5 et langage serveur PHP
Conclusion
Nous gérons les entrées sorties avec des scripts Python.
Remarque importante : pour des processus complexes, la méthode préconisée est la suivante :
Ecrire un programme Python indépendant (exécuté par exemple au démarrage du Raspberry Pi) qui gère le processus comme sur un microcontrôleur de façon autonome. Avec la méthode suivante nous allons procéder de la sorte.
GESTION DE MULTIPLES PROCESSUS:
Nous voulons pouvoir partager des données entre plusieurs programmes Python qui tournent au même moment car nous aurons un processus principal qui gère le GPIO et une application web qui va lancer grâce aux instructions PHP SYSTEM() et EXEC() des scripts Python, afin qu’il n’y ai qu’un unique programme qui effectue la gestion du GPIO, nous définirons une zone mémoire commune afin de transmettre des données entre différents processus. Nous ne sommes plus obligés de donner des droits au serveur Apache.
Méthodologie
Création d’un fichier texte (led.txt) qui sera lancé par les différents scripts Python et placé dans une zone mémoire RAM dont l’accès en écriture/lecture par ces différents scripts Python sera extrêmement rapide.
Copier ce fichier dans le répertoire: /usr/local/bin/led.txt (3 octets).
Lui donner les droits complets :
pi@raspberry - $ sudo chmod 777 /usr/local/bin/led.txt
On remplira au préalable ce fichier par un nombre de caractères qui définira la taille de la zone mémoire réservée :
Exemple : fichier led.txt
La taille du fichier est de 3 octets.
On va donc réserver une zone mémoire de 3 octets, un tableau de 0 à 2 (tableau de 3 cases).
Attention chaque case à une valeur numérique entre 0 et 255 (1 octet)
Copier dans le répertoire /usr/local/bin les deux fichiers python « lececri.py » et « g_gpio.py » puis donner les droits
pi@raspberry - $ sudo chmod 777 /usr/local/bin/lececri.py pi@raspberry - $ sudo chmod 777 /usr/local/bin/g_gpio.py
Mettre en tache de fond le script principal au démarrage ou lancer en local avec sudo g_gpio.py
Vous pouvez tester vos fichiers python : broche 11 ici j’ai choisi comme argument 0->broche 11, 1->broche 12,….
Je lance deux fenêtres et je mets en tâche de fond g_gpio.py puis je teste avec lececri.py
Explication sur les deux fichiers, ils partagent une zone mémoire identique si l’un modifie cette zone, le processus de l’autre fichier est modifié :
Ici dans le processus principal, j’effectue une boucle infinie et je teste la broche sélectionnée par lececri.py et lui renvoie l’état de cette sortie sélectionnée.
Mes deux fichiers sont correctement installés je peux mettre en route mon application web avec mes nouveau fichiers index.php et gpio.php
Taper la commande ps -aux | more dans une autre fenêtre console qui va lister tous les processus lancés sur le système (appuyer sur la touche entrée pour faire défiler la liste).
Nous pouvons observer dans la deuxième colonne le numéro représentatif du PID de chacun des processus. Pour arrêter le processus vous pouvez utiliser la commande kill. Ainsi la commande suivante demandera au processus 3294 de s’arrêter :
Conclusion
Vous pouvez gérer des processus complexes, des robots en wifi avec motion et pwm, i2c …
A titre personnel je gère un capteur i2c de température ds1621 en Python et un robot deux roues avec interface WEB sans aucune difficulté.
Deux versions sont disponibles sous forme d’archive, une version de base et une version utilisant mmap, une librairie qui va allouer une zone fixe de mémoire RAM à un fichier «mapage».
- Version de base : Cliquez ici pour télécharger
- Version avec mmap : Cliquez ici pour télécharger
L’auteur
Bruno enseigne au Lycée Langevin de La Seyne sur Mer. Il nous promet avec ses élèves la description d’un projet de fin d’année : un robot avec motion (c’est très cool) équipé d’un radar de recul ultra son, avec son interface de pilotage par appli web et python ! On attend ça avec impatience 🙂 . Bravo à tous les participants.
Merci Bruno pour cette description très détaillé et la mise à disposition des fichiers qui permettront à ceux qui sont intéressés de démarrer en douceur 🙂
framboise314
Sources
- http://www.instructables.com/member/TheFreeElectron/
- http://www.instructables.com/member/rleddington/
- https://www.framboise314.fr/wp-content/uploads/2016/03/Webpython1.zip
- https://www.framboise314.fr/wp-content/uploads/2016/03/Webpythonmmap1a.zip
- http://tsin.langevin-la-seyne.fr/SIN/dossiertelecharg/RASPBERRY_PI%20%282%29.pdf
- http://tsin.langevin-la-seyne.fr/SIN/
Ping : Une interface web simple pour piloter des LED avec HTML5 et Python sur le Raspberry Pi – Radioamateur France
Merci, super article!!
Je débute et ça décompose vraiment bien les étapes, c’est très clair.
merci pour ce retour 🙂
bonjour,
Je viens d’installer jessie, l’installation ultra simple :
J’ai mis l’ensemble de mes serveurs apache2,mysql,motion tous fonctionnent très bien
http://www.billyinfo.be/showthread.php?64-Installation-serveur-web-sous-Debian-8-Jessie
le tuto de framboise314 pour le paramétrage j’ai mis 30 minutes pour tous réinstaller
Effectivement fini le sudo pour le GPIO
Placer le site en var/www/html/
Ne pas oublier de donner les droits au fichier python,javascript,php
Autre chose en ssh fini le root sauf en faisant cette manip qui marche super
http://blog.tfrichet.fr/debian-8-jessie-connexion-root-en-ssh-impossible/
merci Bruno pour ce retour
et cette info 🙂
bonjour,
Merci pour ce tuto. Mais il faut savoir qu’il ne fonctionne pas avec internet Explorer 11,
avec Chrome c’est OK.
merci pour ce retour
cordialement
François
Bonjour,
Je viens de tester sur windows 7
Internet explorer 11.0.9600.18314 ça marche bien en principe quand on change de navigateur c’est le css qui peut poser problème là aucun souci, si non as-tu activé l’autorisation javascript (en principe par défaut) si non ça marche pas.
A+bruno
Bonjour François !
Je vous lis régulièrement et je dois dire que vos articles sont vraiment de qualité : merci 🙂
2 petites remarques sur celui-ci :
– la modification du fichier sudoers devrait plutôt passer par la commande « visudo », qui évite d’enregistrer un fichier corrompu en cas d’erreur. Si ce fichier est corrompu, la commande sudo ne fonctionnera plus, rendant même impossible la modification du fichier sudoers pour le corriger !
– plutôt que de modifier le fichier sudoers, il est plutôt recommandé d’ajouter tout simplement l’utilisateur www-data dans le groupe gpio !
A+
Jeremy
Bonjour Jeremy
Tout d’abord désolé que vous ayez été rejeté par l’anti-spam… Il est assez virulent mais le blog a déjà été attaqué l’an passé (obligé de tout refaire à partir des sauvegardes) et j’ai dû en passer par là pour le protéger.
Comme indiqué au début de l’article, c’est Bruno qui en est l’auteur et il est parti de traductions d’articles que j’avais mises sur le blog. Ceci pouvant expliquer cela.
Merci pour vos remarques qui seront certainement notées avec intérêt par les lecteurs de cet article.
Cordialement
François
Bonjour,
Je connaissais pas la commande visudo mais effectivement en lisant la doc c’est ce qu’il faut faire.
Pour la deuxième remarque sous Wheezi avec python3 et gpio qui ne fonctionnaient quand super utilisateur la solution simple d’ajouter un utilisateur au gpio ne marche pas ce qui n’est plus le cas sous Jessie .
Avec jessie plus besoin de toucher sudoers.
A+ bruno
Autant j’ai trouvé la première partie (qu’est-ce qu’un GPIO etc.) très simple, autant je n’ai rien compris quand à la mise en place. Comment configurer le serveur apache, etc.
Bonjour,
http://www.billyinfo.be/showthread.php?64-Installation-serveur-web-sous-Debian-8-Jessie
Pour apache tu l’installes comme le lien ci-dessus
Il faut savoir que l’utilisateur apache www-data
Si tu es sur jessie en locale tu donnes des droits à tes fichiers
Sudo chmod 775 lecture.py
Sudo chmod 775 lecture.py
Tu peux ensuite les copier dans le dossier
Sudo cp lecture.py /usr/local/bin
En ssh tu colles tes fichiers web (css,javascript,php) dans var/www/html/
Tu donnes les droits aux divers fichiers
Puis sur ton pc, tu tapes 192.*.*.*/index.php (adresse de ton pi)
A+ Bruno
Je veux juste lancer un script depuis une page servie par le Pi.
Le problème est simple, je suis incapable de trouver une solution qui le soit également : https://www.raspberrypi.org/forums/viewtopic.php?uid=114562&f=32&t=163770&start=0
faire un fichier php d’une ligne
faire un fichier html et mettre un bouton + javascript
c’est fini
Ok
…je fais quoi avec javascript ?
ajax javascript permet d’appeler de façon asynchrone la page php
Bonjour,
Je peux te répondre car j’ai testé il y a 1 an de lancer un script via une page web.
voici les liens qui m’ont aidé :
https://code4pi.fr/2013/12/installation-dun-serveur-web-lighttpd/
http://wiki.auto-hebergement.fr/serveurs/lighttpd
https://mike632t.wordpress.com/2013/09/21/installing-lighttpd-with-python-cgi-support/
Premièrement, il y a quelque-chose qui me gène lorsque l’on parle de serveur web sur le pi. Beaucoup de tutos parlent d’Apache alors qu’il est de notoriété publique qu’il est lourd et extrêmement bavard (les logs). Donc je pense que ce n’est pas une bonne idée de l’installer sur une carte SD.
C’est pourquoi je m’étais tourné sur Lighttpd. L’installation est simple, peut se faire par un script simplement en plus !
Il y a une foule de tutos bien explicite !
J’avais testé Nginx mais je n’ai pas réussi à le faire fonctionner.
Pour répondre à tes questions, l’installation d’un serveur web crée le groupe ET l’utilisateur www-data.
Mon plus grand piège a été la gestion des droits pour l’exécution des scripts donc il faut toujours vérifier que les fichiers/dossiers appartiennent au bon utilisateur, ici www-data car Lighttpd est lancé avec cet utilisateur !
Ces commandes peuvent t’aider, « ls -l » et « ps -aef | grep lighttpd »
#l’utilisateur et le groupe www-data est propriétaire de /var/www/ car pour l’instant c’est root
sudo chown -R www-data:www-data /var/www
#ajoute l’utilisateur pi au groupe www-data
sudo usermod -a -G www-data pi
#attribution automatique des fichiers et répertoires au groupe www-data
sudo chmod -R g+ws /var/www/
#vérifie l’abonnement de l’utilisateur pi aux groupes
groups pi
Il faut aussi installer php car c’est lui qui possède les commandes pour exécuter des scripts. La liaison lighttpd -> php se fait extrèmement facilement.
Dans mon cas j’avais comme arborescence :
/var/www/html/cgi-bin/
avec dans /html/ mon fichier.php
====
exec('sudo python /var/www/html/cgi-bin/k2000.py');
?>=====
qui fait appel à k2000.py dans /cgi-bin/ (celui-ci fait la bande lumineuse à led de k2000 avec les gpio)
Voilà j'espère t'avoir aidé
pour apache c’est vrai mais hyper pédagogique ,j’installe en plus
https://github.com/azlux/log2ram
pour préserver ma carte SD
Le code dans le fichier php a été supprimé, je fais une image comme Bruno.
Je compte sur François pour que l’image soit bien affichée, sinon le code est :
exec(‘sudo python /var/www/html/cgi-bin/k2000.py’);
j’ai rajouté le code dans le commentaire j’espère que c’est bon 🙂
l’anti spam est assez virulent ! désolé
N’hésitez pas à me mettre un message en direct (adresse en bas de chaque page) s’il y a des incidents comme ça je peux ajouter code ou images
cordialement
François
merci à tous les deux pour ces précisions 🙂
J’ai installé APACHE
lorsque je lance l’appli la page s’ouvre bien mais reste statique
les scripts lecture et ecriture fonctionnent bien
apparemment la commande EXEC ne fonctionne pas
Pas de retour sue status [0]
quelqu’un a une idée?
A+
Bonjour c’est typiquement un problème de droit
Mettre les droits aux fichiers puis
Tester en mettant dans le sudoers pour voir car non conseillé
www-data ALL=(ALL) NOPASSWD: ALL
A+ Bruno
Bonjour,
Je ne trouve pas la partie des scripts pour faire en sorte qu’au lieux que le contact se fasse tout le temps jusqu’au prochain appuis sur le bouton, je voudrais que ça n’envoie qu’une impulsion d’un bref instant.
Merci
Bonjour
Pour lancer un script python via une page web, ou en l’appelant directement dans un navigateur, il faut configurer apache2
Voici la procédure.
1) mettre les scripts pythons dans un repertoire . Pas obligatoirement dans /var/www, dans l’exemple , ils sont dans /usr/share/scripts_python
2) s’assurer qu’ils sont exécutables, dans le doute faire chmod +x /usr/share/scripts_python/*.py
3) s’assurer que www-data y a accès chown www-data /usr/share/scripts_python/*.py
4) configuration apache
nano /etc/apache2/sites-enabled/000-default
ajouter la section suivante dans le fichier. Noter au passage le nom (boa) de l’alias que l’on a donné au repertoire qui contient les scripts
ScriptAlias /boa/ /usr/share/scripts_python/
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
AddHandler cgi-script .py
Enregistrer avec la commande ; CTRL+O puis Enter
Quitter avec la commande CTRL +X
Redémarrer apache2 avec la commande : service apache2 restart
Dès lors on peut appeler les scripts python dans le navigateur à l’adresse: http://IP_rasperry/boa/monfichier.py
Noter que l’on utilise, dans l’url, l’alias défini précédemment. (ici boa)
bonjour
version cgi pour full python 3
http://tsin.langevin-la-seyne.fr/SIN/dossiertelecharg/led_cgi.zip
Cela fonctionne bien sauf que si une sortie change d’état par l’action d’un autre script l’affichage sur les boutons reste statique.
Normal car la fonction « Lecture » est statique
J’ai essayé d’utiliser la fonction « setInterval » dans index.php qui relance un php avec le code php (boucle For) de index.php.
Les boutons deviennent statiques au click mais changent d’état si la sortie change d’état
Qui a une idée pour améliorer ce prg ?
bonjour,
un truc simple en html
si non tu prends ma version full python cgi
tu appelles
change_pin (0, 3);//tester l’état des led autre utilisateur
avec un setinterval
meta http-equiv= »refresh » content= »30″ il rajouter les chevrons devant derrière