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

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

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 – Блок-схема, иллюстрирующая работу системы

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


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

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

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

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

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

Схема установки оборудования приведена на рисунке 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+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

Тип данного правила — «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+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

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

Правило 3: Обработка сигнала от кнопки выключателя, привязанной к каналу 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)

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

Правило 4: Обработка сигнала от кнопки выключателя, привязанной к каналу 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)

Все аналогично правилу 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 $dt\n" > $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 – Пример сообщения электронной почты с фото

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

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

Комментарии (22)


  1. danyaShep
    27.02.2017 13:55
    -2

    Старый телефон на андроиде с «IP Webcam» и Tasker делает всё то же самое и даже больше.


    1. iig
      27.02.2017 14:36
      +1

      Возможно. Почему бы не написать про это статью? Как планируете этот телефон крепить, как организуете питание, как им управлять…


      1. danyaShep
        27.02.2017 15:32
        -1

        Статья будет слишком короткой. Крепить подручными средствами, питать от розетки, управлять по сети.

        Мне хватает возможностей IP Webcam. Она снимает сама детектирует движение, записывает ролики. Дальше нужно только слить их на какой-н сервер. Для этого использую folder sync. Tasker может отправлять уведомления, если они нужны.

        У меня уведомление с фоткой отправляются в Telegram через Home Assistant.


        1. lenz1986
          28.02.2017 08:51

          Я бы тоже использовал для домашних целей систему на базе ведроида, но есть одно НО. Телефонов с разбитым экраном у меня куча, их практическое применение в режиме веб камер, систем охраны, датчиков напрашивается само собой, но как телефон заставить в полной мере работать автономно, чтобы я его запитал от блока питания, оставил со своим АКБ и как только подается питание он автоматически включался и начинал работать в нужном мне режиме. Чтобы я не ломал голову на тему, что надо включить телефон с кнопки, запустить программу и дождаться когда же все это заработает.


          1. danyaShep
            28.02.2017 13:15

            А зачем его выключать?
            Почти во всех андроидах есть функция включения по расписанию. Она подойдет на случай, если надолго отключили электричество и телефон успел сесть и выключиться.
            Устанавливаете включение «в 7:00» и простой камеры на даче будет максимум несколько часов.

            У IP Webcam есть галочка в настройках, которая добавляет программу в автозагрузку.


    1. shudv
      28.02.2017 22:45

      т.е. телефон вывешивать в подъезде?.. пусть даже и старый.


      1. danyaShep
        01.03.2017 10:59

        Я в дверь встроил. Снаружи в двери только дырка под камеру.


  1. vibornoff
    27.02.2017 15:38
    +1

    Беспроводные датчики в охранной системе? Желаю удачи…


    1. iig
      27.02.2017 15:57

      Смотря от кого охраняться. Если перед тем, как лезть в квартиру, «электрики» сначала подадут туда 380 в, а потом отключат питание совсем, многим самоделкам поплохеет. А для Неуловимого Джо сгодится.


      1. vibornoff
        27.02.2017 17:10
        +1

        Правильно, поэтому все критичные потребители, отключение которых может привести к «разморозке», ну или там пожару и т.д. — должны быть накрыты защитным реле и ИБП.


    1. lenz1986
      28.02.2017 08:48

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


    1. Mimizavr
      28.02.2017 11:30

      Эммм… Jablotron, Paradox, Pyronix, Satel — навскидку охранки с хорошими беспроводными подсистемами.


      1. vibornoff
        28.02.2017 11:32

        … и выключаются глушилкой за 30$ с Алиэкспресс


        1. iig
          28.02.2017 12:27
          +1

          … а железная дверь вырезается болгаркой за ту же цену… ;)
          Люди еще во 2 мировую войну (а может и раньше) сообразили, что радиопередачи могут глушиться, и придумали методы защиты. Плавающие частоты, широкополосные сигналы, направленные антенны… Если передатчик за $0.5 с Алиэкспресс — то да, глушилка с того же Али поможет.
          Ну, и хорошая система должна включать в себя разные датчики.


        1. Mimizavr
          28.02.2017 16:56

          … и получаете сообщение о глушении и обрыве связи с последующим вызовом наряда. А про глушилки — это заблуждение. Хороший охранный радиоканал Вы не заглушите. Да и сначала надо точно знать, что на объекте установлена радиоканальная система.
          Но даже не углубляясь в дебри: для домашней самоделки использование радиоканала — вполне обосновано.


          1. vibornoff
            01.03.2017 12:01

            … и получаете ложные вызовы 30 раз в неделю, пока не отключите нахер свои датчики :)

            И любой радиоканал глушится, сколь бы хорошим он ни был, т.к. точно узнать, что на объекте радиоканальная система — тривиально.


            1. iig
              01.03.2017 13:12
              +1

              Если система обслуживаемая — обнаружить глушилку не менее тривиально.Станцию РЭБ на шасси Камаза трудно не заметить.


            1. Mimizavr
              01.03.2017 13:12

              Нет. Современные радиоканальные охранные системы устойчивы к глушению и обычным помехам. Этот вопрос уже не раз поднимался на разных форумах. А если и глушатся, то устройствами с ценником в несколько тысяч долларов. Ставят радиоканал повсеместно и нареканий нет ни от ПЦН, ни от монтажных организаций. Только батарейки лень менять.
              Вот хорошая статья по радиоканальным системам.


    1. greenkpz
      28.02.2017 22:43

      Беспроводные датчики бывают еще и пожарные и при этом сертифицированные.
      см. стрелец от аргус-спектр.
      В охранке используются с незапамятных годов, времен «виста-501»


  1. kvvv
    28.02.2017 22:43

    Запаритесь входящие удалять)


    1. shudv
      28.02.2017 22:44

      сделана отдельная папочка, которая по расписанию раз в неделю чистится. В принципе, меня устраивает ))


      1. iig
        28.02.2017 23:23

        … И в любой момент готовы хватать телефон и расследовать инцендент, что там произошло, ложное срабатывание или нет. Спите, плаваете в бассейне, поехали на выходные на рыбалку… Телефон рядом.