Sistema de seguridad casero basado en productos para un hogar inteligente de Nootekhnika

Buen día, querida comunidad. Quiero compartir con ustedes un experimento en la implementación de un sistema de seguridad para un hogar basado en dispositivos domésticos inteligentes de Nootehnika. Quiero hacer una reserva de inmediato de que este es uno de los primeros experimentos, y mi objetivo no es "construir un bastión inexpugnable", sino demostrar las posibilidades de usar los dispositivos que he elegido, experimentar y aprender lecciones, así como recibir comentarios de usted.

En resumen, el sistema que estaba diseñando debería tomar una foto de cada persona que se acercó a la puerta principal en el modo de armado y enviar una foto a una dirección de correo electrónico, así como también enviar un mensaje de correo electrónico en caso de registro de movimiento en el pasillo (es decir, hay movimiento dentro del apartamento) . Entonces, a la declaración del problema.

1. Declaración del problema


El sistema que diseño debería:

  • en el modo de armado, tome una foto de cada persona que se acerca a la puerta principal y envíe la foto a una dirección de correo electrónico;
  • en el modo de armado, envíe un mensaje de correo electrónico en caso de registro de movimiento en el pasillo (sin una foto porque no tengo cámaras IP allí);
  • Proporcionar varias interfaces para armar y desarmar.

Por varias interfaces de armado quiero decir:

  • Armado y desarmado con la ayuda de interruptores de radio Nootehnika;
  • Armado y desarmado a través de la interfaz web para administrar una casa inteligente.

2. Descripción de la solución.


Para resolver este problema, utilicé el siguiente hardware:

  • dos sensores de movimiento 112;
  • receptor de señales de sensores e interruptores RX2164;
  • Interruptor PU311-2;
  • Nettop 3VI (basado en el procesador Atom D525);
  • Cámara IP china no nominada.

Ya he dado una breve descripción de los dispositivos para construir el hogar inteligente de la compañía Nootehnika en la sección de "introducción" del artículo , por lo que no me concentraré en este tema aquí. Además, en todos los detalles sobre los dispositivos se pueden encontrar en el sitio externo de la Compañía .

Entonces, a la descripción del sistema. En el nettop 3VI, se instala Debian Linux 7, el software Simple Event Correlation (SEC) y un conjunto de utilidades de Linux para administrar dispositivos Nootechnics de Oleg Artamonov .

Los sensores de movimiento (PM112) se instalan en el vestíbulo frente a la puerta principal y en el pasillo (dentro del departamento). El receptor USB RX2164 está conectado a la red. El receptor recibe señales de sensores e interruptores, y las utilidades de gestión de dispositivos Nootehnics (en lo sucesivo denominadas las utilidades Noolite) instaladas en el nettop transmiten las señales recibidas a syslog. SEC lee el archivo en el que se escriben los datos de syslog y los procesa de acuerdo con las reglas configuradas. Como resultado del procesamiento, se realizan acciones como recibir fotos de la cámara IP y enviar mensajes de correo electrónico.

Hay dos formas de habilitar (y deshabilitar) el modo de seguridad:

  1. presionando un botón en el interruptor PU311-2;
  2. presionando un botón en la interfaz web del sistema de control inteligente del hogar.

Un diagrama de bloques que ilustra la operación del sistema se muestra en la Figura 1.



Figura 1 - Diagrama de bloques que ilustra el funcionamiento del sistema.

3. Instalación del hardware del sistema


Para este sistema, utilizo los mismos 2 sensores de movimiento, cuya instalación describí en la sección 4 del artículo .

En resumen, uno de los sensores está instalado cerca de la puerta principal en el vestíbulo (fuera del apartamento). La sensibilidad de este sensor se establece a un nivel tal que detecte movimiento en las inmediaciones de la puerta. El segundo sensor se instala inmediatamente cerca de la puerta principal, pero ya dentro del departamento. La sensibilidad se ajusta de tal manera que arregle el movimiento en las inmediaciones de la puerta.

Se instala una cámara IP fuera del apartamento en el vestíbulo debajo del techo. La puerta principal y aproximadamente 1,5 metros de espacio frente a ella caen en su campo de visión.

El interruptor PU311-2 se instala dentro del gabinete para no llamar la atención y no presionarlo accidentalmente.

El nettop 3VI con el receptor de señal RX2164 se encuentra cerca del entrepiso para proporcionar una recepción estable de señales de sensores e interruptores.

El diagrama de instalación del equipo se muestra en la Figura 2.



Figura 2 - Diagrama de instalación del equipo

4. Configuración del software


La configuración del software incluye:

  • configurar utilidades Noolite para recibir señales de sensores e interruptores;
  • establecer reglas SEC para responder a señales provenientes de sensores e interruptores;
  • crear un guión que recibirá una foto de la cámara y enviará correos electrónicos;
  • creando un botón para encender y apagar el sistema en la interfaz web.

Configurar las utilidades de Noolite para recibir señales de sensores e interruptores


Para que el receptor RX2164 comience a recibir señales de un sensor o interruptor, es necesario "vincularlo". Para hacer esto, presionamos el botón "bind" en el sensor mismo (en la parte posterior), y ejecutamos en la computadora a la que está conectado el receptor el comando: nooliterxcfg –bind <número de canal del 1 al 64>. Del mismo modo, el interruptor está vinculado al receptor.

En mi caso, el sensor en el vestíbulo estaba conectado al canal 3, el sensor en el departamento al canal 2 y dos botones de interruptor a los canales 1 y 4, respectivamente.

Para recibir señales de sensores en tiempo real, debe ejecutar la utilidad nooliterx en modo demonio. El propio desarrollador (Oleg Artamonov en la documentación de utilidades) describe el proceso de instalación de las utilidades y su configuración, y también yo en la sección 4 del artículo (ENLACE). Como resultado, obtenemos un registro de señales de sensores y conmutadores en syslog. Solo permanece en syslog para configurar la grabación de estos mensajes en un archivo y la salida es la siguiente (mensajes de muestra de sensores):

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 

Las muestras de mensajes de los interruptores (cuando se presiona un botón sobre ellas) se ven un poco diferentes:

 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 

Configure las reglas SEC para activar señales provenientes de sensores e interruptores.


SEC es una utilidad para procesar registros de eventos. En resumen, recibe una secuencia de eventos en la entrada, cada uno de los cuales verifica el cumplimiento de los patrones de las reglas configuradas. En el caso de encontrar una coincidencia, inicia la acción prescrita en la regla correspondiente. La cosa es increíblemente flexible de usar. Hay una página de manual detallada en la web.

SEC se utiliza en mi sistema para buscar mensajes en tiempo real de sensores y conmutadores en la secuencia de eventos y ejecutar un script que toma fotos y envía correos electrónicos, o simplemente traduce todo el sistema de forma intermitente.

En SEC, configuré 4 reglas. 2 - para procesar eventos desde sensores de movimiento y dos - para procesar señales desde dos botones del interruptor. Las reglas están en /etc/sec.conf

Regla 1: Procesando la señal del sensor de movimiento en el vestíbulo (sensor conectado al 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 

El tipo de esta regla, "SingleWithSurpress", está diseñado para responder solo al primer evento registrado durante el intervalo de tiempo especificado por el parámetro "ventana" en segundos. Es decir esta configuración significa que la regla no funcionará más de una vez por minuto y la acción especificada en el parámetro "acción" se iniciará no más de 1 vez por minuto. Esto se hace para que, en caso de que alguien pisotee la puerta durante varios minutos, no envíe correo no deseado con toneladas de cartas. En el parámetro "patrón", se escribe una expresión regular, según la cual se buscan los eventos del sensor asociado con el canal 3. Se especifican dos acciones en el parámetro "acción": shellcmd, que ejecuta el script y le pasa un parámetro extraído de la expresión regular (en este caso que representa el número "3"), y la segunda acción "evento% s" que sirve para transferir la expresión registrada en el parámetro "desc" a otras reglas, lo cual no es necesario para el funcionamiento de este sistema y puede omitirse. El parámetro "desc" indica información de servicio adicional que utilizan otras reglas. Para este sistema, no es necesario y allí se pueden ingresar datos arbitrarios.

Regla 2: Procesamiento de señal desde un sensor de movimiento en el corredor (sensor conectado al 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 

Aquí, todo es similar a la regla 1. Solo se debe tener en cuenta que el número "2" obtenido de la expresión regular se pasa al script.

Regla 3: Procesamiento de señal desde un botón de interruptor asociado con el 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) 

Esta regla es aún más simple: se activa para cada evento que coincida con la expresión regular especificada en el parámetro "patrón". Como acción, escribe en el archivo de estado del sistema. Este archivo se analiza mediante una secuencia de comandos iniciada por las reglas 1 y 2. Si el estado es "en línea", la secuencia de comandos se activa; si el valor es "fuera de línea", la secuencia de comandos no funciona. Más sobre esto un poco más.

Regla 4: procesamiento de la señal desde un botón de interruptor asociado con el 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) 

Todo es similar a la regla 3, solo el estado se establece en "sin conexión".

Un guión que toma fotos de la cámara y envía correos electrónicos.


El script iniciado por las reglas 1 y 2 verifica el estado del sistema en el archivo de estado y, según su valor ("en línea" o "fuera de línea"), realiza o no las siguientes acciones:

  • recibe una foto de la cámara IP en el vestíbulo y envía un correo electrónico en caso de que haya un sensor en el vestíbulo;
  • envía un mensaje de alarma en caso de un sensor en el pasillo.

El siguiente es el cuerpo del guión. En su entrada, recibe (de la SEC) el número de canal al que está conectado el sensor y, según este número y el estado del sistema, realiza ciertas acciones.

 #!/bin/sh dir="/usr/local/smarthome/security" MAIL=$dir/mail.letter stat_file="$dir/status" dt=`date` if [ "$1" -eq 2 ] then if grep "online" $stat_file then cd $dir rm -f $dir/snapshot.cgi wget http://<IP  >/snapshot.cgi --user=<username> --password=<password> mpack -s "Someone at the door at $dt" $dir/snapshot.cgi d.shulinin@gmail.com fi elif [ "$1" -eq 3 ] then if grep "online" $stat_file then printf "Subject: Motion in the lobby spotted at $dt\n" > $MAIL /usr/sbin/ssmtp email@gmail.com < $MAIL fi else echo "no legitimate input detected" fi 

Para obtener fotos de mi cámara IP, uso wget y una línea como esta:

 wget http://<IP  >/snapshot.cgi --user=<username> --password=<password> 

Para otras cámaras IP, es posible que deba buscar otras opciones, no existe una solución única. RTFM a la cámara, como dicen.

Los botones de encendido y apagado del sistema en la interfaz web. Para habilitar y deshabilitar el modo de seguridad, también agregué un par de botones a mi interfaz web autoescrita para controlar las fuentes de luz de un hogar inteligente.

Se ven de la siguiente manera:

 <?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> 

Aquí todo es simple: cuando hace clic en el botón "ENCENDIDO", "en línea" se escribe en el archivo de estado, cuando hace clic en "APAGADO" - "fuera de línea".

5. Conclusión


Como resultado, obtuve un sistema que, cuando se activa, toma fotos de cualquiera que se haya acercado a la puerta y envía la foto por correo electrónico. Y si hay movimiento dentro del apartamento, simplemente envía una alerta por correo electrónico.

Los mensajes de correo electrónico de muestra se ven así (ver Figura 3). Las imágenes en sí, por supuesto, son más grandes y se expanden al hacer clic en ellas con el mouse.


Figura 3 - Ejemplo de correo electrónico con foto

El sistema se puede activar y desactivar presionando un botón en el interruptor y también a través de los botones en la interfaz web del sistema de control inteligente del hogar.

A corto plazo, también quiero mostrar el estado actual del sistema (activo / inactivo) en la interfaz web.

Source: https://habr.com/ru/post/es401909/


All Articles