J’ai joué avec mon Raspberry pour un truc « à la con ».
Installation de zbar-tools pour que la caméra puisse lire des QR codes.
Sur un de mes PC linux, installation de QRencode pour générer ce que je veux.
Ce que je ne sais pas faire (et ne trouve car je cherche mal sans doute), c’est faire exécuter l’action.
Allez, j’explique l’idée.
Imaginons que j’ai un Raspberry allumé.
Au moment du départ, je veux lancer motion pour la vidéosurveillance.
Et au retour, je veux couper motion.
Au lieu d’avoir un clavier pour taper « motion » puis « pkill motion »
Au lieu d’avoir un souris pour cliquer sur mon raccourci qui lance motion/coupe motion
Je veux juste un Rpi et rien de branché dessus.
Je voudrais juste pouvoir présenter un QR Code pour exécuter le script qui lance ou stoppe Motion (et toutes autres actions).
J’ai testé.
Je peux créer des QR codes et le Rpi sait les lires avec zbarcam
mais, il affiche le résultat sous forme de texte.
Par exemple, mon QR code que j’ai encodé pour Code QR — Wikipédia ne m’envoie pas vers le site mais affiche bêtement « Code QR — Wikipédia » dans le Terminal.
J’ai essayé d’encoder un script pour voir s’il est exécutable, mais … Non.
ça me renvoie « bash /home/pi/test.sh ».
Alors que si je lance ce script manuellement, ça ouvre bien une image avec gpicview.
Si il sait afficher, sait-il envoyer le résultat dans un fichier ?
Si oui, un script peut lire le contenu de ce fichier en boucle toute les x secondes et quand il reconnaît l’instruction, il exécute une commande ?
Effectivement de ce que je vois ici, zbarcam ne lance rien comme commande (zbarcam(1) - Linux man page)
Il faut passer par une étape intermédiaire pour récupérer le QRcode et lancer un programme. Je pense que la soluce est dans qrplay.py. Voir la fonction start_scan qui lance une boucle infinie de lecture du qrcode.
Même si je recommande fortement l’apprentissage de Python, il doit bien être possible de faire un truc qui ressemble en Bash ou autre langage.
Si la sortie de la lecture peut aller dans un fichier, il suffit d’exécuter la commande.
#!/bin/bash
touch /tmp/zbar.txt
while true
do CMD=`cat /tmp/zbar.txt`
if [[ $CMD != $LAST_CMD ]]
then $CMD
fi
LAST_CMD="$CMD"
sleep 1
done
Après c’est pour test… C’est pas dit que ça marche du premier coup.
J’ai réinstallé Raspbian propre (j’avais testé d’autres trucs) et zbar.
J’ai bien créé ton script (appelé jelopo.sh évidemment).
Je lance le script bash jelopo.sh
Je lance zbarcam --prescale=300x200
Et … Rien …
En fait, qd je présente un QR Code à la caméra, le texte apparait dans le terminal où est lancé la boucle zbarcam --prescale=300x200 mais pas dans tmp/zbar.txt (le fichier existe mais est vide et reste vide).
Déjà vérifier le fonctionnement du script en injectant à la main quelques commandes « sympa » (des commandes qui ne risquent rien) dans le fichier /tmp/zbar/txt.
Oui, oui, il fonctionne ;j’avais noté sudo apt-get update dedans
Mais il joue la ligne 1 à chaque sollicitation sans prendre en compte les ligne suivante.
Si tu montres QR Code 1, /tmp/zbar.txt est enrichi d’une ligne.
Ensuite, tu montres le QR code 2 et la seconde ligne est écrite.
Mais il essaye de jouer depuis le début en repassant pas la ligne 1.
Et il s’arrête à l’espace entre ‹ apt-get › et ‹ update › ; je dois modifier mes QR-Codes.
Le basculement fonctionne mais l’action ne peux être jouée car ça note tout ; il faut que je vire ‹ QR-Code: ›
QR-Code:apt-get update
QR-Code:sudo bash /home/pi/test.sh
Je poursuis sur cette piste pour le moment car j’ai très peu de temps entre le travail, les enfants et diverses interventions à préparer.
Mais le script python me parait être le but réel (faut que je commence par l’apprendre)
Bon ben c’est déjà mieux, reste plus que quelques coups de tournevis…
Essayer de modifier CMD, on lit que la dernière ligne du fichier, et on supprime tout ce qu’il y a avant les « : »
ATTENTION dans ce cas, toute commande contenant des « : » ne sera pas interprétée entièrement. Ceci dit il y en a pas des masses !!!
Je suis un peu honteux puisque par manque de temps et par inaccessibilité de l’ordi familial, je n’y ai pas bossé du week-end.
Et là, que vois-je ?
LA réponse ; LA très bonne réponse !
Bon, faudrait apprendre le python mais ça fonctionne !
j’ouvre un lien, je lance une install, je fais la mise à jour, …
Bref, nickel, ce code fonctionne.
Au plaisir. Prochaine étape, migrer ce bout de code en Python, ce sera plus classe.
Pour se former en Python, je conseille les ouvrages de Gérard Swinnen et de Vincent Le goff.