Vidéo-surveillance automatique avec Raspberry Pi
Introduction
Nous supposons que vous avez procédé à l’installation de votre Raspberry Pi et de sa caméra. Il existe de nombreux tutoriels sur le net, en particulier https://www.raspberrypi-france.fr/installer-camera-videosurveillance/.
Principe de fonctionnement
Le script bash présenté sera exécuté par cron toutes les minutes. S’il est toujours actif d’une précédente instance, on le termine. Si le dernier fichier du répertoire motion est une vidéo, a priori en cours de création, le script se termine, en attente de la génération complète de la vidéo.
Les fichiers autres que vidéo du répertoire motion sont ignorés puis effacés, les vidéos sont traitées de la façon suivante :
- copiées dans un répertoire du serveur ftp de la Pi
- uploadées dans un répertoire d’un serveur ftp externe (du F.A.I)
- deux mails sont envoyés, l’un juste pour indiquer qu’une vidéo de surveillance est disponible, l’autre contenant un zip de la vidéo. Si la taille du fichier zip est refusée par le serveur smtp, le premier mail sert d’avertissement
- effacées du répertoire motion[/list]
Pré-requis
Avant toute chose assurez-vous que votre système soit à jour :
[b]sudo apt-get update && sudo apt-get upgrade && sudo reboot[/b]
Installez maintenant le package ftp :
[b]sudo apt install ftp[/b]
puis un serveur ftp
[b]sudo apt install vsftpd[/b]
ou, au choix
[b]sudo apt install proftpd[/b]
vsftpd est plus sécurisé que proftpd, mais les deux fonctionnent parfaitement pour ce qu’on attend d’eux. La configuration du serveur ftp se trouve ici : ▷ Installer un serveur FTP sur votre Raspberry Pi
Installer les packages permettant d’envoyer des mails :
[b]sudo apt install mailutils mpack
sudo apt install ssmtp[/b]
Configurer ssmtp, en modifiant le fichier /etc/ssmtp/ssmtp.conf, par nano ou vi :
[b]sudo nano /etc/ssmtp/ssmtp.conf[/b]
qui doit contenir les lignes suivantes adaptées à vos besoins :
[b]hostname=srvweb
FromLineOverride=NO
root=mon_adresse_mail@mon_FAI
mailhub=smtp.gmail.com:587
AuthUser=mon_adresse_gmail@gmail.com
AuthPass=mon_mot_de_passe_gmail
UseSTARTTLS=YES[/b]
Je vous conseille de créer un répertoire dédié aux vidéos dans le serveur ftp :
[b]sudo mkdir ~ftp/motion[/b]
Serveur ftp externe
Dans le cas où un mouvement serait détecté, je voudrais mémoriser la vidéo sur un serveur ftp externe. En effet, si mon domicile était visité par des indélicats, et qu’ils coupent l’électricité ou débranchent le Pi et/ou la box,je n’aurais plus accès au Raspberry Pi, et donc, je stockerai la vidéo sur un serveur ftp fourni par mon F.A.I. Ce pourrait être, par exemple :
[b]perso-ftp.orange.fr
ftpperso.free.fr
etc.[/b]
Pour la création de votre espace perso ftp, voir la FAQ du F.A.I, ou le tuto kivabien.
Script bash
Créer un fichier script, par exemple dans un répertoire « scripts » du repertoire perso :
[b]mkdir ~pi/scripts
cd ~pi/scripts
nano telesurv[/b]
Selon vos habitudes, vous pouvez utiliser un autre éditeur de textes que nano, par exemple vi.
Remplir le fichier avec ce qui suit :
(ATTENTION, il y a des commentaires qui n’apparaissent pas en tant que tels dans le forum, sais pas d’où ça vient…) La ligne SMTP =smtp.gmail.com:587 n’apparaît pas telle quelle, mais comme SMTP:587=smtp.gmail.com.
[b]#!/bin/bash
REPUSER=~pi # repertoire de l’utilisateur
LISTE=/tmp/fichiers # liste des fichiers a traiter
REPERTOIREMOTION=« ${REPUSER} »/motion # Repertoire de motion
MONMAIL=monadresse@monFAI # Mon adresse mail
SMTP:587=smtp.gmail.com # Mon serveur smtp
IDENTSMTP=mon_mail_de_gmail@gmail.com # Identifiant smtp
PASSWORDSMTP=mon-mot-de-passe_gmail # Mot de passe du smtp
REPERTOIREFTP=/srv/ftp/motion # Repertoire du serveur ftp local
SERVEURFTP=perso-ftp.orange.fr # Serveur ftp externe
UTILFTP=mon_mail_orange@orange.fr # utilisateur du serveur ftp externe
PASSWDFTP=mon_mot_de_passe_ftp # mot de passe du server ftp
PORTFTP=21 # port ftp externe
REPFTP=motion # repertoire ftp ou copier la video
VIDEODISPO=« Une video est dispo. dans le serveur ftp »
WARNING=« Telessurveillance active ca a bouge… »
########### A partir de la, rien ne devrait etre modifie ###################
[ -e « ${LISTE} » ] && {
#
##### Le fichier existe, donc le script est deja actif, on sort
#
echo « Une autre instance est en cours d’execution »
exit 1
}
cd « ${REPERTOIREMOTION} »
ls -t >« ${LISTE} »
DERNIER=$(tail -1 « ${LISTE} »)
TYPE=« ${DERNIER##.}"
[ « ${TYPE}A » == « aviA » ] && {
#
##### Dernier fichier = video,attendre qu’il soit entierement genere
#
echo « Video en cours de generation, attente… »
rm « ${LISTE} »
exit 2
}
IFS=$(echo -ne « \n\r »)
#cat $LISTE
for FICHIER in $(cat « ${LISTE} ») ; do {
#
##### traitement de chaque fichier
#
echo on traite ${FICHIER}
TYPE="${FICHIER##.} »
case « ${TYPE} » in
jpg)
#
##### Image, on efface pour le moment
#
;;
avi)
#
##### video, on la zippe et on l’envoie par mail
#
echo « on envoie $FICHIER apres l’avoir zippe »
#
##### La video est copiee dans le repertoire ftp
##### on m’informe qu’une nouvelle video a consulter
##### et on me l’envoie au format zip
#
zip « /tmp/${FICHIER}.zip » « ${FICHIER} »
#
#### on envoie la video sur le serveur ftp du Pi
#
cp « ${FICHIER} » « ${REPERTOIREFTP} »
#
##### on m’avertit par mail
#
echo « ${FICHIER} »|mail -s « ${VIDEODISPO} » « ${MONMAIL} »
#
#### et on m’envoie la video zippee
#
mpack -s « ${WARNING} » « /tmp/${FICHIER}.zip » « ${MONMAIL} »
#
##### On envoie le video sur le serveur ftp externe
#
echo « user ${UTILFTP} ${PASSWDFTP}
cd ${REPFTP}
put ${FICHIER}
bye » | ftp -vin « ${SERVEURFTP} » « ${PORTFTP} »
;;
*)
#
##### fichier inconnu ou inattendu
#
;;
esac
#
##### on efface le fichier traite du repertoire motion
#
echo on efface le fichier traite : « ${FICHIER} »
rm -f « ${FICHIER} »
}
done
rm -f « ${LISTE} »
############################################### fin du script telesurv[/b]
Exécuter le script chaque minute
Rendre le script exécutable :
[b]sudo chmod 755 ~pi/scripts/telesurv[/b]
Initialiser ou modifier la tâche cron par :
[b]sudo crontab -e[/b]
Ajouter la ligne suivante :
* * * * * ~pi/scripts/telesurv >/dev/null 2>&1
Remarques
Le scripts comporte quelques lignes de mise au point (echo) qu’il suffit de (dé)commenter si on veut le lancer de façon autonome pour vérifier qu’il fonctionne correctement.
HAVE FUN !