Фильтрация событий

Фильтры позволяют вам определять сложные условия с связанными действиями в ZoneMinder. Примеры могут включать:

  • Отправляйте электронное письмо каждый раз, когда происходит новое событие для конкретного монитора

  • Удалите события, которые старше 10 дней

И многое другое.

Фильтр окна можно открыть, коснувшись верхнего уровня меню фильтра

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

Вот как выглядит окно фильтра

../_images/filter-filterview.png
  • Это выпадающий список, в котором вы можете выбрать заранее определенные фильтры. Вы заметите, что ZoneMinder поставляется с фильтром PurgeWhenFull, который настроен на удаление событий, если вы достигнете 95% дискового пространства.

  • B: Если вы создаете новый фильтр, вы можете ввести здесь имя для своего фильтра

  • C: Здесь вы указываете условия, которые должны соответствовать перед выполнением фильтра. Вы используете кнопки «+» и «-», чтобы добавить/удалить условия

  • D: Это позволяет вам выполнять операции сортировки и ограничения на выходных данных перед тем, как предпринять какие-либо действия

  • E: Здесь вы указываете, что должно произойти, когда условия совпадают:

    • Заархивировать все матчи: установить поле архива в 1 в базе данных для событий, которые были заданы. Представьте себе «архивирование» как группировку их под специальной категорией - вы можете просматривать архивные события позже и также убедитесь, что архивные события не удаляются, например

    План

    Для фильтра «создание видео» добавьте больше деталей о том, как он работает, любые зависимости и т.д.

    • Обновить используемое дисковое пространство: вычисляет, сколько дискового пространства в настоящее время используется событием, и обновляет запись в базе данных.

    • Создать видео для всех матчей: создать видеофайл со всеми событиями, которые соответствуют

    • Создать видео для всех матчей: будет использоваться ffmpeg для создания видеофайла (mp4) из всех сохраненных jpg, если используется хранилище jpeg.
      • Выполнить команду для всех совпадений: позволяет выполнить любую произвольную команду для совпавших событий. Вы можете использовать замещающие маркеры как последующие аргументы к команде, последний аргумент будет абсолютным путем к событию, предшествуемым замещающими аргументами. например: /usr/bin/script.sh %MN% будет выполнено как /usr/bin/script.sh MonitorName /path/to/event. Пожалуйста, обратите внимание, что URL могут содержать символы, такие как & , которые требуют экранирования. Поэтому вам может потребоваться заключить их в кавычки, например /usr/bin/scrupt.sh «%MN%».

      • Удалить все совпадения: удаляет все совпавшие события.

      • Укажите детали всех матчей: отправьте электронное письмо по указанному адресу с подробностями о мероприятии.

    • Скопировать все совпадения: копирует файлы событий в другое место, указанное в выпадающем списке «Копировать в». Другое место должно быть настроено в разделе «Хранилище» в настройках.

    • Детали сообщений о всех матчах: Использует электронную почту для отправки SMS-сообщения для каждого матча.

    • Переместить все совпадения: копирует файлы событий в другое место, указанное в раскрывающемся списке «В другую». Другое место должно быть настроено в разделе «Хранилище» под опциями. Файлы будут удалены из исходного места.

    • Запустить фильтр в фоновом режиме: Когда выбрано, Zoneminder будет регулярно проверять наличие фильтра. Например, если вы хотите получать уведомления о новых событиях по электронной почте, убедитесь, что это выбрано. Фильтры, которые настроены на работу в фоновом режиме, имеют звездочку рядом с ними.

    • Запустить фильтр параллельно: позволяет этому фильтру запускаться в своем собственном потоке, тем самым позволяя другим фильтрам запускаться параллельно.

  • F: Используйте „Найти совпадения“, чтобы „проверить“ ваши условия совпадения. Это просто найдет и покажет вам, какие фильтры соответствуют условиям. Используйте „Выполнить“, чтобы фактически выполнить действие после совпадения ваших условий. Используйте „Сохранить“, чтобы сохранить фильтр для будущего использования и „Сброс“, чтобы очистить настройки

Примечание

Более подробная информация о фильтрах условий:

Есть несколько различных элементов для события, которые вы можете фильтровать, некоторые из которых требуют дальнейшего объяснения. Вот они: * „Дата/Время“, которое должно оцениваться как дата и время вместе, * „Дата“ и „Время“, которые являются вариантами, которые могут содержать только соответствующие подмножества этого, * „День недели“, который, как и ожидалось, является днем недели.

Все предыдущие элементы принимают очень гибкий свободный формат дат и времени, основанный на функции strtotime на PHP (https://www.php.net/manual/en/function.strtotime.php). Это позволяет вводить значения, такие как „прошлая среда“ и т. д. Мы рекомендуем ознакомиться с этой функцией, чтобы увидеть, какие допустимые форматы существуют. Однако автоматические фильтры выполняются на Perl, и поэтому они обрабатываются пакетом Date::Manip. Не все форматы даты доступны в обоих, поэтому, если вы сохраняете свой фильтр для выполнения автоматического удаления или других задач, убедитесь, что формат даты и времени, который вы используете, совместим с обоими методами. Безопаснее всего использовать формат типа „-3 дня“ или аналогичный с легко читаемыми числами и единицами измерения на английском языке.

Другие вещи, которые вы можете фильтровать, в основном понятны, за исключением, возможно, «Архивированный», который вы можете использовать для включения или исключения архивных событий. В общем, вы, вероятно, будете делать большинство фильтрации по неархивированным событиям. Также есть два элемента, Дисковые блоки и Дисковый процент, которые не прямо связаны с самими событиями, но с дисковым разделом, на котором хранятся события. Они позволяют указать количество дискового использования либо в блоках, либо в процентах, как возвращаемое командой «df». Они относятся к количеству дискового пространства, используемого, а не к количеству свободного места. После того, как вы установили фильтр, нажатие «отправить» отфильтрует события в соответствии с вашими требованиями. Поскольку дисковые элементы не являются напрямую связанными с событиями, если вы создадите фильтр и включите термин «DiskPercent > 95», то если текущее использование диска превышает это значение при отправке фильтра, все события будут отображаться, а если оно меньше, то ни одного не будет. Таким образом, термины, связанные с диском, будут в основном использоваться для автоматических фильтров (см. ниже). Если вы создали фильтр, который хотите сохранить, вы можете назвать его и сохранить, щелкнув «Сохранить».

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

  • %EI% - идентификатор события

  • %EID% - идентификатор события

  • %RU% Название мероприятия

  • %EC% Причина события

  • %ED% - описание события

  • %ET% Время события

  • %EL% Длина события

  • %EF% Количество кадров в событии

  • %EFA% - Количество тревожных кадров в событии

  • %EST% Итоговый счет мероприятия

  • %ESA% Средний балл мероприятия

  • %ESM% Максимальный балл события

  • %EP% Путь к событию

  • %EPS% - Путь к потоку событий

  • %EPF1% - Путь к видовому окну для первого изображения события тревоги

  • %EPFM% - Путь к видовому окну для изображения первого события с наивысшим рейтингом

  • %EPFMOD% - Путь к изображению, содержащему объект обнаружения, в режиме просмотра кадра

  • %EPFMODG% - Путь к изображению, содержащему анимированную версию объекта обнаружения, в режиме просмотра кадров

  • %EPI% - Путь к изображениям событий

  • %EPI1% - Путь к первому изображению события тревоги, подходящий для использования в тегах img

  • %EPIM% - Путь к (первому) изображению события с наивысшим рейтингом, подходящему для использования в тегах img

  • %EPIMOD% Путь к изображению, содержащему объект обнаружения, подходящий для использования в тегах img

  • %EPIMODG% - Путь к изображению, содержащему анимированную версию объекта обнаружения, подходящую для использования в тегах img

  • %EPISNAP% - путь к изображению снимка, который должен быть кадром с наибольшим движением

  • %EI1% Прикрепите первое изображение события тревоги

  • %EI1A% Прикрепите первый анализ изображения события тревоги

  • %EIM% Прикрепите (первый) событие изображение с самым высоким рейтингом

  • %EIMA% Прикрепите (первый) анализ события изображения с наивысшим рейтингом

  • %EIMOD% Прикрепите изображение, содержащее обнаружение объекта

  • %EIMODG% Прикрепите изображение, содержащее анимированную версию объекта обнаружения

  • %EISNAP% Прикрепите изображение снимка экрана, которое должно быть кадром с наибольшим движением

  • %EV% - Прикрепите видео в формате MPEG

  • %EVM% Прикрепите видео в формате mpeg-видео к телефону

  • %MID% Монитор Id

  • %MN% Название монитора

  • %MET% Общее количество событий для монитора

  • %MEH% - Количество событий для монитора за последнюю час

  • %MED% Количество событий для монитора за последний день

  • %MEW% - Количество событий для монитора за последнюю неделю

  • %MEM% Количество событий для монитора за последний месяц

  • %MEA% Количество архивных событий для монитора

  • %MP% - Путь к окну монитора

  • %MPS% - Путь к потоку монитора

  • %MPI% - Путь к изображению недавнего мониторинга

  • %FID% - идентификатор текущего фильтра, который соответствует

  • %FN% Имя текущего фильтра, который совпал

  • %FP% - путь к текущему фильтру, который совпал

  • %ZP% - Путь к вашей консоли ZoneMinder

Наконец вы также можете указать скрипт, который выполняется при каждом совпадении события. Этот скрипт должен быть читаемым и исполняемым пользователем вашего веб-сервера. Он будет выполняться один раз на каждое событие, и относительный путь к директории, содержащей событие, о котором идет речь. Обычно это будет иметь форму «<Имя монитора>/<Идентификатор события>», поэтому из этого пути вы можете извлечь как имя монитора, так и идентификатор события и выполнить любое действие, которое вы пожелаете. Обратите внимание, что произвольные команды не разрешены в фильтре, для безопасности в нем может находиться только полный путь к исполняемому файлу. Что именно находится внутри, полностью зависит от вас.

Фильтрация - это мощный механизм, который вы можете использовать для устранения событий, соответствующих определенному шаблону. Однако в большинстве случаев изменение настроек зоны лучше всего подходит для решения этой проблемы. Там, где он действительно проявляет себя, это обычно при применении фильтров по времени, так что, например, события, происходящие в рабочие дни или в определенное время дня, выделяются, загружаются или удаляются. Кроме того, использование терминов, связанных с диском, в ваших фильтрах означает, что вы можете автоматически создавать фильтры, которые удаляют самые старые события, когда диск заполняется. Однако имейте в виду, что если вы используете эту стратегию, вам следует ограничить количество возвращаемых результатов до количества событий, которое вы хотите удалить за один проход, пока дисковое пространство не достигнет приемлемого уровня. Если вы этого не сделаете, первый проход, когда дисковое пространство высоко, совпадет и затем удалит все события, за исключением тех случаев, когда вы использовали другие критерии внутри ограничений. ZoneMinder поставляется с предустановленным фильтром уже установленным, хотя и отключенным. Фильтр «Очистка при полном диске» может быть использован для удаления самых старых событий, когда диск начинает заполняться. Чтобы использовать его, вы должны выбрать и загрузить его в интерфейсе фильтра, изменить его в соответствии с вашими требованиями и сохранить его, убедившись, что вы выбрали опцию «Удалить все совпадения». Это будет работать в фоновом режиме и обеспечит, что ваш диск не заполнится событиями.

Сохранение фильтров

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

Как фильтры работают на самом деле

Полезно знать, как работают фильтры на самом деле за кулисами ZoneMinder, если вы обнаружите, что ваш фильтр не работает так, как предполагалось:

  • Каждый фильтр, установленный на выполнение в фоновом режиме, будет выполняться в собственном процессе под названием zmfilter.pl, который извлекает фильтры из таблицы базы данных «Фильтры»

  • zmfilter.pl запускается каждые FILTER_EXECUTE_INTERVAL секунд (по умолчанию это 20 секунд, это можно изменить в меню «Опции->Система»)

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

  • Также zmfilter.pl перезагружает фильтр каждые FILTER_RELOAD_DELAY секунд (по умолчанию это 300 секунд/5 минут, которые можно изменить в меню «Настройки->Система»)

  • В предыдущих версиях ZoneMinder изменения фильтров не вступали в силу немедленно, но теперь веб-интерфейс будет начинать/останавливать/перезапускать фильтры при редактировании фильтра.

Предметы, связанные с датами в строках

Релятивные элементы изменяют дату (или текущую дату, если таковая отсутствует). Эффекты релятивных элементов накапливаются. Вот несколько примеров:

* 1 year
* 1 year ago
* 3 years
* 2 days

Единица времени смещения может быть выбрана с помощью строки ‘год’ или ‘месяц’ для перемещения по целым годам или месяцам. Это нечеткие единицы, поскольку годы и месяцы не имеют одинаковой продолжительности. Более точные единицы - это ‘неделя’, которая стоит 14 дней, ‘неделя’, которая стоит 7 дней, ‘день’, который стоит 24 часа, ‘час’, который стоит 60 минут, ‘минута’ или ‘мин’, которая стоит 60 секунд, и ‘секунда’ или ‘сек’, которая стоит одну секунду. Суффикс ‘s’ на этих единицах принимается и игнорируется.

Единица времени может быть предварительно обозначена множителем, который представляется в виде опционально подписанного числа. Неотрицательные числа принимаются как положительно подписанные. Отсутствие числа вообще эквивалентно использованию множителя со значением 1. После относительного элемента следует строка «назад», что эквивалентно предшествованию единицы множителем со значением -1.

Строка «завтра» стоит один день в будущем (эквивалентно «день»), строка «вчера» стоит один день в прошлом (эквивалентно «день назад»).

Строки «сейчас» или «сегодня» являются относительными элементами, соответствующими нулевому смещению времени, эти строки происходят из факта, что нулевое смещение времени представляет текущее время, если оно не изменяется предыдущими элементами. Они могут использоваться для подчеркивания других элементов, например, в «12:00 сегодня». Строка «это» также имеет смысл нулевого смещения времени, но предпочтительна в строках даты, таких как «это четверг».

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

Затухание в единицах может вызвать проблемы с относительными элементами. Например, «2003-07-31 -1 месяц» может оцениваться как 2003-07-01, потому что 2003-06-31 является недопустимой датой. Чтобы определить предыдущий месяц более надежно, вы можете запросить месяц до 15-го числа текущего месяца. Например:

$ date -R

Thu, 31 Jul 2003 13:02:39 -0700

$ date --date='-1 month' +'Last month was %B?'

Last month was July?

$ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'

Last month was June!

Как это относится к фильтрам ZoneMinder, вы можете захотеть поискать события за определенный период времени или, например, создать фильтр очистки, который удаляет события старше 30 дней. Для последнего вам потребуется как минимум две строки в вашем фильтре. Первая строка должна быть:

[<Статус архива> <равно> <Только разархивировано>]

как вы не хотите удалять свои архивные события.

Ваша вторая строка для поиска событий старше 30 дней будет:

[и <Дата><менее чем> -30 дней]

Вы используете «меньше чем» для указания того, что вы хотите сопоставить события до указанной даты, и вы указываете «-30 дней», чтобы указать дату за 30 дней до времени выполнения фильтра. Конечно, вы также можете использовать «30 дней назад» (?)

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

Предупреждение о связанных элементах

Одно из того, что следует помнить, если вы указываете относительные даты, такие как «сейчас» или «1 минута назад», и т.д., они преобразуются в конкретную дату и время процессом фильтрации Zoneminder (zmfilter.pl) при загрузке фильтров. Они НЕ пересчитываются каждый раз, когда запускается фильтр. Фильтры перезагружаются в зависимости от значения, указанного в переменной FILTER_RELOAD_DELAY в веб-консоли Zoneminder->Настройки->Система

Это может вызвать путаницу в следующих случаях, например: Предположим, пользователь указывает, что он хочет быть проинформирован о событиях по электронной почте в момент возникновения события «DateTime», если оно «менее чем» «сейчас» в качестве фильтра. Когда фильтр впервые загружается с помощью zmfilter.pl, это будет означать «Найти события, где Начало времени < » + localtime(), где локальное время - это время, которое определяется при загрузке этого фильтра. Пока фильтр не будет перезагружен через FILTER_RELOAD_DELAY секунд (обычно установлено на 300 секунд, или 5 минут), это время не пересчитывается, поэтому фильтр не будет обрабатывать новые события, которые происходят после этого рассчитанной даты до другого 5-минутного периода, что, вероятно, не является тем, что вы хотите.

Советы по устранению неполадок

Если ваш фильтр не работает, вот несколько полезных советов:

  • Посмотрите информацию и журналы отладки в ZoneMinder

  • Выполните команду sudo zmfilter.pl -f <yourfiltername> из командной строки и посмотрите вывод журнала

  • Проверьте, сколько времени занимает ваше действие - zmfilter.pl будет ждать завершения действия, прежде чем проверить снова

  • Если вы используете относительные временные выражения, такие как „сейчас“ или „1 год назад“, и т.д., помните, что zmfilter преобразует это относительное время в абсолютную дату только при перезагрузке фильтров, что определяется длительностью FILTER_RELOAD_DELAY. Таким образом, например, если вы задаетесь вопросом, почему ваши события не обнаруживаются до интервалов в 5 минут, и вы использовали такое относительное условие, вот почему

  • Если вы видите, что новый фильтр работает отлично, когда вы тестируете его через Веб-консоль (с помощью кнопки «Отправить» или «Выполнить»), но он не работает, когда он находится в фоновом режиме, возможно, вы столкнулись с проблемой совместимости между тем, как Perl и PHP преобразуют свободный текст в даты/время. Когда вы тестируете его с помощью кнопки «Отправить» или «Выполнить», вы вызываете функцию PHP для преобразования времени. Когда фильтр работает в фоновом режиме, zmfilter.pl вызывает эквивалентную функцию на Perl. В некоторых случаях, в зависимости от версии Perl и PHP, результаты могут различаться. Если вы сталкиваетесь с этой ситуацией, лучшее решение - запустить «sudo zmfilter.pl -f <вашеимяфильтра>» из терминала, чтобы убедиться, что фильтр действительно работает на Perl.