1- Présentation
Dans ce post, je souhaitais regrouper toutes mes recherches sur le sujet de la vidéo surveillance.
Et tenter de proposer une méthode pour une installation complète et fonctionnelle, vu que c'est celle que j'utilise !
Voici ce que permet de faire cette installation :
- Il s'agit d'un serveur dédié à la vidéo survaillance domestique.
- Branché en wifi pour permettre de le positionner n'importe où dans la maison.
- Motion est utilisé pour capturer des photos (2 par seconde) lorsqu'un mouvement est détecté.
- Ces photos sont, au fur et à mesure, sauvées sur un serveur distant.
- Lorsque la détection est terminée, un mail est envoyé pour prévenir.
2- install du serveur ubuntu
suivre l'install : aucun pb rencontré !
Version installée : ubuntu serveur 10.04LTS.
3- configuration du wifi :
En s'appuyant sur
http://doc.ubuntu-fr.org/wpa.
Modifier le fichier /etc/network/interfaces par :
# The primary network interface
auto eth0
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet dhcp
wpa-conf managed
wpa-ap-scan 1
wpa-scan-ssid 1
wpa-ssid <nom de la connexion wifi>
wpa-key-mgmt WPA-PSK
wpa-psk <clé wap>
4- install du server ssh:
Ceci permet de continuer l'installation depuis un poste de bureau. Et de permettre de copier coller directement le code !
installez le paquet openssh-server sur le serveur.
sudo apt-get install openssh-server
Par défaut, il se lance au démarrage.
Il est désormais possible d'utiliser Putty pour se connecter à distance.
pour connaitre l'IP de connexion de serveur :
ifconfig
5- Install motion
sudo apt-get install motion
6- configurer les webcams en liens statiques
Pour éviter d'avoir un démarrage aléatoire d'une caméra sur l'ensemble de celles installées.
perso j'ai deux webcams. La détection est lancée à partir d'une seule.
voir
http://doc.ubuntu-fr.org/webcam#conflit_avec_la_carte_tv_ou_autre
créer le fichier /etc/udev/rules.d/83-duplicate_devs.rules
# Persistent symlinks for webcam and tuner
KERNEL=="video*", ATTRS{idProduct}=="c326", ATTRS{idVendor}=="0ac8", SYMLINK+="webcam-integree"
KERNEL=="video*", ATTRS{idProduct}=="0804", ATTRS{idVendor}=="046d", SYMLINK+="webcam-logitech"
modifier l'id product et vendor suivant votre matériel.
7- Installer les programmes à lancer par motion
sudo apt-get install mailutils
sudo apt-get install ssmtp
modifier /etc/ssmtp/ssmtp.conf qui permet d'envoyer simplement un email via gmail
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=monmail@gmail.com
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
# Where will the mail seem to come from?
#rewriteDomain=
# The full hostname
hostname=video-surveillance
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES
AuthUser=<mon user Gmail (sans @gmail.com)>
AuthPass=<Mot de passe Gmail>
rewriteDomain=gmail.com
8- Personnaliser l'installation de motion
créer le répertoire et l'associer à l'utilisateur motion
cd /home
sudo mkdir motion
sudo chown motion motion
cd motion
sudo mkdir capture
sudo chown motion capture
sudo mkdir archives
sudo chown motion archives
Il peut être utile d'associer votre utilisateur/login au groupe de motion.
Remarque:
Motion est lancé en service par l'utilisateur root.
Mais il est nécessaire que les répertoires de travail soient associés à un utilisateur 'motion' !
Sans faire 'chown' ça ne marche pas !
créer le fichier /home/motion/detection.sh:
et lui donner les droits d'exécution :
touch /home/motion/detection.sh
chmod 770 /home/motion/detection.sh
chown motion /home/motion/detection.sh
A savoir sur ce programme :
* Avant l'heure de démarrage, les captures sont supprimées.
* Après l'heure de démarrage, le programme boucle tant qu'il trouve des captures.
* Les captures sont regroupées par jour.
* Et lorsqu'il n'y a plus rien à sauver, il envoie un mail et se termine.
* gap=10 de motion.conf défini le temps minimum pour son prochain lancement.
* Il ne peut pas y avoir plusieurs instances de detection.sh en simultané.
#!/bin/sh
ARCHIVE=`date '+%Y%m%d'`
MOTN='/home/motion'
LOG=$MOTN/detection.log
HOST='ftpperso.sfr.fr'
PORT='21'
USER='monsite.perso.sfr.fr'
PASSWD='xxxxxxx'
SITE='http://monsite.perso.sfr.fr/mes-captures'
DELTA=360
START=`cat $MOTN/startdate.inf`
NOW=`date +"%s"`
AVANT=`expr $NOW - $DELTA`
securiser () {
if [ -d "$MONT/archives/$ARCHIVE" ]; then
echo "$MOTN/archives/$ARCHIVE existe bien">>$LOG
else
mkdir $MOTN/archives/$ARCHIVE
mkdir $MOTN/archives/$ARCHIVE/tmp
ftp -i -n $HOST $PORT << EOF
quote USER $USER
quote PASS $PASSWD
cd motion-lin-capture/albulle/data/photos/motion
mkdir $ARCHIVE
quit
EOF
fi
rm -f $MOTN/capture/*.swf
mv $MOTN/capture/*.jpg $MOTN/archives/$ARCHIVE/tmp
ftp -i -n $HOST $PORT << EOF
quote USER $USER
quote PASS $PASSWD
cd mes-captures/$ARCHIVE
lcd $MOTN/archives/$ARCHIVE/tmp
mput *.jpg
quit
EOF
echo "uploaded files!" >>$LOG
date >> $LOG
mv $MOTN/archives/$ARCHIVE/tmp/*.jpg $MOTN/archives/$ARCHIVE
}
sleep 1
RUNNING=`pgrep detection.sh | wc -l`
echo $RUNNING >> $LOG
if [ $RUNNING -lt 3 ]; then
echo date "-----start detection -----" >>$LOG
date >> $LOG
if [ $AVANT -gt $START ] ; then
echo "detection demarree" >>$LOG
date >> $LOG
UPLOAD='FALSE'
while [ $(ls $MOTN/capture/|wc|tr -d ' ') != "000" ]
do
sleep 2
securiser
UPLOAD='TRUE'
done
if [ $UPLOAD = 'TRUE' ]; then
echo "des captures ont ete prises a la maison ! : $SITE" | mailx -s "Surveillance" monmail@yahoo.fr
echo "mail au proprio" >>$LOG
date >> $LOG
fi
else
rm -f $MOTN/capture/*.jpg
echo "C pas l'heure" >>$LOG
fi
date >> $LOG
echo "-----fin detection -----" >>$LOG
else
echo "-----deja en cours de detection -----" >>$LOG
fi
# End of script
Paramétrer le script :
* MOTN='/home/motion' -> home de l'installation de la video surveillance
* LOG=$MOTN/detection.log -> fichier de log du programme
* HOST='ftpperso.sfr.fr' -> FTP du site où son uploadées les images
* PORT='21' -> port du FTP
* USER='monsite.perso.sfr.fr' -> user du FTP
* PASSWD='xxxxxxx' -> mot de passe du FTP
* SITE='
http://monsite.perso.sfr.fr/mes-captures' -> URL du site, pour information dans le mailenvoyé.
* DELTA=360 -> delta de démarrage de la vidéo surveillance. ''en secondes''.
* Définir le bon email pour l'envoi.
* Dans la connexion FTP du programme il manque le paramètre du répertoire distant où copier les images, il faut donc le mettre à jour... ou modifier le code pour le paramétrer :
ftp -i -n $HOST $PORT << EOF
...
cd mes-captures/$ARCHIVE
...
EOF
Je suis actuellement entrain de regarder une solution bis pour le FTP, qui a tendance à planter au bout de plusieurs jours...
Voici maintenant les modifications importantes de /etc/motion/motion.conf
# Start in daemon (background) mode and release terminal (default: off)
daemon on
# File to store the process ID, also called pid file. (default: not defined)
process_id_file /home/motion/motion.pid
# Videodevice to be used for capturing (default /dev/video0)
# for FreeBSD default is /dev/bktr0
videodevice /dev/webcam-logitech
#videodevice /dev/webcam-integree
# Image width (pixels). Valid range: Camera dependent, default: 352
width 640
# Image height (pixels). Valid range: Camera dependent, default: 288
height 480
# Detect motion in predefined areas (1 - 9). Areas are numbered like that: 1 2 3
# A script (on_area_detected) is started immediately when motion is 4 5 6
# detected in one of the given areas, but only once during an event. 7 8 9
# One or more areas can be specified with this option. (Default: not defined)
area_detect 123456789
# Ignore sudden massive light intensity changes given as a percentage of the picture
# area that changed intensity. Valid range: 0 - 100 , default: 0 = disabled
lightswitch 30
# Gap is the seconds of no motion detection that triggers the end of an event
# An event is defined as a series of motion images taken within a short timeframe.
# Recommended value is 60 seconds (Default). The value 0 is allowed and disables
# events causing all Motion to be written to one single mpeg file and no pre_capture.
gap 10
# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /home/motion/capture
# The mini-http server listens to this port for requests (default: 0 = disabled)
webcam_port 0
# File path for motion triggered images (jpeg or ppm) relative to target_dir
# Default: %v-%Y%m%d%H%M%S-%q
# Default value is equivalent to legacy oldlayout option
# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-%q
# File extension .jpg or .ppm is automatically added so do not include this
# Set to 'preview' together with best-preview feature enables special naming
# convention for preview shots. See motion guide for details
jpeg_filename %Y%m%d%H%M%S-%q
on_event_start /home/motion/detection.sh
9- Créer les raccourcis utiles
De manière générale les commandes suivantes sont à se rappeler.
Démarrer motion :
sudo service motion start
Stopper motion :
sudo service motion stop
Mais comme c'est bien plus simple de se créer des alias :
dans .bash_aliases du home de l'utilisateur classique (créé lors de l'install du serveur)
alias mocap='cd /home/motion'
alias moetc='sudo cd /etc/motion'
alias molog='sudo cat /var/log/syslog | grep motion'
alias morestart='sudo service motion restart'
alias mostart='sudo service motion start'
alias mostate='sudo ps -A | grep motion'
alias mostop='sudo service motion stop'
10- Petit script de nettoyage des logs
rm -fR /home/motion/archives/*
rm -fR /home/motion/capture/*
>/var/log/syslog
11- modifier le lanceur du service
fichier : /etc/init.d/motion :
case "$1" in
start)
if check_daemon_enabled ; then
log_daemon_msg "Starting motion detection daemon : $NAME"
if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion ; then
DEVICE=`cat /etc/motion/motion.conf | grep "videodevice /dev" | awk -F" " '{print $2}'`
log_daemon_msg "device utilise : $DEVICE"
date +"%s" > /home/motion/startdate.inf
rm -f /home/motion/detection.log
log_end_msg 0
else
log_end_msg 1
RET=1
fi
fi
;;
stop)
log_daemon_msg "Stopping motion detection daemon: $NAME"
if start-stop-daemon --stop --oknodo --exec $DAEMON --retry 30 ; then
# pour être sûr que tous les process soient bien arrétés ! Sinon, impossible de relancer motion correctement...
pkill -9 detection.sh
pkill -9 ftp
log_end_msg 0
else
log_end_msg 1
RET=1
fi
;;
12- Préparer un site web de sauvegarde des captures
J'ai choisi Albulle1.2.1 :
http://albulle.jebulle.net/
Car c'est un site qui ne prend pas beaucoup de place à l'install et il n'utilise pas de base de données.
Pour l'installation détaillée, les captures sont uploadées vers le répertoire distant /mes-captures/<Date du jour>.
13- tester
* Redémarrer le serveur et vous connecter. normalement motion devrait être démarré.
(en fonctionnement classique, il n'est pas utile de se connecter, c'est pour ça que motion est installé en service !)
Si motion n'a pas démarré (mostate), il vous faut vérifier la log (molog).
Elle vous apprendra probablement ce qui foire !
Le gros des problèmes que j'ai rencontré, sont des problèmes de droits (exécution et owner).
* Vous pourrez baisser le délai de démarrage à une 10ène de secondes (dans detection.sh). Ca permet de lancer et relancer motion facilement.
* suivre l'exécution du programme detection.sh par
tail -f /home/motion/detection.log
14- Ce qui manque
* Vous trouverez probablement quelques lignes parasites dans les scripts... Ce sont mes précédents essais.
Et se sera à nettoyer !
* Affiner les réglages de motion par exemple "lightswitch". Chez moi les changements de luminosités sont mon plus gros problème !
* Vous pourrez installer les drivers propriétaires, mais ceci dépend de votre matériel.
J'attend vos questions, retours, remarques et autres bonnes idées, et j'espère que ce post vous sera utile !