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 :
La caméra qui donne derrière est encore plus discrète :
Quand à 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 :
Les 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.