23 mai 2016

Video surveillance open source avec un raspberry pi 2, quelques vieux smartphones et zoneminder

Introduction:

Un projet à présenter  lors de la soirée raspberry pi du LUG dont je suis membre... Bon je vais pas faire un mediacenter ou une machine de retrogaming trop classique. Faisons quelqu chose qui a du sens avec une raspberry qui est économe en énergie et en prix. Un système de vidéo-surveillance à petit prix et faible consommation d'énergie. 40€ pour le raspberry pi 2, 10-20-30€ pour un switch ethernet gigabit d'occasion, 4-6€ pour une carte SD 8Go classe 10, un point d'accès wifi soit 20-40 € d'occasion et enfin le vieux smartphone qui traîne au fond d'un tiroir sinon quelques dizaines d'euros, quelques câbles UTP et un microusb avec plug 220V. En avant...

Matériel:

Un raspberry pi 2 ou 3 fonctionnel (carte microSD 8 go classe 10, alimentation électrique via micro USB et un boîtier)
Un point d'accès wifi
Un commutateur ethernet
2 câbles UTP cat 5 ou supérieur
Un smartphone android avec wifi et caméra
 Pendant la phase de configuration seulement:
un clavier et une souris usb
un moniteur hdmi
un câble HDMI

  Installer le système d'exploitation sur le raspberry:

Installer la dernière version de raspbian (debian optimisé pour raspberry pi) sur le raspberry, la version jessie-lite, à la date de mai 2016, pas besoin d'interface graphique.
On trouve cette image à cette adresse:
 http://raspbian-france.fr/telechargements/
Voir ce lien pour la procédure de copie de l'image de raspbian sur la carte micro sd à partir d'une machine Linux: https://www.raspberrypi.org/documentation/installation/installing-images/linux.md

 Configuration de base du raspberry 

Raspbian est configuré via l'outil raspi-config via la commande:
 sudo raspi-config:
Pour un système vivant en Belgique voilà les points à configurer
expand filesystem, langue fr_BE.UTF-8 UTF-8, timezone Europe/Brussel, clavier azerty belge (garder les options par défaut à priori), ssh actif,  changer le mot de passe par défaut (pi/raspberry)

Pour une configuration standard on peut suivre ce guide (prévu pour un clavier français):
 http://raspbian-france.fr/installer-raspbian-premier-demarrage-configuration/
Attention on a installé la version jessie-lite donc pas d'interface graphique donc pas de startx à la différence du guide ci-dessus

 Schéma du réseau:

Mon système vient se greffer sur un réseau avec une passerelle (routeur) en 10.0.0.254 qui distribue par DHCP des adresses dans le range 10.0.0.1 à 10.0.0.128. Je vais donc configurer les différents éléments constitutifs de mon réseau avec des adresse ip fixes en partant de 253 et en descendant. On peut aussi fixer la distribution des adresses IP via le serveur DHCP en fonction de l'adresse MAC pour toujours donner la même adresse mais je souhaite pouvoir avoir une solution indépendante de la passerelle.

Point d'accès wifi en 10.0.0.253
raspberry en 10.0.0.252
caméra/smartphones 10.0.0.251 250 etc...

La passerelle est 10.0.0.254
Serveurs DNS 10.0.0.254 et 8.8.8.8

Installation de zoneminder avec raspbian-lite jessie 64 bits

Inspiré et traduit de https://wiki.zoneminder.com/Raspbian

Attention si vous suivez le wiki de zoneminder à la date de mai 2016, il y a des choses à modifier sur jessie-lite notamment la configuration de l'adresse ip statique qui ne fonctionne pas si on suit le wiki, à priori ici il suffit de copier les commandes...Par contre je ne reprends pas les adaptations pour supporter l'horreur made in Redmond comme navigateur pour consulter Zoneminder, Firefox ou un autre navigateur open-source sera parfaitement fonctionnel.

Configurer l'IP en statique

 sudo nano /etc/dhcpcd.conf

ajouter à la fin du fichier:

 interface eth0
static ip_address=10.0.0.252/24
static routers=10.0.0.254
static domain_name_servers=10.0.0.254 8.8.8.8

sudo nano /etc/network/interfaces

iface eth0 inet static au lieu de iface eth0 inet manual

Mise à jour de raspbian

sudo apt-get update
sudoapt-get upgrade
sudo apt-get dist-upgrade
 
Ajout du dépôt  Debian Jessie backports
 
sudo nano /etc/apt/sources.list
 
y ajouter:
 
deb http://http.debian.net/debian jessie-backports main
Ctrl+o Enter to save CTRL+x to exit

Mettre la priorité à ce dépôt

sudo nano /etc/apt/preferences.d/zoneminder 
 
mettre ceci dans ce nouveau fichier:
 
Package: *
Pin: origin http.debian.net
Pin-Priority: 1100
Ctrl+o Enter to save CTRL+x to exit

Importer les clés pour signature du dépôt:

gpg --keyserver pgpkeys.mit.edu --recv-key  8B48AD6246925553
gpg -a --export 8B48AD6246925553 | sudo apt-key add -
gpg --keyserver pgpkeys.mit.edu --recv-key  7638D0442B90D010
gpg -a --export 7638D0442B90D010 | sudo apt-key add -

Prise en compte du nouveau dépôt

sudo apt-get update
 
Une nouvelle mise à jour pour la route ;o):
 
sudo apt-get upgrade
sudo apt-get dist-upgrade
 
MariaDB (mariadb-server) a ma préférence, mais en attendant pour pouvoir présenter
un tout fonctionnel à la réunion de mon LUG je reste à MySQL:
 
sudo apt-get install  php5 mysql-server php-pear php5-mysql

Voilà ZoneMinder:
 
sudo apt-get install zoneminder

Quelques compléments:

sudo apt-get install libvlc-dev libvlccore-dev vlc

Création de la base de données Zoneminder dans MySQL et aussi de l'utilisateur par défaut Zoneminder et les permissions dans MySQL.


sudo cd /root

Création d'un fichier caché pour le mot de passe

sudo nano .my.cnf

Entrer les informations suivantes (remplacer par le mot de passe choisi)

[client]
user=root
password=(motdepassechoisisql)

Ctrl+o Enter to save
CTRL+x to exit

Create database (press ENTER after each command)

sudo mysql < /usr/share/zoneminder/db/zm_create.sql 

sudo mysql -e "grant select,insert,update,delete,create on zm.* to 'zmuser'@localhost identified by 'zmpass';"


Supprimer le fichier caché contenant le mot de passe

sudo rm .my.cnf

Définir les permissions pour  /etc/zm/zm.conf à root:www-data 740
 
sudo chmod 740 /etc/zm/zm.conf

sudo chown root:www-data /etc/zm/zm.conf

Zoneminder démarre automatiquement au démarrage de la machine

systemctl enable zoneminder.service
 
Add www-data to the sudo group (to enable use of local video devices)
adduser www-data video

Démarrer Zoneminder
systemctl start zoneminder.service

Vérifier que Zoneminder est bien démarré
systemctl status zoneminder.service

Activer CGI et  Zoneminder dans la configuration d'Apache.
 
a2enmod cgi

a2enconf zoneminder
 
Vérifiez ( sudo nano /etc/php5/apache2/php.ini) le fichier /etc/php5/apache2/php.ini il devrait contenir ceci:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Brussels

Il faut enlever le  ";" avant date.timezone...et adapter à votre zone Europe/Paris etc...
 

Redémarrer Apache

service apache2 restart
 
 
A partir de Firefox ou autre navigateur respectueux des standards du web:
 

http://10.0.0.252/zm

Aller dans le menu  Paths

Changer PATH_ZMS de /cgi-bin/nph-zms en /zm/cgi-bin/nph-zms si nécessaire et sauver

Optionnel:  changer PATH_SWAP en /dev/shm (processus mis en  RAM drive) et sauver

Redémarrer le système pour vérifier que tout se lance au démarrage

Se reconnecter à l'interface web de Zoneminder

On passe à l'ajout d'une caméra extérieure

Un vieux smartphone android est aussi une caméra wifi sur batteries...






Librement adapté et traduit de https://bkjaya.wordpress.com/2015/11/28/how-to-use-an-old-android-phone-as-an-ip-camera-on-zoneminder/

1. Installer IP Webcam sur le smartphone android.

2. Se connecter au point d'accès wifi en définissant une adresse ip fixe pour le smartphone 10.0.0.251 dans notre cas ( détails pour configurer une adresse ip fixe sous Android http://www.androidpit.fr/comment-configurer-adresse-ip-statique-android )
 En version rapide:
Dans les paramètres Android, rubrique wifi choisissez le réseau pour lequel vous voulez changer l'IP en IP fixe.
 Effectuez un appui long sur le nom du réseau, puis choisissez Modifier le réseau.
 Faites défiler vers le bas et activez "Afficher les options avancées" en cochant la case adéquate.
Changer Protocole DHCP par Statique puis définir adresse IP (10.0.0.251 dans notre cas), masque( /24 ou 255.255.255.0 selon la notation), passerelle (10.0.0.254) et serveurs DNS (10.0.0.254 et 8.8.8.8) .
3.Ouvrir l'application IP Webcam et activez le serveur par défaut il sera lancé à l'adresse ip fixée à l'étape 2 and go through the menu and activate the server.Now you can view the IP address of the phone and the port number on the screen.Write down the IP Address an
d the port .(my IP Address and port    192.168.1.3:8080)


4. Ajouter un "monitor" dans la console Zoneminder

Remplir les sous-menus general et source avec les paramètres qui vont bien ;o)

Dans notre cas, les sous-menu general et source ressembleront  à (sachant que mon vieux smartphone est de marque jiayu):


5.On redémarre Zoneminder via l'interface web. Il suffit depuis la page web d'accueil de ZM de cliquer sur le nom de la caméra pour visualiser l'image.


6. N'oubliez pas de laisser le smartphone/camera branché sur le 220 V et ce dans un endroit frais et ventilé

Voilà on a un début de solution fonctionnelle...

Pour accéder à ZM http://10.0.0.252/zm depuis votre navigateur web ou depuis android cela vaut le coup de télécharger l'application Zm View

A faire (sera peut-être ajouté un jour repassez voir...):


Mettre le raspberry sur batterie et avec un accès à Internet via une clé usb 3G/4G pour être autonome
Peaufiner la configuration des alarmes dans zoneminder
Configurer une caméra USB directement branchée sur le raspberry et utiliser une pi cam
Remplacer apache par Nginx pour ces raisons https://www.wikivs.com/wiki/apache_vs_nginx
Remplacer MySQL par MariaDB pour ces raisons  https://seravo.fi/2015/10-reasons-to-migrate-to-mariadb-if-still-using-mysql
Remplacer IP Webcam par une application open-source


Merci d'avance pour vos commentaires constructifs et vos correctifs
 

 

 

Aucun commentaire: