J’ai passé du temps sur d’autres sujets, mais je reviens finalement à ce projet pour l’améliorer quelques peu.
Il se trouve que j’ai fait l’acquisition d’une véritable caméra de surveillance de marque Axis.
Equipé d’une caméra plus performante, je compte améliorer la partie vidéo en intégrant Motion dont j’avais parlé l’année dernière.
J’en profite aussi pour remplacer le pc portable par un Raspberry Pi.
Acheté d’occasion, voilà de quoi remplacer avantageusement la webcam utilisée jusqu’ici.
Meilleure prise de vue, notamment en conditions de basse luminosité (j’utilise aussi un projecteur IR à led)
Protocole WiFi : Permet de placer la caméra plus loin et sans le cordon USB…
Protocole Ethernet : Pratique pour la configuration
Excellent support avec Motion
Comme son nom l’indique, ce logiciel permet de détecter les mouvements sur une image recue par une caméra.
L’analyse en temps réel est bien plus rapide que celle de ZoneMinder.
La configuration, bien qu’elle se fasse par un long fichier de configuration, est bien plus aisée et efficace.
J’utilise l’option "netcam_url" qui permet d’indiquer à Motion où récuperer l’image courante ("IP:8081/jpg/image.jpg" pour la 207MV)
De plus, les évenements peuvent être directement enregistrés dans une base de donnée ; cela permet d’exploiter plus facilement les images pour les réutiliser dans l’interface de aAlarm.
J’ai remplacé l’emcombrant PC portable par le fameux nano-ordinateur.
J’utilise la distribution Raspbian (installé via Noobs pour faire rapide…)
Le résultat est assez positif, cependant, la puissance disponible étant bien moindre malgré tout, il convient de régler correctement Motion pour que la détection du mouvement ne soit pas trop décalée.
(J’ai réduit la capture de la caméra à une résolution VGA, alors que la caméra est capable de diffuser un flux en 1280x1024)
Je détaillerais l’installation de l’ensemble prochainement, je dois d’abord améliorer quelques points du programme Perl et de l’interface Web Django.
J’aimerais aussi mettre en place une interface Android, mais cela demandera plus de temps.
Je teste actuellement motion, un détecteur de mouvement pour camera.
Récemment, j’ai réinstallé aAlarm sur une installation fraîche d’Ubuntu Server. Impossible de faire reconnaitre la C270 à ZoneMinder.
Tout marche correctement avec Motion. De plus, le service démarre bien plus rapidement que ZoneMinder.
Motion ne propose pas d’interface aussi complète que ZoneMinder, mais est largement plus simple à mettre en oeuvre.
On y trouve aussi un support pour db, qui permet l’insertion de chaque image.
Je vais intégrer le service Motion afin de proposer une alternative à ZoneMinder.
Bientôt plus d’info à ce sujet.
AAlarm est un système d’alarme basé sur Arduino.
N’hésitez pas à laisser vos commentaires en bas de page.
Jusqu’à 13 détecteurs numériques
Panneau de contrôle : Clavier matriciel, diodes d’états, Buzzer
Sirène piezzo-électrique
Interface Web
Envoi d’emails d’alertes
Simulateur de présence sonore (Lecture de fichiers audio)
Vidéo surveillance (Interaction avec ZoneMinder)
Paramétrage depuis l’interface Web
Présentation générale de l’interface Web
Cas d’utilisation 1 : Activation et désactivation du système sans intrusion
Cas d’utilisation 2 : Activation du système avec intrusion
Evolution vers une solution domotique plus complète (Contrôle à distance d’appareils électriques, fonctionnalités sans fil)
Détecteurs complexes utilisant les entrées analogiques d’Arduino
Multi-utilisateurs : Codes d’accès personnels, autorisations par zone
Journalisation des événements par utilisateur
Planification d’événements (coupure de l’alarme sur une plage d’horaire spécifique, pour un utilisateur particulier..)
aAlarm est composé de trois modules électroniques connectés en USB à un PC.
Le module principale est basé sur une carte Arduino Uno ; la carte du microcontrôleur est connectée à la facon d’un "shield".
Le module principal concentre les connexions :
Du module de contrôle (clavier matriciel), relié en I2C
Du module sirène
Des détecteurs
Du PC (Serial over USB)
Relié en I2C, il peut être placé relativement loin de la carte principale (plus de 5m dans mon cas). J’ai utilisé un câble de type téléphonique, avec des connecteurs RJ11 de part et d’autre permettant une finition correcte ainsi qu’un branchement facile.
Le câble de connexion transporte également le courant nécessaire au fonctionnement du module (5v).
Fonctions :
Activation ou désactivation de la surveillance
Signalisation visuelle (leds d’états de l’alarme)
Signalisation sonore (buzzer)
La sirène est alimentée en courant par un circuit élévateur de tension. (Ce type de sirène nécessite peu de courant pour fonctionner)
Ainsi, le module convertit les 5v de la sortie d’Arduino en 12v, avec un niveau de décibel suffisant pour réveiller tout l’immeuble..
Arduino comporte 14 E/S numériques. Une sortie étant utilisée par le module sirène, il est donc possible de connecter 13 détecteurs sur le module principal.
A l’heure actuelle, j’utilise un seul détecteur de porte. Il s’agit d’un simple contacteur de récupération. Placé contre la porte d’entrée de mon appartement, il permet donc de connaitre l’état de l’ouverture : Ouvert ou Fermé.
J’ai déjà testé avec de multiples détecteurs (de simples interrupteurs) cependant, je tenterais de connecter un détecteur de gaz ou de fumée sur une des entrées libres.
ZoneMinder permet d’utiliser une (ou plusieurs) caméras USB de type webcam. Celle que j’utilise permet de surveiller la porte d’entrée.
J’utilise un PC portable de récupération. Plusieurs raisons à cela :
Encombrement réduit
Fonctionnement sur batterie : Permet d’alimenter tout le circuit d’alarme en cas de coupure de courant (de plus, mon modem est ondulé, les alertes continuent à être envoyées)
Puissance disponible : ZoneMinder est un service très consommateur de CPU. Je doute qu’un RaspberryPI dispose de ressources suffisantes pour le faire fonctionner.
J’utilise une enceinte amplifié de récupération, placé près de la porte, pour sonoriser l’entrée pendant mon absence.
aAlarm s’articule autour de trois composants logiciels :
aAlarm Controller, écrit en Perl, qui assure l’interface avec Arduino
Le programme chargé par Arduino
Un client Web développé en Django
Le Controller et le client Web communique par un modèle de donnée (MySQL) construit avec l’ORM de Django.
Le Controller est une évolution de la première version de ce projet. C’est le composant logiciel principal.
En communiquant avec Arduino, il connait les états des détecteurs et en détermine l’état global. D’autre part, il intercepte les ordres issus du client Web pour les exécuter.
Communication série (Serial over USB) avec la carte Arduino (Device::SerialPort)
Envoi des emails (MIME::Lite)
Communication avec la base de données (DBI)
Le script contrôle également le service ZoneMinder et la diffusion sonore (simulateur de présence)
Le paramétrage par défaut du Controller est assuré par un fichier de configuration. La configuration est par la suite maintenue par la base de données qui devient la référence, sauf pour certaines variables techniques.
Egalement une évolution de la première version, le programme de la carte est toutefois plus simple et efficace.
Il interroge l’état des détecteurs, pour, en cas de changement, le signaler au Controller. En outre, il contrôle les éléments électroniques (Diodes, Buzzer, Sirène) en fonction des ordres passés par le Controller
Dans la première version d’aAlarm, le client Web était écrit en PHP. L’utilisation de Django permet, en plus d’une souplesse de développement décuplée, de profiter de l’ORM intégré.
Le client Web fournit une vue en temps réel (Ajax) de l’état de l’alarme et des différents détecteurs, et de contrôler aAlarm à distance.
Fonctionnalités :
Etat en temps réel de l’alarme et des détecteurs
Etat en temps réel de ZoneMinder et du simulateur de présence sonore
Contrôle à distance (Activation / Désactivation de l’alarme et des services)
Historique des événements
Authentification utilisateur (Django)
Contrôle vidéo des intrusions (Utilisation des images issues de ZoneMinder)
Paramétrage à la volée (certaines configurations nécessitent cependant un redémarrage du Controller)
Homepage : Etat global (Alert), détecteurs (Porte fermée, présence sonore stoppée, ZoneMinder) - Intrusion confirmée !
Le modèle de données est maintenu par l’ORM intégré à Django.
Event : Evénements survenant sur l’état global et sur les détécteurs
Execute : Ordres passés par l’interface Web
Parameter : Paramètres de l’application. Initialement inscrits dans un fichier, ils sont inscrits et maintenus en base par la suite
ZoneMinder utilise des caméras USB (ou IP) avec détection des mouvements.
Ce service optionnel est lancé par aAlarm, et permet d’accéder aux images enregistrées pendant l’intrusion pour confirmer visuellement une intrusion.
AAlarm est basé sur 6 états globaux chaînés.
Chaque état représente une situation différente et entraîne certaines actions
OFFLINE : Alarme inactive
TIMED : Etat transitoire pour laisser à l’utilisateur le temps de sortir de la zone protégée
ONLINE : Alarme active
INTRUSION : Un détecteur a été sollicité, le code de désactivation doit être entré
WARNING : Le code de désactivation n’a pas été entré correctement, avertissement sonore de l’intrus et email d’avertissement envoyé
ALERT : La sirène est déclenchée, un email d’alerte est envoyé
Le passage d’un état à l’autre est déterminé soit par une action utilisateur, soit par le changement d’état d’un détecteur.
Le détecteur de porte comporte les états OUVERT ou FERME Il est possible de créer d’autre type de détecteurs : Les états de ceux-ci sont paramétrables.
La surveillance des services optionnels (ZoneMinder et diffusion sonore) sont implémentés sous forme de détecteurs. Ainsi, ils apparaissent dans l’interface comme les détecteurs classiques et permettent de garder un oeil sur l’exécution desservices optionnels.
La première version complète d’AAlarm était fonctionelle, mais basique :
Peu de paramétrages possibles
Modèle de données simpliste
Client Web écrit en PHP/MySQL
Refonte du controleur Perl
Nombreux paramétrages (fichier et base de données)
Nouveaux modèle de donnée basé sur l’ORM de Django
Client Web réécrit avec Django
Intégration avec ZoneMinder (outil de video surveillance)
Diffusion sonore pour simuler une présence