Raspberry Pi : Serveur de surveillance

By | 3 October 2013

Mettre en place avec le Raspberry et une webcam compatible un petit serveur de détection et de surveillance. Le serveur enregistrera une video des que un mouvement sera détecté et transférera la video sur un serveur FTP. Le service sera lancé et arrêté par le gestionnaire de tâche plannifié (cron) suivant le besoin.

1. Installation

1.1 Package motion

1.2 Installation Wput

2. Paramétrages

2.1 Cron

2.2 Configuration du service motion

2.6 Script d'effacement FTP distant

2.7 Désactiver le module son de la webcam

1. Installation

L'installation a été testée sur 2 distributions raspbian et raspbmc.

1.1 Package motion

Motion est un logiciel de monotoring de signal video de camera. Il est capable de détecter si une partie important de l'image à changé . Donc de détecter un mouvement et d'enregistrer ensuite soit une image, soit une vidéo.

sudo apt-get install motion

sudo apt-get install ffmpeg

Le fichier de paramétrage principal se trouve  ici : /etc/motion/motion.conf

1.2 Installation Wput

Wput est un client d'envoi de fichier sur le réseau via FTP en ligne de commande (+Infos Wikipedia)

Installation :

sudo apt-get install wput

Le client sera utile pour le transfert des fichiers videos produits par motion vers un site FTP extérieur.

2. Paramétrages

2.1 Cron

Crontab (+infos sur Wikipedia) est un utilitaire qui permet de programmer la liste des tâches qui doivent être lancé par le programme cron.

Cron va permettre de lancer différents programmes à des heures données et périodiquement.

Pour lancer le service motion j'utilise la commande suivante :

sudo /usr/bin/motion

Pour arrêter le service j'utilise l'interface web de commande du service limité au localhost (comme recommandé par le concepteur de motion ici )

lwp-request 127.0.0.1:8080/0/action/quit

L'utilisation de la commande lwp-request pour interagir avec la page web du service. (Installation du package libwww-perl)

Accès en édition via crontab à la liste des tâches de l'utilisateur root.

sudo crontab -e
# Lancement à 8h15 du lundi au Vendredi(1-5) du programme motion
15 08 * * 1-5 sudo /usr/bin/motion 
# Lancement à 0h00 du lundi au dimanche(1-7) du programme motion et du script ftp_efface.sh
00 00 * * 1-7 sudo /usr/bin/motion | sudo ftp_efface.sh 

# Lancement à 17h30 du lundi au Vendredi(1-5) de la commande d'arrêt du service motion
# et de la suppression des fichiers se trouvant dans le répertoire /tmp/motion
30 17 * * 1-5 lwp-request 127.0.0.1:8080/0/action/quit | sudo rm /tmp/motion/* 

# Lancement à 07h00 du lundi au Dimanche(1-7) de la commande d'arrêt du service motion
# et de la suppression des fichiers se trouvant dans le répertoire /tmp/motion
00 07 * * 1-7 lwp-request 127.0.0.1:8080/0/action/quit | sudo rm /tmp/motion/*

Après modification pour recharger la liste des taches il faut exécuter la commande suivante :

sudo /etc/init.d/cron reload

Cela permet de prendre en compte les changements

2.2 Configuration du service Motion

Voici quelques paramètres de ma configration qui fonctionne plutôt correctement

process_id_file /var/run/motion.pid

daemon on # permet de lancer motion en tant que service en tâche de fond.

width 352 # largeur de la résolution

height 288 # hauteur de la résolution

framerate 2 # capture 2 frames par seconde

output_normal off  #désactivation de la capture d'image

ffmpeg_cap_motion off # désactive la capture video des changements des pixels.

ffmpeg_timelapse 5 # 5 secondes d'enregistrement à chaque détection

ffmpeg_timelapse_mode daily # découpe les fichiers videos par jour

ffmpeg_video_codec swf # défini le format de la video produite, ici swf

threshold 4000 # nombre de pixel qui doivent changer pour valider une détection de mouvement

control_port 8080 # permet de passer des commandes au service motion via une interface HTML ( ici il est utile pour l'utilisation de l'arrêt du service via cron)

on_movie_end  wput -B -R ftp://loginftp:modedepasseFTP@serveurftp.fr/Sauvegarde/%f # transfert le fichier video sur le serveur FTP.

max_mpeg_time 60 # toute les combiens de seconde un nouveau fichier video est crée quand il y a une détection de mouvement

pre_capture 2 # nombre de capture d'image pris en compte avant la détection

post_capture 2 # nombre de capture d'image pris en compte après la détection

D'autres paramètres en cours de validaiton :

roundrobin_frames 25

ffmpeg_bps 400000

2.6 Script d'effacement FTP distant

L'objectif du script et d'effacer les anciens fichiers videos ou photos présent sur le serveur FTP distant pour éviter d'accumuler des fichiers intule :

#!/bin/bash
USERNAME="login"
PASSWORD="mdp"
SERVER="serveurftp:21"
BACKUPDIR="Repertoire/video/tmp/motion"
EXTFILETODEL="*.swf"
lftp -e "mrm /${BACKUPDIR}/${EXTFILETODEL}; bye" -u $USERNAME,$PASSWORD $SERVER

Le script nécessite l'installation du package lftp.

2.7 Correction Bug de la camera

Problème de plantage de la webcam au démarrage ou pendant l'utilisation

Problème visible dans /var/log/syslog

Jun 26 20:19:50 raspbmc motion: [1] Error selecting input 0 VIDIOC_S_INPUT: Device or resource busy
Jun 26 20:19:50 raspbmc motion: [1] ioctl (VIDIOCGCAP): Inappropriate ioctl for device

Pour corriger le problème il est nécessaire d'effectuer une modificaiton dans le fichier :

/etc/modprobe.d/options

rajout de :

options uvcvideo nodrop=1 timeout=5000 quirks=0x80

Source : http://www.raspberrypi.org/phpBB3/viewtopic.php?f=37&t=11745

2.8 Désactiver le module son de la webcam (inutile et consomme de l'énergie)

Recherche un fichier commençant par /etc/modprobe.d/blacklist

Puis rajouter la ligne suivante au fichier en question

blacklist snd_usb_audio

Pour plus d'infos sur les modules et paramétrages des modules : http://doc.ubuntu-fr.org/tutoriel/tout_savoir_sur_les_modules_linux

Pour d'autres articles concernant le Raspberry voir ici

Leave a Reply

Your email address will not be published. Required fields are marked *