dimanche 12 décembre 2010

Gestion des évènements - LE RETOUR !

Accroche toi à ton siège petit scarabée, ça va envoyer du pâté!

1) Objectif


En cas d'appel manqué sur skype ou de mail arrivé je veux:
Si mamie est devant l'ordi :
  Si mamie n'est pas devant l'ordi
  • que ça attende qu'elle revienne
  • que ça joue un son pour dire qu'elle à manqué un appel / qu'un mail est arrivé
  • que ça affiche le profil / affiche thunderbird

 2) Le script

Le script est assez détaillé et commenté. Ci dessous le script pour skype. Celui pour Thunderbird est quasiment identique mais ce n'est pas le même son joué et c'est thunderbird qu'on affiche à la place du script d'évènement skype.

#En bleu les lignes de commentaires et inutiles (genre echo)

Code:
#!/bin/bash

#Vérifie si motion est déjà en marche
MOTION=$(pidof motion)"0"
echo "pid de motion=$MOTION"

while [ "$MOTION" != "0" ]
do
 #on attend que motion s'arrête
 sleep 3
 MOTION=$(pidof motion)"0"
 echo "pid de motion=$MOTION"
 if [ "$MOTION" = "0" ]; then
  {
  echo "motion vient de s'arrêter, qq est devant l'ordi"
  #on lance le script de notification SCRIPT EVENEMENT et on quitte
  sleep 5
  /home/mamie/.motion/motion-wait-phone.sh
  exit 0;
  }
 else
  {
  echo "on continu la boucle while"
  }
 fi
done 
#motion n'est pas en fonctionnement alors on continue


#lancer motion
#si un autre programme utilise déjà la cam alors motion attends
#que la cam soit dispo et continu
motion -c /home/mamie/.motion/motion-2.conf &

sleep 15
#on vérifie si quelqu'un est déjà devant l'ordi
#si oui il y a des images dans le dossier /tmp/motion
IMG=$(du /tmp/motion | cut -f1) 
#efface le contenu du dossier temporaire
rm /tmp/motion/*
service motion stop

if [ $IMG -gt 30 ]; then
{
echo "il y a du monde près de l'ordinateur !!!!!!!"
#on vérifie maintenant si le screensaver est actif ou non 
SCREEN=$(xscreensaver-command -time | cut -f3-4 -d " ")
echo result = $SCREEN
# résult peut être : screen blanked ou screen non-blanked
 if [ "$SCREEN" = "screen blanked" ] ; then
 {
 echo "le screensaver marche "
 #SCRIPT EVENEMENT
 #on désactive le screensaver
 xscreensaver-command -deactivate
 #on joue un son
 play /home/mamie/.son/phone-missed-skype.ogg &
 #on lance le clic sur l'évènement skype
 /home/mamie/.motion/click-event-skype.sh
 #/FIN SCRIPT EVENEMENT
 }
 else
 {
 echo "le screensaver marche pas"
 #on lance seulement le clic sur l'évènement skype
 /home/mamie/.motion/click-event-skype.sh
 }
 fi

}
else
{
echo "personne est devant l'ordi"
#on lance la détection de mouvement qui déclenchera en cas de mouvement le SCRIPT EVENEMENT
motion -c /home/mamie/.motion/motion-phone.conf &
}
fi

exit 0;

Et bien sûr dans le fichier motion-phone.conf , en cas d'évènement ça pointe vers le script suivant (qui est idem à SCRIPT EVENEMENT du code ci-dessus) :


Code:
#!/bin/bash

#mamie est de retour devant l'ordi (script lancé par l'évènement configuré dans motion conf)
# on désactive motion
service motion stop &
#on désactive le screensaver
xscreensaver-command -deactivate
#Vérifie si un son est déjà en marche (si plusieurs évènements)
SON=$(pidof play)"0"
echo "pid de son=$SON"
while [ "$SON" != "0" ]
do
 #on attend que le son en cours s'arrête
 sleep 3
 SON=$(pidof play)"0"
 echo "pid de son en cours=$SON"
done 
echo "le son a fini de jouer"
#on joue un son
play /home/mamie/.son/phone-missed-skype.ogg &
#on lance le clic sur l'évènement skype
/home/mamie/.motion/click-event-skype.sh
rm /tmp/motion/*

exit 0;


Ce script permet en plus de gérer les situations si il y a plusieurs évènements qui se produisent pour les exécuter les uns après les autres quand mamie reviens devant l'ordi.

Ca fait plaisir quand ça marche bien! Mais à écrire, ça fait mal à la tête!

En tous cas, je suis épaté de la puissance des script shell qu'on peut écrire sous UBUNTU et du nombre de programme qui acceptent les lignes de commandes. Ca n'aurait pas été possible sur windows.


Allez, promis si j'ai plus compliqué à faire, la prochaine fois je programme pour de vrai en python!
Ordinateur pour grand-parents, ordinateur pour papy, ordinateur pour personnes âgée, linux pour mamie, linux pour papy, linux pour personne âgée, linux pour grands-parents.

1 commentaire:

  1. Bravo, c'est vraiment beau :)

    Je suis épatée aussi par la concision des scripts. C'est vraiment puissant. Ça donnerait presque envie de s'y mettre.... presque ! ;)

    RépondreSupprimer