bash on startup avec gpio  [RESOLU]

Vous avez réalisé ou vous voulez réaliser un truc impensable avec votre Raspberry Pi ? Cet endroit est pour vous...

Modérateur : Francois

Avatar du membre
sissad
Messages : 19
Enregistré le : jeu. 10 sept. 2015 18:09

bash on startup avec gpio

Message par sissad » jeu. 12 janv. 2017 23:18

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 :roll:

Quelqu'un aurrait une idée de quel manière je pourrais le lancé autrement?

Merci d'avance pour votre aide!

Ghislain
Raspinaute
Messages : 315
Enregistré le : jeu. 12 nov. 2015 17:39
Localisation : Bourges (18)

Re: bash on startup avec gpio

Message par Ghislain » ven. 13 janv. 2017 00:42

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 ?

Avatar du membre
sissad
Messages : 19
Enregistré le : jeu. 10 sept. 2015 18:09

Re: bash on startup avec gpio

Message par sissad » ven. 13 janv. 2017 06:29

Quoi de plus logique que d'indiquer les scripts qui font défaut... dsl :oops:

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 ;-)

domi
Administrateur
Messages : 3271
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: bash on startup avec gpio

Message par domi » ven. 13 janv. 2017 09:41

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.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Ghislain
Raspinaute
Messages : 315
Enregistré le : jeu. 12 nov. 2015 17:39
Localisation : Bourges (18)

Re: bash on startup avec gpio

Message par Ghislain » ven. 13 janv. 2017 16:51

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 ?

dyox
Raspinaute
Messages : 976
Enregistré le : dim. 28 déc. 2014 15:28
Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe

Re: bash on startup avec gpio

Message par dyox » ven. 13 janv. 2017 18:51

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

Ghislain
Raspinaute
Messages : 315
Enregistré le : jeu. 12 nov. 2015 17:39
Localisation : Bourges (18)

Re: bash on startup avec gpio

Message par Ghislain » ven. 13 janv. 2017 21:52

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 :D

domi
Administrateur
Messages : 3271
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: bash on startup avec gpio

Message par domi » sam. 14 janv. 2017 11:22

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.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Avatar du membre
sissad
Messages : 19
Enregistré le : jeu. 10 sept. 2015 18:09

Re: bash on startup avec gpio

Message par sissad » dim. 15 janv. 2017 02:13

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...

domi
Administrateur
Messages : 3271
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: bash on startup avec gpio

Message par domi » dim. 15 janv. 2017 09:13

sissad a écrit :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
Bien non au contraire,
Son tuto ne fonctionnerait pas si c'était le cas, car il configure les GPIO dans le rc.local
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Répondre

Retourner vers « Utilisateurs avancés »