Le Blog de C-quad

Archive pour la catégorie ‘Domotique’

Mise en place d’un système de vidéosurveillance – 2ème partie : Zoneminder

Cet article a pour but de mettre en place un système de vidéo-surveillance avec Zoneminder. Comme vu précédemment pour le choix du matériel, je dispose de caméras extérieures analogiques et intérieures ainsi que d’une carte d’acquisition.

Pourquoi Zoneminder ?

L’objectif n’est pas uniquement de pouvoir visualiser les caméras, mais de :

  • détecter les mouvements sur une caméra
  • enregistrer une séquence vidéo sur un évènement
  • être prévenu en cas d’évènement (par mail par exemple)
  • interagir avec la maison (domotique)

A ma connaissance, seul ZoneMinder rempli toutes ces fonctionnalités en étant un logiciel open source bien entendu.

Installation de ZoneMinder

L’installation de ZoneMinder se fera grâce à yum comme d’habitude.

# yum install zoneminder

================================================================================
 Paquet                      Architecture
 Version               Dépôt       Taille
================================================================================
Installation:
 zoneminder                  x86_64     1.24.2-5.fc14         fedora      1.2 M
Installation pour dépendance:
 mysql-libs                  x86_64     5.1.55-1.fc14         updates     1.2 M
 perl-Archive-Tar            noarch     1.64-1.fc14           fedora       64 k
 perl-Archive-Zip            noarch     1.30-3.fc14           fedora      107 k
 perl-Compress-Raw-Bzip2     x86_64     2.030-1.fc14          fedora       31 k
 perl-Compress-Raw-Zlib      x86_64     2.030-1.fc14          fedora       58 k
 perl-Convert-BinHex         noarch     1.119-13.fc14         fedora       43 k
 perl-DBD-MySQL              x86_64     4.017-1.fc14          fedora      136 k
 perl-DBI                    x86_64     1.613-1.fc14          fedora      776 k
 perl-Date-Manip             noarch     6.07-3.fc14           fedora      1.2 M
 perl-Device-SerialPort      x86_64     1.04-8.fc14           fedora       64 k
 perl-Email-Date-Format      noarch     1.002-7.fc14          fedora       16 k
 perl-HTML-Parser            x86_64     3.68-1.fc14           fedora      111 k
 perl-HTML-Tagset            noarch     3.20-5.fc14           fedora       16 k
 perl-IO-Compress            noarch     2.030-1.fc14          fedora      216 k
 perl-IO-Socket-SSL          noarch     1.38-1.fc14           updates      71 k
 perl-IO-Zlib                noarch     1:1.10-141.fc14       updates      31 k
 perl-IO-stringy             noarch     2.110-13.fc14         fedora       69 k
 perl-MIME-Lite              noarch     3.027-4.fc14          fedora       89 k
 perl-MIME-Types             noarch     1.28-3.fc14           fedora       32 k
 perl-MIME-tools             noarch     5.428-2.fc14          fedora      249 k
 perl-MailTools              noarch     2.07-1.fc14           fedora      102 k
 perl-Module-Load            noarch     1:0.16-141.fc14       updates      26 k
 perl-Net-LibIDN             x86_64     0.12-4.fc14           fedora       35 k
 perl-Net-SMTP-SSL           noarch     1.01-5.fc14           fedora      8.1 k
 perl-Net-SSLeay             x86_64     1.36-2.fc14           fedora      173 k
 perl-PHP-Serialization      noarch     0.27-5.fc14           fedora       11 k
 perl-Package-Constants      noarch     1:0.02-141.fc14       updates      25 k
 perl-TimeDate               noarch     1:1.20-2.fc14         fedora       42 k
 perl-URI                    noarch     1.54-2.fc14           fedora      102 k
 perl-YAML-Syck              x86_64     1.07-4.fc14           fedora       75 k
 perl-libwww-perl            noarch     5.837-2.fc14          updates     386 k
 php                         x86_64     5.3.5-1.fc14          updates     1.1 M
 php-cli                     x86_64     5.3.5-1.fc14          updates     2.2 M
 php-common                  x86_64     5.3.5-1.fc14          updates     527 k
 php-mysql                   x86_64     5.3.5-1.fc14          updates      78 k
 php-pdo                     x86_64     5.3.5-1.fc14          updates      76 k
Mise à jour pour dépendance:
 perl                        x86_64     4:5.12.3-141.fc14     updates      11 M
 perl-Module-Pluggable       noarch     1:3.90-141.fc14       updates      38 k
 perl-Pod-Escapes            noarch     1:1.04-141.fc14       updates      31 k
 perl-Pod-Simple             noarch     1:3.13-141.fc14       updates     210 k
 perl-libs                   x86_64     4:5.12.3-141.fc14     updates     594 k
 perl-threads-shared         x86_64     1.32-141.fc14         updates      51 k

Résumé de la transaction
================================================================================
Install      37 Package(s)
Upgrade       6 Package(s)

Taille totale des téléchargement : 23 M

Jusqu’à présent, je n’ai jamais rien eu à redire sur la qualité des paquets installés sous Fedora, mais malheureusement je trouve que celui-ci n’est pas à la hauteur :

On constate bien qu’un serveur mysql est nécessaire au fonctionnement de ZoneMinder, mais mysql ne figure pas parmi les dépendances. Cela pourrait s’expliquer si l’utilisateur avait le choix d’installer ZoneMinder sur une autre base de données (postgreSQL par exemple) mais cela ne semble pas être le cas.

Il est donc nécessaire d’installer mysql comme détaillé dans un précédent article.

Une fois cela réalisé, il est nécessaire de suivre les instructions renseignées dans /usr/share/doc/zoneminder-1.24.2/README.Fedora

Mise en place de la base de données de ZoneMinder :

Si vous avez sécurisé votre installation de mysql, il est nécessaire de vous authentifier pour exécuter les commandes fournies dans README.Fedora :

$ mysql -u root -p mysql < /usr/share/zoneminder/db/zm_create.sql
$ mysqladmin -u root -p reload

Par défaut zoneminder est désactivé dans son fichier de configuration, nous allons donc éditer /etc/httpd/conf.d/zoneminder.conf :

Alias /zm "/usr/share/zoneminder/www"
<Directory "/usr/share/zoneminder/www">
 Options -Indexes MultiViews FollowSymLinks
 AllowOverride All
 Order allow,deny
 Allow from all
Deny from all # DELETE THIS LINE
</Directory>

Nous rechargeons ensuite la configuration apache :

# service httpd reload

Paramétrage php

Malheureusement toutes ces actions ne sont pas suffisantes, si vous essayer d’accèder à votre installation de Zonemider située sous localhost/zm vous obtiendrez cette erreur :

[error] [client 127.0.0.1] PHP Parse error:  syntax error, unexpected $end in /usr/share/zoneminder/www/includes/functions.php on line 2309

Cela provient de la directive short_tag dans /etc/php.ini :

;short_open_tag = Off
short_open_tag = On

Cette fonctionnalité permet d’interpréter les tags <? et ?> comme des tags php <?php et ?>. Cette possibilité date des premières versions de php et a été retirée par la suite pour améliorer la qualité du parseur de php.

Pour que cette modification de php.ini soit prise en compte il est nécessaire de le faire savoir à apache :

# service httpd reload

Petits problèmes sur le paquet

SELinux

Vous devriez désormais avoir une application zoneminder accessible, mais qui va déclencher pas mal d’alertes SELinux. Il est pour l’instant nécessaire de désactiver SELinux pour ZoneMinder.

Un bug existe sur ce sujet : https://bugzilla.redhat.com/show_bug.cgi?id=611016

J’ai proposé mon aide au mainteneur, mais pour l’instant je n’ai pas eu de retour.

Cambozola

ZoneMinder fait appel à cambozola, un application open source développée en java qui permet de mettre en place un client/serveur de streaming video. Le souci c’est que cette application devrait être dans un autre paquet et non directement dans le paquet ZoneMinder.

J’ai donc déposé un bug sur ce sujet :https://bugzilla.redhat.com/show_bug.cgi?id=654052 et réalisé un paquet pour cambozola (voir mes paquets).

Néanmoins, ZoneMinder pour pouvoir être intégré aux dépôts officiels Fedora n’inclut pas ffmpeg et donc la capture des caméras se fait en mode jpeg. Je constate donc, sauf erreur de ma part, que cambozola ne sert pas en l’état.

Mise en place des caméras

Ma maison est neuve avec des peintures toutes fraiches et les caméras étant analogiques, il faut qu’un cable relie l’ordinateur à toutes les caméras. Il était bien sur hors de question, que des câbles soient visibles dans et à l’extérieur de la maison. Et autant que possible, je voulais des caméras qui soient assez discrètes.

les caméras sont donc placées sous l’avancée de toit, elles seront donc plutôt protégée de la pluie. Et j’en ai profité pour faire passer les câbles directement sous les tuiles.

Voici donc la caméra située à l’entrée de la maison :

Caméra Exterieure Entrée

La caméra qui donne derrière est encore plus discrète :

Caméra extérieure arrièreQuand à la caméra située dans le garage,  la discrétion n’était pas l’objectif premier, c’était plutôt de couvrir la plus grande superficie. la caméra est donc plutôt visible :

Caméra GarageLes lumières bleues sont en réalité les LED infrarouge qui ne sont pas aussi voyante « en vrai avec un œil humain ».

Configuration de la carte d’acquisition

Afin de pouvoir utiliser correctement la carte d’acquisition, c’est à dire que les 8 chipset BT878a soient reconnus, il est nécessaire de le spécifier dans le fichier /etc/modprobe.d/bttv.conf :

$ cat /etc/modprobe.d/bttv.conf
options i2c-algo-bit bit_test=1
options bttv gbuffers=16 card=102,102,102,102,102,102,102,102 radio=0,0,0,0,0,0,0,0 tuner=4,4,4,4,4,4,4,4 chroma_agc=1 combfilter=2 full_luma_range=1 coring=1 autoload=0

Configuration de ZoneMinder

Une fois l’installation terminée vous devriez avoir ZoneMinder fonctionnel à l’adresse suivante http://localhost/zm.

Je vous conseille d’aller regarder la page « options », elles sont très nombreuses et certaines sont encore obscures pour moi.

Pour ajouter une caméra, il faut faire « Add New Monitor » :

On y renseigne le nom que l’on veut donner au moniteur, si la caméra est locale ou distante:

  • On choisira local pour une caméra reliée directement à l’ordinateur
  • et distante (remote) pour les caméras IP

Dans mon cas c’est des caméras locales, il faut donc ensuite configurer dans l’onglet « source » le chemin pour accéder aux caméras :

 

Une fois les moniteurs sur les caméras ajoutés, vous devriez les voir apparaitre sur l’écran principal. ils ne doivent pas être rouge quand ils sont activés sinon c’est qu’il y a un souci.

Sur l’écran principal, le lien « Montage » permet d’avoir une vue regroupant toutes vos caméras :

On constate clairement que la qualité des caméras varie beaucoup, les caméras exterieures sont de bien meilleures factures que les caméras intérieures. Pour seulement 5 € d’écart les caméras extérieures qui présentent l’avantage d’être étanche sont nettement plus avantageuse.

Reste à faire

  • Recevoir les alertes quand un évènement est déclenché
  • Interconnecter ZoneMinder avec une alarme pour faciliter la mise à jour de son statut en fonction de l’état de l’alarme.