Bom dia, querida comunidade. Quero compartilhar com você um experimento na implementação de um sistema de segurança para uma casa baseada em dispositivos domésticos inteligentes da Nootehnika. Quero fazer uma reserva imediata de que esse é um dos primeiros experimentos, e meu objetivo não é "construir um bastião inexpugnável", mas demonstrar as possibilidades de usar os dispositivos que escolhi, experimentar e aprender lições, além de receber feedback de você.
Em resumo, o sistema que eu estava projetando deveria tirar uma foto de cada pessoa que se aproximasse da porta da frente no modo de armar e enviar uma foto para um endereço de e-mail, bem como enviar uma mensagem de e-mail em caso de registro de movimento no corredor (ou seja, há movimento dentro do apartamento) .
Então, para a declaração do problema.
1. Declaração do problema
O sistema que eu design deve:
- no modo de armar, tire uma foto de cada pessoa que se aproxima da porta da frente e envie a foto para um endereço de e-mail;
- no modo de armar, envie uma mensagem de e-mail em caso de registro de movimento no corredor (sem uma foto porque não tenho câmeras IP);
- fornecer várias interfaces para armar e desarmar.
Por várias interfaces de armamento, quero dizer:
- Armar e desarmar com a ajuda dos interruptores de rádio Nootehnika;
- Armar e desarmar através da interface da web para gerenciar uma casa inteligente.
2. Descrição da solução
Para resolver esse problema, usei o seguinte hardware:
- dois sensores de movimento 112;
- receptor de sinais de sensores e interruptores RX2164;
- Interruptor PU311-2;
- Nettop 3VI (baseado no processador Atom D525);
- Câmera IP noname chinesa.
Já forneci uma breve descrição dos dispositivos para a construção da casa inteligente da empresa Nootehnika na seção "introdução"
do artigo , portanto não vou me concentrar nessa questão aqui. Além disso, todos os detalhes sobre os dispositivos podem ser encontrados no site externo da
empresa .
Então, para a descrição do sistema. No nettop 3VI, o Debian Linux 7, o software Simple Event Correlation (SEC) e um conjunto de utilitários linux para gerenciar dispositivos Nootechnics de
Oleg Artamonov estão instalados.
Os sensores de movimento (PM112) são instalados no vestíbulo em frente à porta da frente e no corredor (dentro do apartamento). O receptor USB RX2164 está conectado ao nettop. O receptor recebe sinais de sensores e comutadores, e os utilitários de gerenciamento de dispositivos Nootehnics (a seguir denominados utilitários Noolite) instalados no nettop transmitem os sinais recebidos ao syslog. O SEC lê o arquivo no qual os dados do syslog são gravados e os processa de acordo com as regras configuradas. Como resultado do processamento, são executadas ações como receber fotos da câmera IP e enviar mensagens de email.
Há duas maneiras de ativar (e desativar) o modo de segurança:
- pressionando um botão no interruptor PU311-2;
- pressionando um botão na interface da web do sistema de controle doméstico inteligente.
Um diagrama de blocos que ilustra a operação do sistema é mostrado na Figura 1.
Figura 1 - Diagrama de blocos ilustrando a operação do sistema
3. Instalando o Hardware do Sistema
Para este sistema, eu uso os mesmos 2 sensores de movimento, cuja instalação eu descrevi na seção 4 do
artigo .
Em resumo, um dos sensores é instalado perto da porta da frente no vestíbulo (fora do apartamento). A sensibilidade deste sensor é ajustada em um nível tal que detecte movimento nas imediações da porta. O segundo sensor é instalado imediatamente perto da porta da frente, mas já dentro do apartamento. A sensibilidade é ajustada de forma a fixar o movimento nas imediações da porta.
Uma câmera IP é instalada fora do apartamento no vestíbulo sob o teto. A porta da frente e cerca de 1,5 metros de espaço à sua frente caem em seu campo de visão.
O interruptor PU311-2 é instalado dentro do gabinete para não chamar a atenção e não ser pressionado acidentalmente.
O nettop 3VI com o receptor de sinal RX2164 está localizado próximo ao mezanino para fornecer recepção estável de sinais de sensores e comutadores.
O diagrama de instalação do equipamento é mostrado na Figura 2.
Figura 2 - Diagrama de instalação do equipamento
4. Configuração do software
A configuração do software inclui:
- configurar utilitários Noolite para receber sinais de sensores e comutadores;
- definir regras da SEC para responder a sinais provenientes de sensores e comutadores;
- criar um script que receberá uma foto da câmera e enviará e-mails;
- criando um botão para ligar e desligar o sistema na interface da web.
Configurando utilitários Noolite para receber sinais de sensores e comutadores
Para que o receptor RX2164 comece a receber sinais de um sensor ou switch, é necessário "ligá-lo". Para isso, pressionamos o botão “bind” no próprio sensor (no verso) e executamos no computador ao qual o receptor está conectado o comando: nooliterxcfg –bind <número do canal de 1 a 64>. Da mesma forma, o interruptor está ligado ao receptor.
No meu caso, o sensor no vestíbulo foi conectado ao canal 3, o sensor no apartamento ao canal 2 e dois botões de comutação aos canais 1 e 4, respectivamente.
Para receber sinais dos sensores em tempo real, é necessário executar o utilitário nooliterx no modo daemon. O processo de instalação dos utilitários e suas configurações é descrito pelo próprio desenvolvedor (Oleg Artamonov na documentação dos utilitários) e também por mim na seção 4 do artigo (LINK). Como resultado, obtemos um registro de sinais de sensores e comutadores no syslog. Resta apenas configurar a gravação dessas mensagens em um arquivo no próprio syslog e o seguinte é obtido na saída (mensagens de amostra dos 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
Amostras de mensagens de switches (quando um botão é pressionado nelas) parecem um pouco 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 regras SEC para acionar sinais provenientes de sensores e comutadores.
SEC é um utilitário para processar logs de eventos. Em resumo, ele recebe um fluxo de eventos na entrada, cada um dos quais verifica a conformidade com os padrões das regras configuradas. No caso de encontrar uma correspondência, inicia a ação prescrita na regra correspondente. A coisa é incrivelmente flexível de usar. Há uma página de manual detalhada na web.
O SEC é usado no meu sistema para procurar mensagens em tempo real de sensores e comutadores no fluxo de eventos e executar um script que tira fotos e envia e-mails, ou simplesmente liga e desliga todo o sistema.
Na SEC, eu configurei 4 regras. 2 - para processar eventos de sensores de movimento e dois - para processar sinais de dois botões do comutador. As regras estão no /etc/sec.conf
Regra 1: Processando o sinal do sensor de movimento no vestíbulo (sensor conectado ao 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
O tipo dessa regra - "SingleWithSurpress" - foi projetado para responder apenas ao primeiro evento gravado durante o intervalo de tempo especificado pelo parâmetro "window" em segundos. I.e. essa configuração significa que a regra funcionará não mais que uma vez por minuto e a ação especificada no parâmetro "ação" será iniciada não mais que 1 vez por minuto. Isso é feito para que, no caso de alguém pisar na porta por vários minutos, não spam suas cartas com toneladas de cartas. No parâmetro "pattern", uma expressão regular é gravada, de acordo com a qual são pesquisados eventos do sensor associado ao canal 3. Duas ações são especificadas no parâmetro "action" - shellcmd, que executa o script e passa a ele um parâmetro extraído da expressão regular (neste caso representando o número “3”) e a segunda ação “evento% s” servindo para transferir a expressão registrada no parâmetro “desc” para outras regras, o que não é necessário para a operação deste sistema e pode ser omitido. O parâmetro "desc" indica informações adicionais de serviço que são usadas por outras regras. Para este sistema, não é necessário e dados arbitrários podem ser inseridos lá.
Regra 2: Processamento de sinal de um sensor de movimento no corredor (sensor conectado ao 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
Aqui, tudo é semelhante à regra 1. Deve-se observar apenas que o número "2" obtido da expressão regular é passado para o script.
Regra 3: Processamento de sinal de um botão de comutação associado ao 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)
Essa regra é ainda mais simples - é acionada para todos os eventos que correspondem à expressão regular especificada no parâmetro "padrão". Como ação, ele grava no arquivo de status do sistema. Este arquivo é analisado por um script iniciado pelas regras 1 e 2. Se o status for "online", o script será acionado; se o valor for "offline", o script não funcionará. Mais sobre isso um pouco mais.
Regra 4: Processamento de sinal de um botão de comutação associado ao 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)
Tudo é semelhante à regra 3, apenas o status está definido como "offline".
Um script que tira fotos da câmera e envia e-mails
O script iniciado pelas regras 1 e 2 verifica o status do sistema no arquivo de status e, dependendo do seu valor ("online" ou "offline"), executa ou não as seguintes ações:
- recebe uma foto da câmera IP no vestíbulo e envia um e-mail no caso de um sensor no vestíbulo;
- envia uma mensagem de alarme no caso de um sensor no corredor.
A seguir está o corpo do script. Na entrada, ele recebe (da SEC) o número do canal ao qual o sensor está conectado e, dependendo desse número e do status do sistema, executa determinadas ações.
Para tirar fotos da minha câmera IP, eu uso o wget e uma linha como esta:
wget http://<IP >/snapshot.cgi --user=<username> --password=<password>
Para outras câmeras IP, pode ser necessário procurar outras opções, não há uma solução única. RTFM para a câmera, como eles dizem.
Os botões ativam e desativam o sistema na interface da web. Para ativar e desativar o modo de segurança, também adicionei alguns botões à minha interface da web auto-escrita para controlar as fontes de luz de uma casa inteligente.
Eles têm a seguinte aparência:
<?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>
Tudo é simples aqui - quando você clica no botão "ON", "online" é gravado no arquivo de status, quando você clica em "OFF" - "offline".
5. Conclusão
Como resultado, recebi um sistema que, quando ativado, tira fotos de quem se aproximou da porta e envia a foto por e-mail. E se houver movimento dentro do apartamento, ele simplesmente envia um alerta por e-mail.
As mensagens de email de amostra são mais ou menos assim (veja a Figura 3). As próprias imagens, é claro, são maiores e se expandem quando você clica nelas com o mouse.
Figura 3 - Exemplo de email com fotoO sistema pode ser ativado e desativado pressionando um botão no interruptor e também através dos botões na interface da web do sistema de controle doméstico inteligente.
No curto prazo, também quero exibir o status atual do sistema (ativo / inativo) na interface da web.