Détecteur de mouvement (PIR) du Raspberry Pi intégré à la ZiBASE – Part 2/2

Nous avons vu dans la partie 1, comment installer le module PIR,  lancer le script python pir.py et déclarer un périphérique virtuel sur la ZiBASE.

zibase

Nous allons voir maintenant comment déclarer notre script python comme un service linux qui sera démarré automatiquement à chaque reboot du Raspberry Pi.

Les fichiers nécessaires

Rappel: Les fichiers sont disponibles au téléchargement sur le site https://github.com/onlinux/Raspberry-Pi-PIR .Vous pourrez y télécharger l’ensemble du projet:

pi@raspi $ wget https://github.com/onlinux/Raspberry-Pi-PIR/archive/master.zip
pi@raspi ~ $ unzip master.zip 

ll-RAspberryLe fichier qui va nous permettre de déclarer notre script  python  comme service système est le fichier pir.

Il faut dans un premier temps copier ce fichier dans le répertoire /etc/init.d du Raspberry Pi et lui changer ses droits:

sudo cp pir /etc/init.d
sudo chmod 755 /etc/init.d

Copier le script python dans le répertoire /usr/local/bin

sudo cp pir.py /usr/local/bin
sudo chmod 755 /usr/local/bin/pir.py

Vous pouvez dès à présent exécuter  le script pour lancer le service :

sudo /etc/init.d/pir restart

execution-pir

Pour que le service soit exécuté à chaque reboot du Raspberry Pi, tapez:

sudo update-rc.d pir defaults

update-rc1

 

A ce stade, vous pouvez rebooter le Raspberry Pi, notre service sera lancé à chaque démarrage.

Le script pir

#! /bin/sh                                                                                                    
#                                                                                                                 
# Author: Eric Vandecasteele, 2014                                                                                
# http://blog.onlinux.fr                                                                                              
#                                                                                                                            
# /etc/init.d/pir                                                                                                            
#                                                                                                                                
### BEGIN INIT INFO                                                                                                                  
# Provides:          pir                                                                                                              
# Required-Start:                                                                                                                       
# Required-Stop:                                                                                                                           
# Default-Start:     2 3 4 5                                                                                                                
# Default-Stop:      0 1 6                                                                                                                   
# Short-Description: pir daemon drives the Passive Infra Red Motion Detector
# Description:       The pir daemon sends a http request on any Motion Detection Alarm
### END INIT INFO

# This next line determines what user the script runs as.
# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
DAEMON_USER=root

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/local/bin/pir.py

# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/pir.pid

NAME=pir

test -x $DAEMON_OPTS || exit 0

. /lib/lsb/init-functions


do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started

        if pidofproc -p $PIDFILE "$DAEMON" > /dev/null 2>&1 ; then
                return 1
        fi
}

case "$1" in
  start)
     log_daemon_msg "Starting $NAME"
     do_start
     RET_STATUS=$?
     case "$RET_STATUS" in
        1)
           log_success_msg
           [ "$VERBOSE" != no ] && [ $RET_STATUS = 1 ] && log_warning_msg "Daemon was already running"
        ;;
        *)
           start-stop-daemon --start  --background --oknodo --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --exec $DAEMON  $DAEMON_OPTS 
           log_end_msg $?
        ;;
     esac
     ;;
  stop)
     log_daemon_msg "Stopping $NAME"
     start-stop-daemon --stop --pidfile $PIDFILE --retry 10
     log_end_msg $?
   ;;
  force-reload|restart)
     $0 stop
     $0 start
   ;;
  status)
     status_of_proc -p $PIDFILE $DAEMON $NAME  && exit 0 || exit $?
   ;;
 *)
   echo "Usage: /etc/init.d/pir {start|stop|restart|force-reload|status}"
   exit 1
  ;;
esac
exit 0

Le fichier log

Dans la partie 1, nous avons vu que dans le script pir.py nous avons défini notre fichier log comme /var/log/pir.log
pir-log

Copier le fichier  de configuration de la log logrotate.d/pir dans le répertoire /etc/logrotate.d

sudo cp logrotate.d/pir /etc/logrotate.d
/var/log/pir.log {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                /etc/init.d/pir restart > /dev/null
        endscript
}

La gestion de la logfile de notre service pir sera désormais prise en charge par le système.

Voilà, à ce stade le projet est terminé. Nous avons installé un service sur notre Raspberry Pi qui à chaque détection de mouvement va envoyer une requête http à la ZiBASE, afin d’alimenter notre détecteur de présence virtuel.pi-motion-plate-forme