Page 1 sur 3
bash on startup avec gpio
Posté : jeu. 12 janv. 2017 23:18
par sissad
Salut les geeks,
J'ai un raspberry pret d'une porte avec weewx et je veux en profiter pour y connecter un contact de porte.
j'ai donc écrit un petit script en bash qui li le gpio21 et envoie un message mqtt lorsque la porte s' ouvre.
j'ai donc voulu le faire ce lacer au demarrage avec rc.local mais apparament les pilotes gpio ne sont pas encore lancé donc erreur a gogo
Quelqu'un aurrait une idée de quel manière je pourrais le lancé autrement?
Merci d'avance pour votre aide!
Re: bash on startup avec gpio
Posté : ven. 13 janv. 2017 00:42
par Ghislain
Normalement il ne devrait pas y avoir de soucis avec le rc.local
Je pense que avec le script et les erreurs ça aiderait beaucoup
As tu bien mis les chemins complet dans ton script ?
Re: bash on startup avec gpio
Posté : ven. 13 janv. 2017 06:29
par sissad
Quoi de plus logique que d'indiquer les scripts qui font défaut... dsl
Alors pour Lecture GPIO j'ai le script suivant:
Code : Tout sélectionner
#!/bin/bash
setup ()
{
echo Setup
gpio -g mode 21 in
porte="fermee"
}
AttentePorte ()
{
while [ 1 ]; do
if [ `gpio -g read 21` = 1 ] && [ "$porte" == "fermee" ]; then
mosquitto_pub -h mon.host.ext -i testPublish -t porte -m 'Porte de la buanderie ouverte'
wget -O - -q -t 1 http://api.pushingbox.com/pushingbox?devid=xxxxxxxxxxxxxx
porte="ouverte"
echo $porte
fi
if [ `gpio -g read 21` = 0 ] && [ "$porte" == "ouverte" ]; then
mosquitto_pub -h mon.host.ext -i testPublish -t porte -m 'Porte de la buanderie fermée'
porte="fermee"
echo $porte
fi
sleep 0.1
done
}
setup
while true; do
AttentePorte
done
Pour lancer le script au boot j'ai ajouter les lignes 20 à 24 dans mon rc.local:
Code : Tout sélectionner
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
exec 2> /tmp/rc.local.log # send stderr from rc.local to a log file
exec 1>&2 # send stdout to the same log file
set -x # tell sh to display commands before execution
/home/pi/porte.sh &
exit 0
Erreur retournée dans mon rc.local.log:
...
/home/pi/porte.sh: line 22: gpio: command not found
/home/pi/porte.sh: line 22: [: =: unary operator expected
/home/pi/porte.sh: line 15: gpio: command not found
/home/pi/porte.sh: line 15: [: =: unary operator expected
...
J'ajoute que le script fonctionne très bien lorsque lancé manuellement.
Voilà des informations complettes

Re: bash on startup avec gpio
Posté : ven. 13 janv. 2017 09:41
par domi
Bonjour,
Dans un premier temps, les "echo" ne peuvent pas fonctionner dans le rc.local si aucun display de sortie n'est prévu.
Si tu n'en a pas besoin, mets les en commentaires.
Re: bash on startup avec gpio
Posté : ven. 13 janv. 2017 16:51
par Ghislain
Moi ce qui me choc c'est la façon d'écrire ton script (je ne suis pas un pro non plus :d), pourquoi ne pas simplement mettre la partie "Attente Porte" dans la boucle ?
Autre truc tu mets la variable en "Porte fermé" au début du script mais... si la porte est déjà ouverte au lancement ?
Ton script fonctionne en lançant toi même la commande ?
Re: bash on startup avec gpio
Posté : ven. 13 janv. 2017 18:51
par dyox
Bonjour,
En cherchant pour vous aider, je suis tombé sur un point essentiel : rc.local est lancé avant le login avec les droits root. Comme gpio -g est de la bibliotèque wiringPi, elle n'est peut être pas encore chargée
Vous pouvez essayer le lancement automatique avec cron ou /etc/bash.bashrc
Re: bash on startup avec gpio
Posté : ven. 13 janv. 2017 21:52
par Ghislain
En tapant "rc.local gpio" sur Google:
https://easydomoticz.com/domoticz-et-gpio-les-exports/
Qui confirme que normalement tout est chargé

et que les chemins complet devrait être mis

Re: bash on startup avec gpio
Posté : sam. 14 janv. 2017 11:22
par domi
dyox a écrit :En cherchant pour vous aider, je suis tombé sur un point essentiel : rc.local est lancé avant le login avec les droits root. Comme gpio -g est de la bibliotèque wiringPi, elle n'est peut être pas encore chargée
Le rc.local est effectivement lancé avant le login, c'est pourquoi on ne peut pas interagir avec l'interface utilisateur (d'où les "echo" qui ne savent pas ou afficher)
Par contre, on peut initialiser les gpio sans problème, je le fait sur mon Rpi domotique afin de tout réinitialiser à l'état que je souhaite lors d'un reboot. J'avais testé dans le cron avec "@reboot", et là par contre ça ne fonctionnait pas car il doit être exécuté trop tôt.
On peut aussi mettre dans le ".baschrc" de l'utilisateur, mais attention, pour qu'il soit exécuté il faut que l'utilisateur soit connecté en automatique, sinon le script n'est jamais exécuté. Il s'exécute uniquement à la connexion de l'utilisateur.
Re: bash on startup avec gpio
Posté : dim. 15 janv. 2017 02:13
par sissad
Comme indiqué dans mon second post, les erreurs sont dans les lignes appelant le GPIO, donc les echos ne dérangent personne... Bon, pour vous faire plaisir, je les mets en #.
Et comme on le voit dans le poste
https://easydomoticz.com/domoticz-et-gpio-les-exports/ et comme je me l'imaginais, rc.local s'éxecute avant la configuration des GPIOs
Maintenant si je voulais le lancer dans .baschrc ... Je vois deux problème:
Est-il possible de s'autologué sans GUI?
Est-il possible de le faire en root? car la lecture des GPIO n'est possible qu'en root OU alors dois-je m'autologué en root? Pas très sécure à mon avis...
Re: bash on startup avec gpio
Posté : dim. 15 janv. 2017 09:13
par domi
Bien non au contraire,
Son tuto ne fonctionnerait pas si c'était le cas, car il configure les GPIO dans le rc.local