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

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 » dim. 15 janv. 2017 09:29

Pour info, nous n'avons plus besoin d'être root depuis un an pour le contrôle des GPIO

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 11:23

Ghislain a écrit :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 ?
Lorsque les fonctions sont séparées du script de base il est plus lisible lorsque le script est long. C'est une habitude qui ici ne serait effectivement pas nécessaire... mais tant qu'à faire, autant garder les bonnes habitudes :lol:

Quand à la variable "Porte fermée", comme je teste si elle est ouvert ou fermée, il me faut une variable de base soit l'un, soit l'autre. Je n'ai aucun intérêt d'avoir une variable vide à la base... et si la porte est effectivement fermée, je ne reçois aucune alerte au lancement du script, ce qui est correcte. Par contre, si elle est ouverte, alors je reçois l'alerte dès que le script est lancé.

Et effectivement, mon script fonctionne à merveille si je le lance manuellement. J'ai maintenant ajouter les heures et date dans le message

Code : Tout sélectionner

mosquitto_pub -h mon.host.ext -i testPublish -t porte -m "Porte de la buanderie fermée $(date '+%H:%M:%S %d.%m.%Y')"
ce qui me donne:
Porte de la buanderie ouverte 11:11:25 15.01.2017

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 11:29

dyox a écrit :Pour info, nous n'avons plus besoin d'être root depuis un an pour le contrôle des GPIO
Super, Merci pour l'info!!!

Suite à ton message j'ai effectivement essayé de lancer mon script sans sudo est cela a parfaitement fonctionner!! 8-)

Aurais-tu une référence pour ces changements? Y a-t-il d'autre nouvelles de ce genre? :D

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 » dim. 15 janv. 2017 11:45

sissad a écrit : Aurais-tu une référence pour ces changements? Y a-t-il d'autre nouvelles de ce genre? :D
Le release notes de Raspian

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

Re: bash on startup avec gpio  [RESOLU]

Message par sissad » dim. 15 janv. 2017 12:49

Voili Voilou les ptits loups...

Comme d'hab la solution était sous mon nez donc je ne la voyais pas... :roll:
C'est un peut comme quand on fait un chmod sans sudo et qu'on ne comprend pas pourquoi ça ne fonctionne pas :lol:

Pour que le script puisse fonctionner en étant lancé dans rc.local, il est impératif d'indiquer le full path soit /usr/local/bin/gpio mode 29 in
Bon j'ai plus le -g car je l'ai perdu en route en faisant mes essais :mrgreen: Peu importe, pour l'opération a effectuer c'est égal.

Mais maintenant, mon script est lancer dés le départ sans aucune erreure. DONC

PROBLÈME RÉSOLU!!! Merci les Framboisiers!!! :ugeek:

Pour ceux que cela intéresse, je remet ici le script correcte et néttoyé

Code : Tout sélectionner

#!/bin/bash

setup ()
{
 /usr/local/bin/gpio mode 29 in
 porte="fermee"
}

AttentePorte ()
{

  while [ 1 ]; do

   if [ `/usr/local/bin/gpio read 29` = 1 ] && [ "$porte" == "fermee" ]; then
    mosquitto_pub -h mon.hoste.ext -i testPublish -t porte -m "Porte de la buanderie ouverte  $(date '+%H:%M:%S %d.%m.%Y')"
    wget  -O - -q -t 1 http://api.pushingbox.com/pushingbox?devid=XXXXXXXXXXXXXX
    porte="ouverte"
   fi

   if [ `/usr/local/bin/gpio read 29` = 0 ] && [ "$porte" == "ouverte" ]; then
    mosquitto_pub -h mon.hoste.ext -i testPublish -t porte -m "Porte de la buanderie fermée $(date '+%H:%M:%S %d.%m.%Y')"
    porte="fermee"
   fi

   sleep 0.1

  done

}

setup
while true; do
 AttentePorte
done
Comme je n'ai pas encore trouvé d'APP avec lequel je puisse personnaliser les notifications suivant les pub mqtt j'utilise puschingbox mais c'est temporaire... mon but étant de ne pas avoir à utiliser un service externe.
et en plus, le message et généralement envoyé deux fois et jamais avec le même intervalle... ce n'est donc pas l'idéal.

Mais c'est bien, j'avance :lol:

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

Re: bash on startup avec gpio

Message par Ghislain » dim. 15 janv. 2017 16:40

Ghislain a écrit :As tu bien mis les chemins complet dans ton script ?
:roll:

Pense à passer en Résolu ;)

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 22:12

Me revoilà avec des nouvelles concernant mon problème de load on startup

Pour être informé par une alerte sonore j'ai écrit un autre script qui lit les posts sur le topic en bash.
Nouveau problème pour le lancer automatiquement.
Je le lance maintenant via crontab -e
J'y ajoute une ligne

Code : Tout sélectionner

@reboot /path/script.sh &
J'ai ajouter un sleep 30 à mon script pour être sûr que tout ce qui est nécessaire soit chergé avant le lancement du script à proprement dit. J'y ai également ajouter un test de connexion au réseau avec un ping.
ça fonctionne impeccable!
J'avouerai que je ne connaissait pas crontab avant aujourd'hui... Information reçu de mon frère... Merci Kikim :ugeek:

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

Re: bash on startup avec gpio

Message par Ghislain » dim. 15 janv. 2017 23:22

Fait voir ?

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

Re: bash on startup avec gpio

Message par sissad » lun. 16 janv. 2017 08:18

Premier fichier bash pour la lecture du flux mqtt et lancement d'un fichier audio différent pour chaque alerte. Ici la porte du coupe vend ce trouvant avant ma porte d'entrée et la porte de la buanderie donc l'accès ne ce fait que de l'exterieur.
Fichier sonnette.sh

Code : Tout sélectionner

#!/bin/bash
sleep 30
testval=0
while [ $testval -eq 0 ]
do 
	testval=`ping -q adressipdemonrouteur -c1 | grep -c rtt`
done
while read msg;
do
  if [[ "$msg" =~ "buanderie ouverte" ]]; then
   aplay /path/beep24.wav
  fi
  if [[ "$msg" =~ "entree ouverte" ]]; then
   aplay /path/doorbell_x.wav
  fi
   echo $msg;
done < <(mosquitto_sub -h mon.host.ext -t topic -q 1)
Je travail ici sur un notebook avec linux mint et pour le lancer automatiquement au démarrage, je lai donc configurer dans crontab
Pour lancer crontab la première fois, la commande et

Code : Tout sélectionner

crontab -e
man crontab pour plus de détails.
Chez moi, ça l'ouvre automatiquement avec nano

et en bas de page j'ajoute la ligne
@reboot /home/sissad/Documents/Raspberry/sonnette.sh &

cd qui donne

Code : Tout sélectionner

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
@reboot /path/sonnette.sh &
Crontab étant basé Debian, on le trouve également sur le Raspberry Pi... Il le sera sûrement aussi sur tout les autres dérivés Debian. Je n'ai pas essayé mais je ne vois aucune raison pour que cela ne fonctionne pas à l'identique.

Cela fonction maintenant chez moi, chui super contant :P

Je remets ici le script de lecture du GPIO et envoie du message MQTT

Code : Tout sélectionner

#!/bin/bash
setup ()
{
 /usr/local/bin/gpio mode 29 in
 porte="fermee"
}
AttentePorte ()
{
while [ 1 ]; do
if [ `/usr/local/bin/gpio read 29` = 1 ] && [ "$porte" == "fermee" ]; then
	mosquitto_pub -h my.host.ext -i testPublish -t porte -m "Porte de la buanderie ouverte  $(date '+%H:%M:%S %d.%m.%Y')"
	wget  -O - -q -t 1 http://api.pushingbox.com/pushingbox?devid=vXXXXXXXXXXXXXX
	porte="ouverte"
fi
if [ `/usr/local/bin/gpio read 29` = 0 ] && [ "$porte" == "ouverte" ]; then
	mosquitto_pub -h my.host.ext -i testPublish -t porte -m "Porte de la buanderie fermée $(date '+%H:%M:%S %d.%m.%Y')"
	porte="fermee"
fi
sleep 0.1
done
}
setup
while true; do
 AttentePorte
done

De mon côté, la suite est de faire un tape cloche à l'aide d'un esp-01 :lol:
Ayant reçu une grosse cloche de mon beau-père, il serait assez marrant de l'utiliser comme gong d'entrée ;)
Modifié en dernier par sissad le lun. 16 janv. 2017 20:12, modifié 1 fois.

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

Re: bash on startup avec gpio

Message par Ghislain » lun. 16 janv. 2017 16:54

C'était pour le script sur le forum ;)

Répondre

Retourner vers « Utilisateurs avancés »