Доброго дня, уважаемое сообщество. Хочу поделиться с Вами экспериментом в области реализации охранной системы для дома на базе устройств для умного дома от компании Ноотехника. Сразу хочу оговориться, что это один из первых опытов, и целью его я ставлю перед собой не «построение неприступного бастиона», а демонстрацию возможностей использования выбранных мной устройств, эксперимент и извлечение уроков, а также получение от Вас обратной связи.
Если кратко, то проектируемая мной система должна в режиме постановки на охрану фотографировать каждого приблизившегося к входной двери человека и отправлять фото на адрес электронной почты, а также отправлять сообщение электронной почты в случае регистрации движения в прихожей (т.е. наличия движения внутри квартиры). Итак, к постановке задачи.
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 камеры и отправка сообщений электронной почты.
Включение (и отключение) режима охраны осуществляется двумя способами:
- нажатием кнопки на выключателе PU311-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+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 – Пример сообщения электронной почты с фото
Система может быть активирована и деактивирована посредством нажатия кнопки на выключателе а также посредством кнопок в веб-интерфейсе системы управления умным домом.
В ближайшей перспективе хочу также сделать отображение текущего статуса системы (активна/неактивна) в веб-интерфейсе.
Автор: shudv