Automatic saving of photos of alarm events from surveillance cameras
Часто бывает, что жизнь и начальство ставят перед тобой задачи, решение которых не укладывается в стандартные рамки. При этом при достаточном уровне изобретательности можно придумать даже самые безумные схемы сбора и сохранения данных с систем видеонаблюдения, которые не только проработают больше года, но и покажут даже какую-никакую отказоустойчивость.
Бывают ситуации, когда при создании системы видеонаблюдения нужно обойтись без видеорегистратора с жестким диском или же наоборот надо продублировать возможность сохранения данных. Такие схемы очень выручают, даже если кто-то долбанет электрошокером в корпус видерегистратора с целью скрыть следы воровства на объекте.
И при этом пусть мы и скорее всего теряем безвозвратно записи с жесткого диска, но дублирующая схема позволяет сохранить данные где-то вдалеке от возможного физического вмешательства подозрительных лиц – что поможет в поимке злоумышленника.
Внимательный и знакомый с устройством видеорегистраторов читатель скорее всего скажет, что такая схема уже есть – это “сливание” записей по протоколу FTP ночью по расписанию. Но тот же читатель пусть вспомнит, сколько раз у него сбоила эта схема и записи просто никуда не отправлялись.
Скажем так, система “сливания” записей по FTP на видеорегистраторах не совершенна, работает через ж….пу и не дает никакой гарантии, что данные будут сохранены. Да и не все регистраторы нормально работают с FTP.
Т.е. тут не работает принцип – “настроил и забыл”. Нужно постоянно контролировать процесс перекидывания записей и разбираться с каждым неудавшейся попыткой. Это утомительно, когда таких объектов станет уже около 20-ти. А когда их становится около 100, то начинаешь задумываться о том, как это все контролировать…
Тревожные события камер
Практически на каждой IP камере видеонаблюдения есть простейший механизм срабатывания при наличии в поле зрения камеры движения. Данный механизм отправляет некое событие в центр сообщений (обычно это видеорегистратор, который делает запись данного инцидента по событию), а также это событие можно использовать в своих целях – а именно отправить фото объекта в кадре посредством почтового сообщения. Что нам и нужно.
Т.е. настройках можно указать:
- Некое базовое событие (Basic Event) появления в зоне срабатывания движущегося обьекта. Например – только зона открытия двери.
- Расписание срабатывания (Arming Schedule) согласно которого события будут регистрироваться. Например – только ночью.
- Метод оповещения (Linkage Method) – настройка, в которой нужно поставить флажок напротив пункта Email
Чтобы почта нормально отправлялась, необходимо в настройках камеры не забыть настроить правильные сетевые настройки (конкретной сети, в которой находится камера), включая шлюз и DNS серверы (дабы камера смогла отправлять что-то через Интернет).
Следующей и немаловажной настройкой камеры является настройка отправки Email сообщений самой камерой. Как это сделать видно на скриншоте, поэтому останавливаться на этом не будем.
А лучше обратим пристальное внимание на поле – Sender, куда надо вписать удобочитаемое название камеры, по которому мы будем узнавать, от какой камеры пришло уведомление. А так как камер много – то и названия указывайте понятные для себя и последующего разбора )
Если при нажатии кнопки “Тестировать” – сообщение успешно отправляется и доставляется в целевой почтовый ящик, то будем считать, что настройка со стороны камеры завершена. Перейдем к другой части – сохранение фото с камеры.
Автосохранение тревожных фото при помощи Outlook
Давайте представим, что мы вышеописанным способом настроили 50 камер на объектах и они непрерывно шлют свои тревожные фото на целевой ящик, читать этот непрерывный поток сообщений у человека возможности точно не будет.
К тому же обращаться к этим фото нужно будет только при наличии какого-то инцидента на объекте, требующего “разбора полетов”, поэтому будем придумывать, как сохранять сообщения на жестком диске компьютера, сортируя его по папкам с названиями камер и датами.
Для начала найдем свободный компьютер под эти цели, установим на него аутлук и включим возможность запуска макросов в правилах обработки почты. Для этого в реестре нужно будет добавить в этих разделах:
Outlook 2016: HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security\ Outlook 2013: HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Security\
Добавить параметр типа DWORD с именем EnableUnsafeClientMailRules со значением 1.
Если не очень понятно, то более подробно расписано тут – support.microsoft.com
Теперь аутлук готов к тому, чтобы при создании правил обработки почты у него появился параметр, позволяющий запускать макрос при получении новой почты.
Для понимания того, что нужно будет проделать, опишем процесс для одной камеры, и его с небольшими изменениями нужно будет повторить для каждой из камер на этапе настройки. Сделать это нужно будет всего 1 раз )
Собственно макрос сохранения
Итак, допустим, что на целевой почтовый ящик приходят сообщения от камеры, у которой в поле “Sender” на этапе ее настройки я написал “CAM_Kyev_1“, а следовательно, все сообщения, приходящие от этой камеры, будут содержать в теме письма что-то такое: “CAM_Kyev_1: on Camera1: Motion Detection” – что позволяет настроить сохранение конкретно от этой камеры конкретную папку на диске компьютера.
На диске компьютера я создаю структуру папок примерно такую:
После того, как папка на жестком диске готова, нужно создать макрос для обработки данного правила камеры №1. Для создания макроса будем использовать основу отсюда, так как подобная задача уже решалась и мы видоизменим ее.
При открытом окне аутлук нажимаем сочетание клавиш Alt+F11, для того, чтобы открыть редактор VBS. Нажатием правой кнопки мыши вставляем модуль, в котором будем писать код:
В теле модуля пишем следующее:
Public Sub CAM_Kyev_1(itm As Outlook.MailItem) Dim objAtt As Outlook.Attachment Dim saveFolder As String dateOfMailItem = Format(itm.CreationTime, "dd.mm.yyyy_hhnnss") saveFolder = "D:\Arhive\CAM_Kyev_1\" If Dir((saveFolder & Format(Date, "DDMMYYYY")), vbDirectory) = "" Then MkDir (saveFolder & Format(Date, "DDMMYYYY")) saveFolder = "D:\Arhive\CAM_Kyev_1\" & Format(Date, "DDMMYYYY") For Each objAtt In itm.Attachments objAtt.SaveAsFile saveFolder & "\" & dateOfMailItem & "_" & objAtt.FileName Set objAtt = Nothing Next End Sub
После чего сохраняем проект и закрываем редактор.
Создание правил
После того, как макрос готов – его можно применить в правиле обработки сообщений. Для этого, тыкаем правой кнопкой на любое сообщение от нужной нам камеры и выбираем “Создать правило”, “Дополнительно”.
На втором этапе “Что делать с сообщением” выбираем запуск скрипта и выбираем нужный нам макрос:
Также не забывайте включить опцию для всех старых сообщений, которые уже находятся в папке “Входящие”. Ну и назвать правило следует как можно короче и понятнее, дабы избежать путаницы.
Теперь все готово для того, чтобы скрипт начал автоматически сохранять данные с данной камеры.
Если все прошло удачно, скрипт нормально отрабатывает и все Ок, то чуть видоизменяем правило и добавляем полное удаление обработанных сообщений из почтового ящика, чтобы не засорять его.
Нетрудно догадаться, что данную процедуру достаточно 1 раз проделать для всех камер, чтобы потом все происходило уже полностью автоматически. И на этом реализацию данного решения можно считать завершенным.
На что следует обратить внимание
- “Мощность” компьютера должна быть пропорциональна количеству камер, с которых принимаются сообщения. Т.е. если взять слабый комп и загрузить его этой непосильной задачей – то много писем будут просто оставаться в очереди и он будет не успевать…
- К данному компьютеру следует подвести нормальный Интернет, пропускная способность которого также прямо пропорциональна количеству камер.
- Складировать фото лучше по сети на какой-то защищенный файловый сервер, для чего в скрипте достаточно правильно указать пути сохранения.
- Скрипт скорее всего несовершенен и при использовании каждый может “подпилить” его под себя.
- Поглядывайте иногда на то, как идет процесс сохранения фото, так как Outlook, как и любая другая программа любит зависать )
- Камеры помимо нужной информации часто присылают еще и текстовые файлы (*.txt), которые нам не нужны.
Для удаления ненужных текстовых файлов из папок с архивом фото тревожных событий от камер можно воспользоваться простым cmd скриптом, запускаемом по расписанию:
For /R "D:\Arhive\" %%i in (*.txt) Do ( Del /q "%%i")
Этот скрипт просто пройдется по всем папкам и удалит текстовые файлики.
В общем на этом повествование о таком нестандартном решении проблемы завершаем. Самое интересное, что данное решение было применено и даже принесло пользу, что не может не радовать )
No one has posted here yet.