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.
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
Le 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
Pour que le service soit exécuté à chaque reboot du Raspberry Pi, tapez:
sudo update-rc.d pir defaults
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
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.