Les 5 précédents articles de cette série explorent différents aspects de la gestion de caméras de surveillance sur Rasberry Pi et la diffusion des flux vidéos sur une page web. Cet article en fait la synthèse.

L’objectif :

A partir d’une Raspberry Pi B+, installer motion réglé correctement pour :

  • gérer deux caméras de surveillance IP ;
  • collecter les vidéos et images générées sur détection de mouvement avec aussi peu de faux positifs que possible ;
  • afficher les flux vidéos en temps réel sur une page web accessible sur le réseau local.

Préparation du Raspberry Pi

  • Installer Raspbian Jessie Lite – voir l’article Mise en service d’un Raspberry Pi
  • Régler le Pi pour fonctionner correctement en wifi sur une adresse fixe 192.168.1.104 (nom nautilus) – voir l’article Raspberry Pi : connexion internet en wifi et/ou IP fixe

Pour moi toutes ces étapes réalisées correspondent à l’image de carte sd « jessie-lite-wifi fixe-103-2016-07-16.img « , dans le répertoire « Downloads\2016-07 Pi Images « . Il me suffit de régler l’adresse wifi et le nom du Pi comme suit :

  • Connecter le Pi en ethernet, sans dongle wifi ;
  • Editer /etc/dhcpcd.conf   et modifier l’adresse IP attribuée ;
  • Taper raspi-config  puis modifier Hostname (advanced options) et changer le nom vers « nautilus ». 
  • Mettre le dongle wifi sur le Pi puis taper « reboot  » pour redémarrer.

Ensuite se reconnecter en wifi et mettre le Pi à jour :

  • apt-get update
  • apt-get upgrade
  • rpi-update

Enlever la connexion ethernet et taper « reboot  » pour redémarrer.

uname -a  nous indique la version du système d’exploitation en fonctionnement.

Le résultat, le 14/08/2016 est 4.4.17+ #901 Fri Aug 12 17:48:40 BST 2016 armv6l GNU/Linux  .

df -h  montre qu’on utilise 17% de la carte SD de 8 Go.

Installer motion

apt-get install -y libjpeg62-turbo libjpeg62-turbo-dev  libavformat-dev  libavcodec-dev  libavutil-dev libc6-dev zlib1g zlib1g-dev
apt-get install motion

Régler motion pour mes deux caméras

Il me faut 3 fichiers de configuration (droits d’accès 664, propriétaires motion / video) puisque j’ai deux caméras (cf l’article une caméra IP avec une vieille tablette android ?) :

  • /etc/motion/motion.conf  pour tous les éléments communs aux deux caméras ;
  • /etc/motion/thread0.conf  pour la caméra ‘Foscam’ ;
  • /etc/motion/thread1.conf  pour la caméra ‘galaxy’ ;

J’exécute donc les commandes suivantes pour créer les fichiers, et donner les bons droits :

chown -R root:root /etc/motion/
touch /etc/motion/thread1.conf
touch /etc/motion/thread0.conf
chown root:motion /etc/motion/thread0.conf
chown root:motion /etc/motion/thread1.conf
chmod -R 664 /etc/motion/
chmod 755 /etc/motion/
Nota : on trouve de nombreux tutoriels dans lesquels les droits de /etc/motion sont en 664 mais ça ne fonctionne pas dans mon cas.
Faire une copie de motion.conf au cas où :
cp /etc/motion/motion.conf /etc/motion/motion.conf.OLD

créer certains fichiers et donner les droits d’accès

Exécuter chaque ligne de commande non commentée :

# /usr/bin/motion : 755
chmod 755 /usr/bin/motion

#/var/lib/motion/ ne sert pas

#var/run/motion (pour motion.pid)
mkdir /var/run/motion
touch /var/run/motion/motion.pid
chown -R motion:motion /var/run/motion/
chmod 755 /var/run/motion/
chmod 644 /var/run/motion/motion.pid

# thread2.conf (foscam) : /home/jf/motion/log/foscam
# thread1.conf (tablette) : /home/jf/motion/log/galaxy
mkdir /home/jf/motion
mkdir /home/jf/motion/galaxy
mkdir /home/jf/motion/foscam
touch /home/jf/motion/motion-log.log
chown -R root:motion /home/jf/motion/
chown motion:motion /home/jf/motion/motion-log.log
chmod -R 644 /home/jf/motion/
chmod 777 /home/jf/motion/
chmod 775 /home/jf/motion/foscam/
chmod 775 /home/jf/motion/galaxy/
Attention, les fichiers créés avec touch via Cygwin sur mon PC sont en mode sauts de ligne Windows. Il faut les passer en saut de ligne UNIX (/home/jf/motion/log/motion-log.log et /var/run/motion/motion.pid).

éditer les fichiers de configuration

Dans etc/motion/motion.conf  les lignes suivantes sont modifiées ou décommentées :

process_id_file /var/run/motion/motion.pid 
logfile /home/jf/motion/log/motion-log.log
v4l2_palette 8
width 640
height 480

netcam_keepalive on

# Number of motion thread to show in SDL Window (default: 0 = disabled)
sdl_threadnr 0 

text_double on
target_dir /home/jf/log/

# Restrict stream connections to localhost only (default: on)
stream_localhost off

webcontrol_port 8080  #must be in motion.conf, not in a thread.

# Restrict control connections to localhost only (default: on)
webcontrol_localhost off

# Output for http server, select off to choose raw text plain (default: on)
webcontrol_html_output on

thread /etc/motion/thread0.conf
thread /etc/motion/thread1.conf

Attention : il faut bien vérifier que thread0.conf et thread1.conf ont des sauts de ligne UNIX.

etc/thread0.conf  règle la configuration pour la caméra devant la maison (évidemment il faut modifier USER et PWD ainsi que l’adresse IP pour que ça corresponde à la caméra) :

# caméra FOSCAM devant la maison
# thread0.conf

videodevice /dev/video0
netcam_url http://USER:PWD@192.168.X.X:80/videostream.cgi?user=USER&pwd=PWD

############################################################
# Régler sensibilité aux mouvements pour cette caméra extérieure

threshold 3000
threshold_tune off
noise_level 32
noise_tune off
despeckle_filter EedDl
smart_mask_speed 10
lightswitch 25
minimum_motion_frames 3

############################################################

# Target base directory for pictures and films
target_dir /home/jf/motion/log/foscam

snapshot_filename f-%v-%Y%m%d%H%M%S-snapshot
picture_filename f-%v-%Y%m%d%H%M%S-%q
movie_filename f-%v-%Y%m%d%H%M%S
timelapse_filename f-%Y%m%d-timelapse

############################################################

stream_port 8081

etc/thread1.conf  règle la configuration pour la caméra créée sur la vieille tablette samsung selon l’article une caméra IP avec une vieille tablette android ? :

#caméra Galaxy tab dans la maison

videodevice /dev/video1

netcam_url http://192.168.X.X:8090/video

############################################################

threshold 3000
threshold_tune off
noise_level 32
noise_tune off
despeckle_filter EedDl
smart_mask_speed 10
lightswitch 25
minimum_motion_frames 3

############################################################

# Target base directory for pictures and films
target_dir /home/jf/motion/log/galaxy

snapshot_filename g-%v-%Y%m%d%H%M%S-snapshot
picture_filename g-%v-%Y%m%d%H%M%S-%q
movie_filename g-%v-%Y%m%d%H%M%S
timelapse_filename g-%Y%m%d-timelapse

############################################################

stream_port 8082

Démarrer motion comme un service

Dans /etc/default/motion, modifier la ligne suivante (passer à yes) : 

start_motion_daemon=yes

Redémarrer le Pi avec reboot.

http://192.168.1.104:8082/ et http://192.168.1.104:8081/ affichent les deux flux vidéos sur un navigateur local.

Si ça ne fonctionne pas, modifier /etc/init.d/motion  comme indiqué dans cet article, en y ajoutant la ligne sleep 30 . Pour moi, ça fonctionne sans.

réglage motion comme un service

Pour déboguer, on peut souhaiter savoir quel est l’utilisateur du service motion :

ps -aef | grep motion

Dans mon cas, ça montre deux utilisateurs (1ère colonne) : motion et root.

motion-user

A ce stade, si on tape 192.168.1.104:8081 ou 192.168.1.104:8082 dans un navigateur du réseau local, on voit les flux vidéos en temps réel. 

Supprimer les anciens fichiers image et vidéo 

 Comme dans l’article Supprimer les fichiers vidéo et image de plus de deux jours sauf que le script bash est modifié pour tenir compte des deux répertoires de stockage d’image :
  • créer le fichier cameradeletecron.sh dans le répertoire /home/jf/motion et lui donner les droits d’acès 764
  • Dans ce fichier, mettre les lignes suivantes :
#!/bin/bash

# /home/jf/motion/camera–delete–cron.sh

# efface les fichiers avi et jpg de plus de deux jours 
find /home/jf/motion/foscam -maxdepth 1 -name '*.avi' -type f -mtime +2 -exec rm {} \;
find /home/jf/motion/foscam -maxdepth 1 -name '*.jpg' -type f -mtime +2 -exec rm {} \;
 
find /home/jf/motion/galaxy -maxdepth 1 -name '*.avi' -type f -mtime +2 -exec rm {} \;
find /home/jf/motion/galaxy -maxdepth 1 -name '*.jpg' -type f -mtime +2 -exec rm {} \;
  •  Dans le cron, via crontab -e, insérer les lignes suivantes :
#env
SHELL=/bin/bash
HOME=/home/jf
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 
* 1 * * * bash /home/jf/motion/camera-delete-cron.sh
  • Redémarrer le Pi avec reboot.

Visualiser les flux vidéos sur une page PHP

  • Installer apache et PHP – voir l’article Un serveur Web sur mon Raspberry Pi.
  • dans le répertoire /var/www/html , créer une page index.php  qui affiche les deux flux vidéos et y ajouter un fichier A-style.css .
  • supprimer index.html

index.php contient :

<!DOCTYPE html>
<html lang="fr">

<head>
	<meta charset="utf-8">
	<title>Nautilus</title>
	<meta name="viewport" content="width=device-width,initial-scale=1" />
	<link href="A-style.css" rel="stylesheet" media="all" type="text/css"> 
</head>

<body class="pi-dashboard">

	<H1>Tableau de bord maison 192.168.1.104 (nautilus)</h1>
	 
	<section class="video-surveillance">

		<img name="Galaxy-Tab" class="stream" src="https://192.168.1.104:8082/?action=stream" width="600" height="450" alt="Live Feed" title="Galaxy Tab GT-P6210" />

		<img name="Foscam-FI8905W" class="stream" src= "http://192.168.1.104:8081/?action=stream" width="600" height="450" title="Foscam FI8905W"/>
		
	</section>
	
	<section class="capteurs">

		<h3>Autres informations</h3>
		<p>A venir...</p>
		
	</section>
 
</body>
</html>

A-style.css contient :

body {
 padding: 0.3%;
 font-family: Georgia, "Times New Roman",
 Times, serif;
 color: purple;
 background-color: #d8da3d ;
 width: 95%;
 text-align: center;
}

section.video-surveillance {
 display: flex; /* or inline-flex */
 justify-content: space-around;
 display: inline-block;
}
 
h1 {
 font-family: Helvetica, Geneva, Arial,
 SunSans-Regular, sans-serif ;
 margin-top: 1em;
}

img.stream {
 padding: 1%;
}


@media only screen and (min-width: 800px){
 
 section.video-surveillance {
 flex-direction: row ;
 }
 
 img.stream {
 max-width: 45% ;
 height: auto;
 }

}

@media only screen and (max-width: 800px){
 
 section.video-surveillance {
 flex-direction: column ;
 }
 
 img.stream {
 max-width: 95%;
 height: auto;
 }
 
}

A ce stade, la page php s’affiche lorsqu’on tape « nautilus » dans un navigateur local (192.168.1.104 dans une tablette)et les deux flux vidéos s’affichent en streaming.

df -h  montre qu’on utilise maintenant 19% de la carte SD de 8 Go.

Print Friendly, PDF & Email
0 0 votes
Évaluation de l'article
6
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x