Xeoma: определяем присутствие субъекта на объекте

В практике видеонаблюдения, особенно собранного самостоятельно, на коленке, иногда возникает необходимость в управлении нестройной системой. В качестве одного самого яркого примера тут можно привести необходимость по отключению видеонаблюдения в то время, когда оно просто не требуется. Например, когда на объекте видеонаблюдения присутствуют люди, следить за которыми нет необходимости. Это может быть и такой сценарий — загородный дом или дача с установленной системой видеонаблюдения, видео пишется по детектору движения. Все работает? за исключением того неприятного факта, что на дачу приехало множество детей и взрослых. Которые шныряют с целью и без в течение дня, вызывают срабатывание детектора движения и жесткий диск сервера переполняется совершенно бессмысленными записями.

Очевидно, что тут нужно что-то предпринять. Самый простой способ — просто отключать видеозапись в то время, когда она не требуется. Например, в светлое время суток, с 8 утра и до 23 вечера. Вариант конечно работающий, но жутко неудобный. В ручном режиме никто такими включениями и отключениями заниматься не будет. В некоторых системах видеонаблюдения можно установить таймер, когда будет происходить запись событий в видеофайлы. Но и такой подход не лишен недостатков. Ведь будучи единожды запрограммированным, подобный таймер не будет отслеживать перемещения жильцов, которые могут уехать в жаркие страны в отпуск, могут отбыть в магазин за продуктами в полном составе. А таймер об этом не будет знать. И потенциально дом останется незащищенным.

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

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

Вариант 1. Установка на смартфон программы выполняющей, заранее определенные действия, при наступлении искомого события. Подобных программ существует множество, но суть такой программы — подать сигнал системе видеонаблюдения о том, что можно вести запись или нет. В качестве события может выступать привязка к географическим координатам, подключению к или видимость Wi-Fi сетей, присутствие в зоне действия вышек сотовой связи и тому подобное.

Этот вариант самый продуктивный и самый надежный из всех предложенных. Но он обладает и самым существенным недостатком — на смартфон необходимо устанавливать дополнительное программное обеспечение, а затем и настроить его требуемым образом. Что далеко не всегда представляется возможным.

Вариант 2. Обнаружение Bluetooth сигнала смартфона или соединение между смартфоном и системой видеонаблюдения посредством Bluetooth технологии. Вариант отчасти неплохой, ведь достаточно только связать смартфон и сервер видеонаблюдения по протоколу Bluetooth, а дальше все должно происходить само. Субъект прибывает на объект, как только он попадает в зону действия Bluetooth сети, сервер видеонаблюдения переключается из режима наблюдения, в режим ожидания. А как только субъект покидает зону обслуживания сети, видеонаблюдение включается в строй.

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

Вариант 3. Мониторинг подключения Wi-Fi сети. В этом варианте происходит постоянное отслеживание клиентов, подключенных к локальной сети посредством Wi-Fi технологии. Отслеживанием занимается сервер видеонаблюдения. Наличие Wi-Fi уже стало стандартом де-факто. Если есть локальная сеть в которой работает система видеонаблюдения, к которой подключены IP-камеры, то должна быть и точка доступа или роутер с Wi-Fi, к которым, по обыкновению, и подключаются все смартфоны хозяев.

Вариант 3 — самый интересный, ведь для мониторинга присутствия вообще ничего не требуется. Все в наличии. Единственным препятствием является то, что в бытовых сетях обычно выдаются динамические локальные IP-адреса, а нормальных инструментов для отслеживания подключения по MAC-адресу не существует.

Отслеживаем статус присутствия по устройствам, подключенным по Wi-Fi, в ПО Xeoma под Ubuntu

Итак, именно по третьему варианту и будем разворачивать систему переключения режимов работы системы видеонаблюдения. В качестве программного обеспечения используется Xeoma, работающая на сервере под управлением ОС Ubuntu x64. Для обеспечения работоспособности системы обнаружения присутствия необходимо провести несколько манипуляций. В двух словах о системе.

А. Сервер под Linux, периодически пингует некий набор IP-адресов и если адрес отвечает, то значит смартфон хозяина зарегистрировался в локальное сети.

Б. Тот же самый скрипт вызывает HTTP-переключатель на Xeoma и включает или отключает режим видеонаблюдения в зависимости от результатов пункта А.

Итак, приступим к рассмотрению системы немного подробнее:

Шаг 1. Делаем статическую привязку MAC-адресов смартфонов к конкретным IP-адресам. Данная операция производится на роутере или точке доступа, и она необходима по той причине, поскольку иначе, рассчитывать на то, что через месяц, смартфон хозяина получит тот же самый IP-адрес, нельзя. А в этом случае вся система даст сбой, ведь скрипт проверяет только конкретные IP-адреса.

Шаг 2. Изменяем модули в настройках конкретной камеры в Xeoma. Сюда добавляем в параллель два модуля — «HTTP-переключатель» и «Расписание». Видеонаблюдение будет вестись только в том случае, если хотя бы один из модулей будет пропускать сигнал. «HTTP-переключатель» будет пропускать сигнал, когда на объекте будет отсутствовать в сети Wi-Fi один или несколько смартфонов хозяев, а «Расписание» будет разрешать видеозапись по часам (ночью).

Настройка камеры в Xeoma

Настройка камеры в Xeoma

Таким образом, мы получаем удобную систему, которая будет всегда вести видеонаблюдение в ночное время, а в дневное время видеозапись будет осуществляться только когда в доме или рядом с ним отсутствуют хозяева со своими мобильными телефонами. При настройке модуля «HTTP-переключатель» стоит обратить внимание на настройку логина и пароля «пользователя», который будет осуществлять действия по включению и выключению видеонаблюдения. Лучше не оставлять их пустыми.

Настройка HTTP-переключателя в Xeoma

Настройка HTTP-переключателя в Xeoma

При настройке этого модуля, необходимо обратить внимание на URL-ы HTTP-запросов на включение и отключение переключателя. Для каждой камеры они индивидуальны. Поэтому можно управлять активностью каждой из подключенных к Xeoma камер.

Шаг 3. Устанавливаем скрипт проверки присутствия на сервере Linux. Собственно, именно тут начинается самое интересное. Вся ответственность на отслеживание присутствия ложится на связку скрипта, написанного для Bash, и планировщика CronTab. В скрипте нет ничего необычного, его текст приведен ниже, а сам файл можно скачать отсюда. Отрадно, что скрипт с лаконичным названием WiXe.sh выполняет всю работу штатными средствами Linux.

#!/bin/bash
export TERM=${TERM:-dumb}
clear
echo "WiXe: Linux Wi-Fi Smartphone detector for Xeoma"
echo "Version 1.0"
echo "Programmed by Vladislav Kravchenko (c) 2015"
echo "This software can be used by anyone freely."
echo ""
echo "Start scanning"

#Initializing variables
here=0 #Counter for masters devices

#Masters and masters devices enumeration
masters_ip[0]='192.168.0.40'
masters_na[0]="Vlad's SG S5Duos"
masters_ip[1]='192.168.0.23'
masters_na[1]="Michael's Lenovo"
masters_ip[2]='192.168.0.33'
masters_na[2]="Michael's Lenovo"
masters_ip[3]='192.168.0.47'
masters_na[3]="Irina's LG"

#Cameras and actions enumeration
xeoma_url="http://localhost:10090/"

#Camera number 1 at the Porch
cameras_on[0]="http_switcher_on?module=HttpSwitcher.3"
cameras_off[0]="http_switcher_off?module=HttpSwitcher.3"
cameras_auth[0]="-s -u admin:password"
cameras_names[0]="Porch"

#looking for the presense of the masters
for (( i=0; i<${#masters_ip[@]}; i++)) do
    echo ""
    echo ${masters_ip[${i}]} " -- " ${masters_na[${i}]}
    ping_result=`/bin/ping -c 1 ${masters_ip[${i}]}`
    if [ "`echo $ping_result | grep "ttl="`" != "" ] 
    then
        echo "On the network!"
        let "here+=1"
    else
	echo "Missing from the network!"
    fi
#    echo `ping -c 1 ${masters_ip[${i}]}`
done

#calling for action
echo ""
if [[ "$here" -eq "0" ]] 
then
    echo "Switching ON videorecording"
    for (( i=0; i<${#cameras_on[@]}; i++)) do
	echo `curl ${cameras_auth[${i}]} $xeoma_url${cameras_on[${i}]}`
    done
else
    echo "Switching OFF videorecoding"
    for (( i=0; i<${#cameras_off[@]}; i++)) do
        echo `curl ${cameras_auth[${i}]} $xeoma_url${cameras_off[${i}]}`
    done
fi

#finishing
echo ""
echo "End scanning. Found masters="$here

Наличие присутствия или отсутствия пассажиров в зоне обслуживания определяется через ответ команды ping. Для ускорения работы скрипта, особенно если отслеживается несколько субъектов, каждый из адресов пингуется только один раз. Ответ от команды ping разбирается при помощи фильтра grep. Поиск в строках ведется по наличию подстроки "ttl=". Если такая подстрока в ответе встречается, то значит пингуемый ip-адрес доступен. Если подстрока отсутствует, то устройства по исследуемому адресу отсутствует, следовательно и владельца смартфона на объекте нет.

Работу по включению или отключению «HTTP-переключателя» выполняет другая встроенная в Linux-программа — curl. Ей передается URL HTTP-запросов от Xeoma, а заодно определяется логин в связке с паролем.

Список ip-адресов для проверки, с мнемоническим описанием забивается в массивы masters_ip и masters_na, а параметры для HTTP-переключателей в массивы cameras_on, cameras_off, cameras_auth и cameras_names. Камер и индивидуальных URL для них, как и проверяемых IP-адресов, может быть несколько.

Сам скрипт желательно положить в каталог /bin, дабы при запуске из Cron не было необходимости прописывать пути к каждой из используемых программ. Не забудьте установить возможность исполнения для данного файла. Ну и наконец, необходимо добавить задачу в планировщик Cron. При прописывании имени запускаемого скрипта, необходимо явно указать путь к нему. Частоту запуска скрипта можно выбрать по своему желанию, кому-то будет достаточно запуска скрипта раз в час, а кто-то будет вызывать его раз в десять минут. В любом случае чем короче интервал, тем быстрее Xeoma будет переключать камеры из состояния наблюдения в режим ожидания и обратно.

Примененная методика настолько проста и надежна, что может применяться весьма гибко. Можно настраивать поведение каждой отдельной камеры, подключенной к Xeoma, а можно настроить и индивидуальную реакцию в зависимости от присутствующего субъекта. Например, если в доме или около него присутствуют дети, то можно отключить все камеры установленные по периметру здания. А если только взрослые, то стоит отключить внутренние камеры, а внешние отставить.

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

PS. В методике определения присутствия по зарегистрированному в сети Wi-Fi смартфону имеется несколько изъянов. Некоторые смартфоны автоматически переходят в режим сбережения энергии и отключают радиомодуль Wi-Fi. В этом случае, если смартфоном долго не пользоваться, то он «уснет», а Xeoma посчитает, что хозяин выбыл с объекта. Если требуется высокая оперативность включения или отключения видеонаблюдения, то необходимо выставлять высокую частоту запуска скрипта. В таком случае смартфоны будут периодически пинговаться и им придется отвечать на каждый запрос. Что опять же негативно скажется на продолжительности жизни аппарата от батареи. Так что везде нужно искать золотой компромисс.



Xeoma: определяем присутствие субъекта на объекте: 2 комментария

  1. AntonK

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

    Обычно в системах настраивают запись по кругу, т.е. переполнение маловероятно.
    Ну, и даже при наличии гостей-детей записи могут быть полезны - типа, чтоб выяснить, кто у кого отобрал игрушку 🙂

    1. kvv Автор записи

      Если установлена запись по кругу, то при отсутствии клиентов на объете есть риск того, что за долгое отсутствие могут начинать затираться записи которые были давно, но там что-то важное происходило 🙂 Т.е. это палка о двух концах.

Добавить комментарий