Самодельная охранная система на базе продуктов для умного дома от Ноотехника

в 8:39, , рубрики: noolite, sec, ноотехника, охрана, сигнализация, умный дом

Доброго дня, уважаемое сообщество. Хочу поделиться с Вами экспериментом в области реализации охранной системы для дома на базе устройств для умного дома от компании Ноотехника. Сразу хочу оговориться, что это один из первых опытов, и целью его я ставлю перед собой не «построение неприступного бастиона», а демонстрацию возможностей использования выбранных мной устройств, эксперимент и извлечение уроков, а также получение от Вас обратной связи.

Если кратко, то проектируемая мной система должна в режиме постановки на охрану фотографировать каждого приблизившегося к входной двери человека и отправлять фото на адрес электронной почты, а также отправлять сообщение электронной почты в случае регистрации движения в прихожей (т.е. наличия движения внутри квартиры). Итак, к постановке задачи.

1. Постановка задачи

Проектируемая мной система должна:

  • в режиме постановки на охрану фотографировать каждого приблизившегося к входной двери человека и отправлять фото на адрес электронной почты;
  • в режиме постановки на охрану отправлять сообщение электронной почты в случае регистрации движения в прихожей (без фото т.к. IP камер там у меня нет);
  • предоставлять различные интерфейсы для постановки и снятия с охраны.

Под различными интерфейсами постановки на охрану я подразумеваю:

  • перевод в режим охраны и снятие с охраны с помощью радио выключателей Ноотехника;
  • перевод в режим охраны и снятие с охраны через веб-интерфейс для управления умным домом.

2. Описание решения

Для решения поставленной задачи я использовал следующее аппаратное обеспечение:

  • два датчика движения РМ112;
  • приемник сигналов от датчиков и выключателей RX2164;
  • выключатель PU311-2;
  • неттоп 3VI (на основе процессора Atom D525);
  • китайская noname IP-камера.

Краткое описание устройств для построения умного дома компании Ноотехника я уже приводил в разделе «вступление» в статье, поэтому здесь на данном вопросе концентрироваться не буду. Кроме того, во всех подробностях об устройствах можно узнать на офф.сайте Компании.

Итак, к описанию системы. На неттопе 3VI установлен Debian Linux 7, программное обеспечение Simple Event Correlation (SEC) и комплект утилит под linux для управления устройствами Ноотехника от Олега Артамонова.

Датчики движения (PM112) установлены в тамбуре перед входной дверью и в коридоре (внутри квартиры). Приемник сигналов RX2164 с интерфейсом USB подключен к неттопу. Приемник получает сигналы от датчиков и выключателей, а утилиты управления устройствами Ноотехника (далее – утилиты Noolite), установленные на неттопе, передают полученные сигналы в syslog. SEC читает файл, в который записывает данные syslog, и обрабатывает их согласно настроенным правилам. В результате обработки выполняются такие действия как получение фото с IP камеры и отправка сообщений электронной почты.

Включение (и отключение) режима охраны осуществляется двумя способами:

  1. нажатием кнопки на выключателе PU311-2;
  2. нажатием кнопки в веб-интерфейсе системы управления умным домом.

Блок-схема, иллюстрирующая работу системы приведена на рисунке 1.

Самодельная охранная система на базе продуктов для умного дома от Ноотехника - 1

Рисунок 1 – Блок-схема, иллюстрирующая работу системы

3. Установка аппаратного обеспечения системы

Для данной системы я использую те же самые 2 датчика движения, установку которых я описывал в разделе 4 статьи.

Если кратко, то, один из датчиков установлен возле входной двери в тамбуре (снаружи квартиры). Чувствительность данного датчика настроена на таком уровне, чтобы фиксировать движение в непосредственной близости от двери. Второй датчик установлен сразу возле входной двери, но уже внутри квартиры. Чувствительность настроена таким образом, чтобы фиксировать движение в непосредственной близости от двери.

IP-камера установлена снаружи квартиры в тамбуре под потолком. В ее поле зрения попадает входная дверь и примерно 1,5 метра пространства перед ней.

Выключатель PU311-2 установлен внутри шкафа чтобы не бросаться в глаза и не быть случайно нажатым.

Неттоп 3VI с приемником сигналов RX2164 расположен неподалеку на антресоли, чтобы обеспечить устойчивый прием сигналов от датчиков и выключателей.

Схема установки оборудования приведена на рисунке 2.

Самодельная охранная система на базе продуктов для умного дома от Ноотехника - 2

Рисунок 2 – Схема установки оборудования

4. Настройка программного обеспечения

Настройка программного обеспечения включает в себя:

  • настройку утилит Noolite для приема сигналов от датчиков и выключателей;
  • настройку правил SEC для срабатывания на сигналы, приходящие от датчиков и выключателей;
  • создание скрипта, который будет выполнять получение фото с камеры и отправку писем по электронной почте;
  • создание кнопки включения и выключения системы в веб-интерфейсе.

Настройка утилит Noolite для приема сигналов от датчиков и выключателей

Для того, чтобы приемник RX2164 начал получать сигналы от датчика или выключателя необходимо выполнить его «привязку». Для этого нажимаем кнопку «привязка» на самом датчике (на задней стороне), и выполняем на компьютере, к которому подключен приемник, команду: nooliterxcfg –bind <номер канала от 1 до 64>. Аналогично выполняется привязка выключателя к приемнику.

В моем случае была выполнена привязка датчика в тамбуре к каналу 3, датчика в квартире — к каналу 2 и двух кнопок выключателя к каналам 1 и 4 соответственно.

Для получения сигналов от датчиков в режиме реального времени нужно запустить утилиту nooliterx в режиме демона. Процесс установки утилит и их настройки описан самим разработчиком (Олегом Артамоновым в документации к утилитам) а также мной в разделе 4 статьи (ССЫЛКА). В результате получаем запись сигналов от датчиков и выключателей в syslog. Остается только в самом syslog настроить запись этих сообщений в файл и на выходе получается следующее (образцы сообщений от датчиков):

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

Образцы сообщений от выключателей (при нажатии на них кнопки) выглядят немного иначе:

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

Настройка правил SEC для срабатывания на сигналы, приходящие от датчиков и выключателей.

SEC – это утилита для обработки журналов событий. Если кратко, то на вход она получает поток событий, каждое из которых проверяет на соответствие шаблонам настроенных правил. В случае нахождения соответствия запускает действие, прописанное в соответствующем правиле. Вещь потрясающе гибкая в использовании. Есть подробный man page на просторах сети.

SEC используется в моей системе, чтобы в режиме реального времени отыскивать в потоке событий сообщения от датчиков и выключателей и выполнять запуск скрипта, делающего фото и отправляющего email’ы или же просто переводить включать и выключать всю систему.

В SEC мною было настроено 4 правила. 2 – для обработки событий от датчиков движения и два – для обработки сигналов от двух кнопок выключателя. Правила находятся в файле /etc/sec.conf

Правило 1: Обработка сигнала от датчика движения в тамбуре (датчик, привязанный к каналу 3)

type=SingleWithSuppress
ptype=RegExp
pattern=w+s+d+s+d+:d+:d+s+w+s+nooliterxS+s+Received:s+statuss+d+,s+channels+(3),s+commands+25.*
desc=Motion sensor frontdoor $1 triggered
action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s
window=60

Тип данного правила — «SingleWithSurpress» — предназначен для того, чтобы реагировать только на первое зарегистрированное событие в течение временного интервала, задаваемого параметром «window» в секундах. Т.е. эта настройка говорит о том, что правило сработает не чаще одного раза в минуту и действие, прописанное в параметре «action» будет запущено не чаще 1 раза в минуту. Это сделано для того, чтобы в случае, если кто-то несколько минут топчется возле двери не заспамить свою почту тоннами писем. В параметре «pattern» прописано регулярное выражение, согласно которому происходит поиск событий от датчика, привязанного к каналу 3. В параметре «action» прописано два действия – shellcmd, которое выполняет запуск скрипта и передачу в него параметра, выделенного из регулярного выражения (в данном случае представляющего цифру «3»), и второе действие «event %s» служащее для передачи выражения, записанного в параметре «desc» другим правилам, что не является необходимым для работы данной системы и может быть опущено. В параметре «desc» указана дополнительная служебная информация, которая используется другими правилами. Для данной системы она не является необходимой и туда можно вписать произвольные данные.

Правило 2: Обработка сигнала от датчика движения в коридоре (датчик, привязанный к каналу 2)

type=SingleWithSuppress
ptype=RegExp
pattern=w+s+d+s+d+:d+:d+s+w+s+nooliterxS+s+Received:s+statuss+d+,s+channels+(2),s+commands+25.*
desc=Motion sensor lobby $1 triggered
action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s
window=60

Здесь все аналогично правилу 1. Стоит только отметить, что скрипту передается цифра «2», полученная из регулярного выражения.

Правило 3: Обработка сигнала от кнопки выключателя, привязанной к каналу 1

type=single
ptype=regexp
pattern=w+s+d+s+d+:d+:d+s+w+s+nooliterxS+s+Received:s+statuss+d+,s+channels+(1),s+commands+4.*
desc=switch guard mode online
action=shellcmd (/bin/echo "online" > /usr/local/smarthome/security/status)

В этом правиле все еще проще – оно срабатывает на каждое событие, соответствующее регулярному выражению, указанному в параметре «pattern». В качестве действия выполняет запись в файл-статуса системы. Этот файл анализируется скриптом, запускаемым правилами 1 и 2. В случае значения статуса «online», скрипт срабатывает, в случае значения «offline» — срабатывание скрипта не происходит. Подробнее об этом чуть дальше.

Правило 4: Обработка сигнала от кнопки выключателя, привязанной к каналу 4

type=single
ptype=regexp
pattern=w+s+d+s+d+:d+:d+s+w+s+nooliterxS+s+Received:s+statuss+d+,s+channels+(4),s+commands+4.*
desc=switch guard mode offline
action=shellcmd (/bin/echo "offline" > /usr/local/smarthome/security/status)

Все аналогично правилу 3, только статус выставляется в значение «offline».

Скрипт, выполняющий получение фото с камеры и отправку писем по электронной почте

Скрипт, запускаемый правилами 1 и 2 проверяет статус системы в файле статуса и в зависимости от его значения («online» или «offline») выполняет или не выполняет следующие действия:

  • получает фото с IP камеры в тамбуре и отправляет по электронной почте в случае срабатывания датчика в тамбуре;
  • отправляет тревожное сообщение в случае срабатывания датчика в коридоре.

Ниже приведено тело скрипта. На свой вход он получает (от SEC) номер канала, к которому привязан датчик и в зависимости от этого номера и статуса системы выполняет те или иные действия.

#!/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 $dtn" > $MAIL
      /usr/sbin/ssmtp email@gmail.com < $MAIL
   fi
else
   echo "no legitimate input detected"
fi

Для получения фото с моей IP камеры я использую wget и строку вида:

wget http://<IP адрес камеры>/snapshot.cgi --user=<username> --password=<password>

Для других IP камер, возможно, нужно искать другие варианты, тут единого решения не существует. RTFM к камере, как говориться.

Кнопки включения и выключения системы в веб-интерфейсе. Для включения и отключения режима охраны я также добавил пару кнопок в свой самописный веб-интерфейс для управления источниками света умного дома.

Выглядят они следующим образом:

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

Здесь все просто — при нажатии на кнопку «ON» в файл статуса пишется «online», при нажатии на «OFF» — «offline».

5. Заключение

В итоге у меня получилась система, которая, будучи активирована, фотографирует любого, приблизившегося к двери и отправляет фото на электронную почту. А в случае наличия движения внутри квартиры – просто отправляет оповещение на электронную почту.

Примерно так выглядят образцы сообщений электронной почты (см.рисунок 3). Сами изображения, конечно, большего размера и разворачиваются при клике по ним мышкой.

Самодельная охранная система на базе продуктов для умного дома от Ноотехника - 3
Рисунок 3 – Пример сообщения электронной почты с фото

Система может быть активирована и деактивирована посредством нажатия кнопки на выключателе а также посредством кнопок в веб-интерфейсе системы управления умным домом.

В ближайшей перспективе хочу также сделать отображение текущего статуса системы (активна/неактивна) в веб-интерфейсе.

Автор: shudv

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js