Bonjour, chère communauté. Je veux partager avec vous une expérience dans la mise en œuvre d'un système de sécurité pour une maison basée sur des appareils domestiques intelligents de Nootehnika. Je veux tout de suite faire une réserve que c'est l'une des premières expériences, et mon objectif n'est pas de «construire un bastion imprenable», mais de démontrer les possibilités d'utiliser les appareils que j'ai choisis, d'expérimenter et d'apprendre des leçons, ainsi que de recevoir des commentaires de votre part.
En bref, le système que je concevais devrait prendre une photo de chaque personne qui s'est approchée de la porte d'entrée en mode d'armement et envoyer une photo à une adresse e-mail, ainsi qu'un message électronique en cas d'enregistrement de mouvement dans le couloir (c'est-à-dire qu'il y a du mouvement à l'intérieur de l'appartement) .
Donc, à l'énoncé du problème.
1. Énoncé du problème
Le système que je conçois devrait:
- en mode armement, prenez une photo de chaque personne qui s'approche de la porte d'entrée et envoyez la photo à une adresse e-mail;
- en mode armement, envoyer un e-mail en cas d'enregistrement de mouvement dans le couloir (sans photo car je n'y ai pas de caméras IP);
- fournir diverses interfaces pour l'armement et le désarmement.
Par diverses interfaces d'armement, j'entends:
- Armement et désarmement à l'aide de commutateurs radio Nootehnika;
- Armement et désarmement via l'interface Web pour gérer une maison intelligente.
2. Description de la solution
Pour résoudre ce problème, j'ai utilisé le matériel suivant:
- deux capteurs de mouvement 112;
- récepteur de signaux de capteurs et interrupteurs RX2164;
- Commutateur PU311-2;
- Nettop 3VI (basé sur le processeur Atom D525);
- Caméra IP chinoise noname.
J'ai déjà donné une brève description des dispositifs pour construire la maison intelligente de Nootechnika dans la
section «introduction»
de l'article , donc je ne me concentrerai pas sur cette question ici. De plus, tous les détails sur les appareils peuvent être trouvés sur le site externe de la
société .
Donc, à la description du système. Sur la nettop 3VI, Debian Linux 7, le logiciel Simple Event Correlation (SEC) et un ensemble d'utilitaires Linux pour gérer les périphériques Nootechnics d'
Oleg Artamonov sont installés.
Des détecteurs de mouvement (PM112) sont installés dans le vestibule devant la porte d'entrée et dans le couloir (à l'intérieur de l'appartement). Le récepteur USB RX2164 est connecté au nettop. Le récepteur reçoit les signaux des capteurs et des commutateurs, et les utilitaires de gestion de périphériques Nootehnics (ci-après dénommés les utilitaires Noolite) installés sur le nettop transmettent les signaux reçus à syslog. SEC lit le fichier dans lequel les données syslog sont écrites et les traite selon les règles configurées. À la suite du traitement, des actions telles que la réception de photos de la caméra IP et l'envoi d'e-mails sont effectuées.
Il existe deux façons d'activer (et de désactiver) le mode de sécurité:
- en appuyant sur un bouton du commutateur PU311-2;
- en appuyant sur un bouton dans l'interface Web du système de contrôle de la maison intelligente.
Un schéma de principe illustrant le fonctionnement du système est illustré à la figure 1.
Figure 1 - Schéma fonctionnel illustrant le fonctionnement du système
3. Installation du matériel système
Pour ce système, j'utilise les mêmes 2 détecteurs de mouvement, dont l'installation j'ai décrit dans la section 4 de l'
article .
Bref, l'un des capteurs est installé près de la porte d'entrée du vestibule (à l'extérieur de l'appartement). La sensibilité de ce capteur est réglée à un niveau tel qu'il détecte les mouvements à proximité immédiate de la porte. Le deuxième capteur est installé immédiatement près de la porte d'entrée, mais déjà à l'intérieur de l'appartement. La sensibilité est réglée de manière à fixer le mouvement à proximité immédiate de la porte.
Une caméra IP est installée à l'extérieur de l'appartement dans le vestibule sous le plafond. La porte d'entrée et environ 1,5 mètre d'espace devant elle tombent dans son champ de vision.
L'interrupteur PU311-2 est installé à l'intérieur de l'armoire afin de ne pas attirer l'attention et de ne pas être accidentellement enfoncé.
Le nettop 3VI avec le récepteur de signal RX2164 est situé à proximité sur la mezzanine pour fournir une réception stable des signaux des capteurs et des commutateurs.
Le schéma d'installation de l'équipement est illustré à la figure 2.
Figure 2 - Schéma d'installation de l'équipement
4. Configuration du logiciel
La configuration du logiciel comprend:
- mettre en place des utilitaires Noolite pour recevoir les signaux des capteurs et des commutateurs;
- établir des règles SEC pour répondre aux signaux provenant des capteurs et des commutateurs;
- créer un script qui recevra une photo de l'appareil photo et enverra des courriels;
- créer un bouton pour allumer et éteindre le système dans l'interface Web.
Configuration des utilitaires Noolite pour recevoir les signaux des capteurs et des commutateurs
Pour que le récepteur RX2164 commence à recevoir des signaux d'un capteur ou d'un commutateur, il est nécessaire de le «lier». Pour ce faire, nous appuyons sur le bouton «bind» du capteur lui-même (à l'arrière) et exécutons sur l'ordinateur auquel le récepteur est connecté la commande: nooliterxcfg –bind <numéro de canal de 1 à 64>. De même, le commutateur est lié au récepteur.
Dans mon cas, le capteur dans le vestibule était connecté au canal 3, le capteur dans l'appartement au canal 2 et deux boutons de commutation aux canaux 1 et 4, respectivement.
Pour recevoir les signaux des capteurs en temps réel, vous devez exécuter l'utilitaire nooliterx en mode démon. Le processus d'installation des utilitaires et leurs paramètres est décrit par le développeur lui-même (Oleg Artamonov dans la documentation des utilitaires) et aussi par moi dans la section 4 de l'article (LINK). En conséquence, nous obtenons un enregistrement des signaux des capteurs et des commutateurs dans syslog. Il ne reste plus qu'à configurer l'enregistrement de ces messages dans un fichier dans syslog lui-même et ce qui suit est obtenu sur la sortie (exemples de messages de capteurs):
Jan 7 15:47:39 vmon nooliterx[23022]: Received: status 133, channel 3, command 25, format 1, data 2 0 0 0 Jan 7 18:43:58 vmon nooliterx[23022]: Received: status 135, channel 2, command 25, format 1, data 1 0 0 0
Les échantillons de messages provenant des commutateurs (lorsqu'un bouton est enfoncé sur eux) sont un peu différents:
Jan 5 22:29:43 vmon nooliterx[23022]: Received: status 26, channel 1, command 4, format 0, data 1 0 0 0 Jan 5 22:27:55 vmon nooliterx[23022]: Received: status 145, channel 4, command 4, format 0, data 1 0 0 0
Configurez les règles SEC pour déclencher les signaux provenant des capteurs et des commutateurs.
SEC est un utilitaire de traitement des journaux d'événements. En bref, il reçoit un flux d'événements à l'entrée, dont chacun vérifie la conformité avec les modèles de règles configurées. En cas de recherche d'un match, il lance l'action prescrite dans la règle correspondante. La chose est incroyablement flexible à utiliser. Il existe une page de manuel détaillée sur le Web.
SEC est utilisé dans mon système pour rechercher des messages en temps réel provenant de capteurs et de commutateurs dans le flux d'événements et exécuter un script qui prend des photos et envoie des e-mails, ou tout simplement traduire l'ensemble du système sous et hors tension.
En SEC, j'ai configuré 4 règles. 2 - pour le traitement des événements des détecteurs de mouvement et deux - pour le traitement des signaux des deux boutons du commutateur. Les règles sont dans /etc/sec.conf
Règle 1: Traitement du signal du capteur de mouvement dans le vestibule (capteur attaché au canal 3) type=SingleWithSuppress ptype=RegExp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(3),\s+command\s+25.* desc=Motion sensor frontdoor $1 triggered action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s window=60
Le type de cette règle - «SingleWithSurpress» - est conçu pour répondre uniquement au premier événement enregistré pendant l'intervalle de temps spécifié par le paramètre «window» en secondes. C'est-à-dire ce paramètre signifie que la règle ne fonctionnera pas plus d'une fois par minute et que l'action spécifiée dans le paramètre "action" ne sera lancée que 1 fois par minute. Ceci est fait de façon à ce que quelqu'un piétine autour de la porte pendant plusieurs minutes pour ne pas spammer son courrier avec des tonnes de lettres. Dans le paramètre «pattern», une expression régulière est écrite, selon laquelle les événements du capteur associé au canal 3 sont recherchés. Deux actions sont spécifiées dans le paramètre «action» - shellcmd, qui exécute le script et lui transmet un paramètre extrait de l'expression régulière (dans ce cas représentant le nombre «3»), et la deuxième action «événement% s» servant à transférer l'expression enregistrée dans le paramètre «desc» vers d'autres règles, ce qui n'est pas nécessaire au fonctionnement de ce système et peut être omis. Le paramètre «desc» indique des informations de service supplémentaires utilisées par d'autres règles. Pour ce système, il n'est pas nécessaire et des données arbitraires peuvent y être saisies.
Règle 2: Traitement du signal provenant d'un capteur de mouvement dans le couloir (capteur fixé au canal 2) type=SingleWithSuppress ptype=RegExp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(2),\s+command\s+25.* desc=Motion sensor lobby $1 triggered action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s window=60
Ici, tout est similaire à la règle 1. Il faut seulement noter que le nombre «2» obtenu à partir de l'expression régulière est passé au script.
Règle 3: Traitement du signal à partir d'un bouton de commutation associé au canal 1 type=single ptype=regexp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(1),\s+command\s+4.* desc=switch guard mode online action=shellcmd (/bin/echo "online" > /usr/local/smarthome/security/status)
Cette règle est encore plus simple - elle se déclenche pour chaque événement qui correspond à l'expression régulière spécifiée dans le paramètre "pattern". En tant qu'action, il écrit dans le fichier d'état du système. Ce fichier est analysé par un script lancé par les règles 1 et 2. Si l'état est «en ligne», le script est déclenché, si la valeur est «hors ligne», le script ne fonctionne pas. Plus à ce sujet un peu plus loin.
Règle 4: Traitement du signal à partir d'un bouton de commutation associé au canal 4 type=single ptype=regexp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(4),\s+command\s+4.* desc=switch guard mode offline action=shellcmd (/bin/echo "offline" > /usr/local/smarthome/security/status)
Tout est similaire à la règle 3, seul le statut est défini sur "hors ligne".
Un script qui prend des photos de l'appareil photo et envoie des e-mails
Le script lancé par les règles 1 et 2 vérifie l'état du système dans le fichier d'état et, selon sa valeur ("en ligne" ou "hors ligne"), effectue ou n'effectue pas les actions suivantes:
- reçoit une photo de la caméra IP dans le vestibule et envoie un e-mail en cas de capteur dans le vestibule;
- envoie un message d'alarme en cas de capteur dans le couloir.
Ce qui suit est le corps du script. A son entrée, il reçoit (de la SEC) le numéro de canal auquel le capteur est attaché et, en fonction de ce numéro et de l'état du système, effectue certaines actions.
Pour obtenir des photos de ma caméra IP, j'utilise wget et une ligne comme celle-ci:
wget http://<IP >/snapshot.cgi --user=<username> --password=<password>
Pour les autres caméras IP, vous devrez peut-être rechercher d'autres options, il n'y a pas de solution unique. RTFM à la caméra, comme on dit.
Les boutons de mise sous et hors tension du système dans l'interface Web. Pour activer et désactiver le mode de sécurité, j'ai également ajouté quelques boutons à mon interface Web auto-écrite pour contrôler les sources de lumière d'une maison intelligente.
Ils se présentent comme suit:
<?php if (isset($_POST['button9_on'])) { exec('/bin/echo "online" > /usr/local/smarthome/security/status'); } ?> <?php if (isset($_POST['button9_off'])) { exec('/bin/echo "offline" > /usr/local/smarthome/security/status'); } ?> <p><h2>Guard mode</h2></p> <form method="post"> <p> <button name="button9_on">ON</button> <button name="button9_off">OFF</button> </p>
Tout est simple ici - lorsque vous cliquez sur le bouton «ON», «en ligne» est écrit dans le fichier d'état, lorsque vous cliquez sur «OFF» - «hors ligne».
5. Conclusion
En conséquence, j'ai obtenu un système qui, lorsqu'il est activé, prend des photos de toute personne qui s'est approchée de la porte et envoie la photo par e-mail. Et s'il y a du mouvement à l'intérieur de l'appartement, il envoie simplement une alerte par e-mail.
Les exemples d'e-mails ressemblent à ceci (voir figure 3). Les images elles-mêmes, bien sûr, sont plus grandes et se développent lorsque vous cliquez dessus avec la souris.
Figure 3 - Exemple d'e-mail avec photoLe système peut être activé et désactivé en appuyant sur un bouton de l'interrupteur et également via les boutons de l'interface Web du système de contrôle de la maison intelligente.
À court terme, je souhaite également afficher l'état actuel du système (actif / inactif) dans l'interface Web.