Итриум1

Page tree

Итриум2

Skip to end of metadata
Go to start of metadata

Данный раздел предназначен для настройки заданий автоматизации и доступен только для узлов Платформа НЕЙРОСС

Общие сведения

Платформа НЕЙРОСС обеспечивает автоматическое выполнение заданий автоматизации по факту возникновения какого-либо внутреннего или внешнего события или по фиксированному расписанию. Это может быть информирование ответственных лиц (по электронной почте или в канал Telegram), автоматические действия в системе (в том числе, — взаимодействие с «внешней» системой). Возможны сложные условия запуска задания автоматизации (выполнение нескольких условий, накопление определённого количества сигналов, либо наоборот — отсутствие сигналов). Предусмотрена возможность тестирования выполнения задания без ожидания выполнения входного условия. 

Задание автоматизации — это совокупность действия с сигналом, по которому это действие может выполняться. Есть набор предустановленных типов сигналов и типов действий. Задание автоматизации может быть сформировано по любому сигналу или набору сигналов — событию в Платформе НЕЙРОСС или событию сети НЕЙРОСС, которое проходит входной фильтр событий.

Типы сигналов

Условием для запуска задания автоматизации может являться:

  • Временное расписание
    В качестве сигнала для запуска задания автоматизации может использоваться факт наступления времени по расписанию; расписание может формироваться с произвольной периодичностью: раз в минуту/час/день/неделю/год, в определенное время каждый день/неделю/месяц/год, с заданной периодичностью в определенный интервал времени и так далее.

  • Событие от какого-либо узла сети, удовлетворяющее условию фильтра
    Все узлы сети НЕЙРОСС обмениваются событиями друг с другом, поэтому в качестве входного события для задания автоматизации может выступать события от контроллеров БОРЕЙ или ЯРС, серверов ПАК Интеграция, ITRIUM, IP-камер и других узлов сети.

  • Событие Платформы НЕЙРОСС
    Любое событие, регистрируемое в виде записи Системного журнала (системные события, события авторизации, ошибки записи, действия операторов, сообщения о бездействии операторов и многое другое) может являться сигналом для запуска заданий автоматизации. 

  • Группа сигналов
    Последовательность единичных и множественных событий. Запуск задания может осуществляться при накоплении определённого количества событий, либо по причине отсутствия событий, а также при выполнения целой последовательности условий.
  • HTTP-запрос
    Для обеспечения функций интеграции с «внешними» системами предусмотрен запуск заданий автоматизации по определённому HTTP-запросу; код запроса предоставляется.

Типы действий

При выполнении условия фильтра может быть выполнено:

  • Управляющая команда или набор команд
    Наиболее популярным типом действия в задаче автоматизации является выполнение команд управления над элементами системы; из списка функциональных элементов формируется набор элементов, каждому элементу из набора задаётся команда. которая должна быть выполнена по факту получения сигнала. 
    Простым примером выполнения управляющей задачи автоматизации по расписанию является постановка объекта на охрану по факту окончания рабочего дня, пример задачи по событию — блокировка точек доступа по тревоге в разделе сигнализации, поворот (смена препозиции) камеры. В случае необходимости использования сложных алгоритмов анализа как входных условий, так и последовательности выполняемых действий, предоставляется механизм Scala-скриптовой логики.

  • Email-cообщение/отчёт или Telegram-уведомление
    Еще одним популярным типом действия является автоматическое формирование и отправка сообщений или отчетов с получением по электронной почте или в виде Telegram-уведомления.
    Для обеспечения возможности автоматического формирования отчётов предусмотрен механизм динамического формирования временного диапазона. Отчёт формируется на базе предварительно подготовленного набора параметров и за интервал времени, рассчитываемый относительно текущего времени: за текущую неделю/месяц/год (с 00:00 начала периода); за последние несколько часов, дней и проч. (со сдвигом относительно текущего времени).
    Email-отчёт или Telegram-уведомление может быть дополнено кадрами видеоархива, если для источника события есть «связанные» камеры и но ним есть архив за время фиксации события: по каждой «связанной» камере отправляется не более одного кадра. 

    При необходимости записи видеоархива по расписанию или по событиям, создаются задачи на запись. Дополнительная информация представлена в разделе Настройка задач на запись.

  • HTTP-запрос
    Для интеграции с «внешними» системами предусмотрена передача HTTP-запроса. Поддерживаются методы GET, POST, PUT, DELETE.

  • Произвольный скрипт
    Для реализации сложных алгоритмов с анализом входных условий предусмотрена возможность выполнения произвольного Scala-скрипта.

Окно раздела

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

    Цвет иконкиСтатус заданияКомментарий
    ЗелёныйАктивноЗадание успешно прошло проверку при запуске (инициализацию), выполняется. в ходе выполнения ошибок не возникало.
    ОранжевыйАктивно, в ходе выполнения возникали ошибкиЗадание успешно прошло проверку при запуске (инициализацию), выполняется, в ходе выполнения возникали ошибки. Данные по ошибкам можно просмотреть в системном журнале, либо на вкладке Диагностика. Дана ссылка на описание последней выявленной ошибки.
    КрасныйОшибка инициализацииНа этапе первичной проверки (инициализации) задания возникли ошибки: неверно заданы параметры задания. Задание не выполняется.
    СерыйОтключеноЗадание не выполняется, остановлено пользователем вручную.

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

  2. Общая информация о задании: перечень параметров приведён в таблице ниже:

    ПараметрЗначениеКомментарий
    НазваниеТекстовое полеНаименование задания; если задано, оно указывается в списке заданий [1].
    Статус
    • активно (включено)
    • отключено
    Текущий статус задания: ведётся ли отслеживание условий выполнения задания для его запуска или нет.
    Успешно обработанных сигналовЧисло успешно обработанных сигналов (выполненных действий)Ведётся статистика выполнения задания (учёт количества сигналов, приведших к срабатыванию задания автоматизации). Сигнал является успешно обработанным, если действие, заданное в задании, выполнено успешно, не выявлено ошибок. Указывается общее количество успешно обработанных сигналов и время выполнения последнего. Для сброса счётчика нажмите на кнопку Очистить статистику.
    Сигналов, обработанных с ошибкойЧисло сигналов, действие по которым не удалось успешно выполнить

    Ведётся статистика выполнения задания (учёт количества сигналов, приведших к срабатыванию задания автоматизации). Сигнал является обработанным с ошибкой, если выполнение действия, заданного в задании, привело к возникновению ошибки. Указывается общее количество таких сигналов и время возникновения последней ошибки. Описание всех ошибок можно просмотреть в Системном журнале. Дана ссылка на описание последней найденной ошибки.

  3. Параметры сигнала: предустановлено четыре типа сигнала: по расписанию, по событию, по HTTP-запросу, по системному действию (отмеченному записью в Системном журнале);
  4. Параметры действия: предустановлено семь типов действий: команда управления, отправка письма на email, отправка отчёта на email, Telegram-уведомление, произвольный скрипт, HTTP-запрос, логирование.
    Выполнить тест: команда запускает задание на выполнение немедленно, вне зависимости от указанного расписания или наличия события; используется для тестирования правильности настройки параметров (не учитывается в статистике выполнения задания). В качестве альтернативы для целей тестирования можно использовать эмуляцию входного http-запроса, при этом количество выполненных заданий увеличивается на единицу.
  5. Диагностика: на вкладке Диагностика вы можете в режиме «живого» журнала отследить результат выполнения всех активных заданий автоматизации.

Управление заданиями автоматизации

Чтобы создать задание автоматизации:

  1. В списке заданий [1] нажмите на кнопку Добавить новое задание .
  2. В блоке Общая информация [2] в поле Название укажите наименование нового задания, если требуется. Оно будет отображаться в списке заданий. Если название не задано, то в списке будет отображаться номера задания, заданный тип сигнала и тип действия.
  3. В блоке Параметры сигнала [3] выберите из раскрывающегося списка требуемый тип сигнала и задайте дополнительные параметры:
    1. Если задание требуется выполнять в определённое время или с определённой периодичностью вне зависимости от событий в системе, в поле Тип сигнала выберите По расписанию, настройте расписание запуска задания;
    2. Если задание требуется выполнять по какому-либо событию от какого-либо источника событий в системе, в поле Тип сигнала выберите По событию и настройте фильтр событий;

    3. Если задание следует запускать по произвольному событию, регистрируемому в Системном журнале Платформы НЕЙРОСС, в поле Тип сигнала выберите По системному действию и задайте параметры записи;
    4. Если задание следует запускать при накоплении определённого количества событий, либо по причине отсутствия событий, а также при выполнения целой последовательности условий, в поле Тип сигнала выберите Группа сигналов, настройте параметры группы.
    5. Если задание следует запускать по команде из внешней системы, в поле Тип сигнала выберите По HTTP-запросу, скопируйте предложенную строку и сформируйте http-запрос;
  4. В блоке Параметры действия [4] выберите из раскрывающегося списка требуемый тип действия и задайте дополнительные параметры:
    1. Команда управления,
    2. Отправка письма на email,
    3. Отправка отчёта на email,
    4. Telegram-уведомление,
    5. Произвольный скрипт,
    6. HTTP-запрос.
  5. Нажмите на кнопку Сохранить задание.
  6. При необходимости проверки действия задания, нажмите выполнить тест.

    ВНИМАНИЕ

    Команда выполнить тест запускает на выполнение действия, заданные в задании. В зависимости от параметров задания, будет произведена попытка выполнения команд управления, либо отправлено письмо/Telegram-уведомление. Если задание создано для запуска по событию и в шаблоне письма/уведомления заданы переменные, относящиеся к источнику события, то в тестовом сообщении данные поля будут пустыми. 

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

Чтобы приостановить выполнения задания, нажмите на кнопку Выключить. Для возобновления — нажмите на кнопку Включить.

Чтобы удалить задание, наведите указатель мыши на имя задания в списке заданий [1] и нажмите на кнопку  Удалить задание, расположенную в строке задания.

Чтобы создать новое задание на основе имеющегося, наведите указатель мыши на имя задания в списке заданий [1] и нажмите на кнопку  Копировать задание, расположенную в строке задания. повторите шаги пп.2-6 инструкции выше.

Типы сигналов

Расписание заданий

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

  1. В блоке Параметры сигнала [3] в поле Тип сигнала выберите По расписанию, настройте расписание запуска задания.


 Раскрыть | Подробнее о формате расписания

В каждой из позиций может быть задано:  

  • число или список чисел, разделённых запятыми — фиксированное значение; диапазон допустимых значений: минута (0—59), час (0—23), день месяца (1—31), месяц (1—12), день недели (1—7, 1 — воскресение); 
  • два числа, разделённых дефисом, для указания интервал значений с..по;
  • символ * — произвольное значение (каждую минуту, каждый день и проч.);
  • два числа, разделенных символом косая черта /, М/N — шаг выполнения: выполнять через каждые N часов / минут начиная с M .

Примеры возможных расписаний (в качестве разделителей используются пробелы):

  • * * * * * — каждую минуту,
  • 0 12 * 1,2 * — каждый день в 12 часов дня в январе и феврале,
  • */30 * * * 2-6 — каждые 30 минут по будням,
  • 0 8-18/2 * * 2-6 — каждые 2 часа с 08:00 по 18:59 по будням,
  • 0 0 L * * — в 00:00 последнего дня месяца,
  • 0 0 L-5 * * — в 00:00 за 5 дней до последнего дня месяца,
  • 0 0 LW * * — в 00:00 последнего буднего дня месяца (30 17 LW * * — в 17:30 последнего буднего дня месяца).
  • 0 0 * * 5#3 — в 00:00 в третий четверг месяца,
  • 0-59/2 * * * * — по чётным минутам,
  • 5 21 * * * — ежедневно в 21:05,
  • 0 20 * * 5  в 20:00, только по пятницам,
  • 59 23 * 4-6 * — В 23:59 ежедневно во втором квартале.

Поле Расписание имеет подсказку, которая отображается при наведении на иконку . Чтобы выбрать одно из типовых расписаний и впоследствии отредактировать, достаточно щёлкнуть в строке левой клавишей мыши.

Фильтр событий

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

  1. В блоке Параметры сигнала [3] в поле Тип сигнала выберите По событию.
  2. В поле Фильтр по событиям выберите из раскрывающегося списка созданный ранее фильтр событий или нажмите [настроить фильтры] для перехода в редактор фильтров. Инструкция по настройке фильтров приведена в разделе Фильтры

Запись в журнале событий

Фильтр событий предоставляет широкий функционал для отбора событий от какого-либо узла для запуска задания автоматизации, он позволяет «поймать» извещения, посылаемые узлом-источником события. Однако, наряду с событиями от узлов сети НЕЙРОСС, Платформа НЕЙРОСС регистрирует в системном журнале действия администраторов и операторов АРМ НЕЙРОСС, системные ошибки, остановки записи медиаданных, события контроля операторов и многое другое.

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

  1. В блоке Параметры сигнала [3] в поле Тип сигнала выберите По системному действию и задайте параметры записи.


 Раскрыть | Дополнительные сведения и порядок настройки

Выполните следующие шаги:

  1. Просмотрите системный журнал и выберите записи, при появлении которых следует запускать задание автоматизации. Определите, по каким параметрам нужно отделить нужный тип записей. 
  2. При необходимости отбора по тексту сообщения в поле Название действия введите повторяющийся блок текста из записи Системного журнала, например «поиск видеоархива» для отбора сообщений вида «Оператор выполнил поиск видеоархива с медиаисточника «‎Axis XX55» за время [15.07.2021 16:41:33, 16.07.2021 16:41:33]» или «Истекло время ожидания» для отбора сообщений контроля реакции операторов. 

    Поиск регистрозависимый, прописные и строчные буквы разделяются! Введите идентичный блок текста.

  3. В поле Включает метки введите или выберите из раскрывающегося списка одну или несколько меток сообщения, если требуется выполнять отбор по меткам. Например, для поиска сообщений об отсутствии реакции операторов АРМ НЕЙРОСС Центр на тревогу в ленте событий, задайте набор меток Тревога, АРМ для отбора сообщений контроля реакции операторов. 
  4. В поле Пользователь выберите из раскрывающегося списка ФИО (при его отсутствии, логин) пользователя, если нужно отобрать сообщения о действии/бездействии конкретного пользователя системы. Например, для отбора сообщений контроля реакции конкретного оператора, выберите его данные в раскрывающемся списке. 

Группа сигналов

Часто возникает необходимость выполнять какие-либо действия не по единичному событию, а при выполнении определённого набора условий и в определённой последовательности. Например, можно отслеживать ложные сработки охранных датчиков, массовые потери  связи, последовательные отказы доступа. Бывает необходимо отследить отсутствие событий, — например, отсутствие события доступа (не выход на работу сотрудника) в определённое время или после снятия объекта с охраны.

  1. В блоке Параметры сигнала [3] в поле Тип сигнала выберите Группа сигналов.
  2. Нажмите на кнопку Добавить этап.


 Раскрыть | Дополнительные сведения и порядок настройки

Выполните следующие шаги:

  1. Просмотрите системный журнал и выберите записи, при появлении которых следует запускать задание автоматизации. Определите, по каким параметрам нужно отделить нужный тип записей. 
  2. При необходимости отбора по тексту сообщения в поле Название действия введите повторяющийся блок текста из записи Системного журнала, например «поиск видеоархива» для отбора сообщений вида «Оператор выполнил поиск видеоархива с медиаисточника «‎Axis XX55» за время [15.07.2021 16:41:33, 16.07.2021 16:41:33]» или «Истекло время ожидания» для отбора сообщений контроля реакции операторов. 

    Поиск регистрозависимый, прописные и строчные буквы разделяются! Введите идентичный блок текста.

  3. В поле Включает метки введите или выберите из раскрывающегося списка одну или несколько меток сообщения, если требуется выполнять отбор по меткам. Например, для поиска сообщений об отсутствии реакции операторов АРМ НЕЙРОСС Центр на тревогу в ленте событий, задайте набор меток Тревога, АРМ для отбора сообщений контроля реакции операторов. 
  4. В поле Пользователь выберите из раскрывающегося списка ФИО (при его отсутствии, логин) пользователя, если нужно отобрать сообщения о действии/бездействии конкретного пользователя системы. Например, для отбора сообщений контроля реакции конкретного оператора, выберите его данные в раскрывающемся списке. 

Входной HTTP-запрос

В целях интеграции «внешних» систем реализован функционал запуска задания по получению HTTP-запроса. Любое задание автоматизации может выполняться по факту получения авторизованного post-запроса вида:

 {{baseUrl}}/api/v1/automation/signal/:token

Где:

  • {{baseUrl}} — IP-адрес или доменное имя сервера, например http:\\10.1.31.181
  • token — ключ запроса вида 52a399c9-e844-4c3a-a90b-0c7c0bd78276, формируется для каждого события независимо и предоставляется в поле Токен;

ПОДСКАЗКА

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

Типы действий

Выполнение команд 

Наиболее популярным типом действия в задаче автоматизации является выполнение команд управления над элементами системы. При выборе в качестве параметра действия команды управления, вам потребуется:

  1. Сформировать список элементов, которым будут отправляться управляющие команды в процессе выполнения задания.
  2. Задать команду управления для каждого выбранного элемента. Список доступных команд формируется на основе типа элемента. Для ITRIUM/ПАК Интеграция, доступ элементам и командам управления ими задается из программы «Администратор системы» (см. раздел Представление элементов ITRIUM / ПАК Интеграция в НЕЙРОСС).

 Раскрыть | Дополнительные сведения и порядок настройки

Выполните следующие шаги:

  1. В поле Элементы щелкните добавить. Отобразится дерево элементов.
  2. Установите флаг напротив требуемых элементов. Нажмите на кнопку Добавить.

    Разделы охранной сигнализации являются общим ресурсом, загружаются во все узлы сети, но в дереве являются дочерними элементами текущего узла Платформа НЕЙРОСС (узла, с которого выполнен вход в интерфейс).

  3. Для каждого из выбранных на предыдущем этапе элементов, выберите из раскрывающегося списка команду управления.
  4. Нажмите на кнопку Сохранить задание.
  5. При необходимости и организационной возможности выполнения теста, нажмите выполнить тест в заголовке блока Параметры действия.

Отправка письма на email

Платформа НЕЙРОСС использует задачи автоматизации для информирования ответственных лиц о каких-либо событиях в системе.

Для отправки писем настройте локальный SMTP-сервер и укажите параметры почтового ящика в разделе Дополнительные настройки.

При выборе в качестве параметра действия «Отправка письма на email», вам потребуется:

  1. Задать заголовок письма.
  2. Сформулировать текст письма.
  3. Ввести email-адрес получателя сообщения.
  4. При необходимости, включить отправку во вложении к письму кадров со «связанных» камер видеонаблюдения.


 Раскрыть | Дополнительные сведения и порядок настройки

Функция отправки писем наиболее востребования для информирования о тревожном событии. В этом случае удобно в заголовке и/или тексте письма включить информацию о событии:

  • ${event.headline} — заголовок события (отражает тип события)
  • ${event.description} — описание события
  • ${event.timestamp} — время отправки уведомления о событии от узла-источника (обычно совпадает с временем возникновения события) (UNIX timestamp)
  • ${event.registered} — время регистрации события (UNIX timestamp)
  • ${event.data.EventTags} — метки события
  • ${element.name} — название элемента-источника события

Если событие связано с предъявлением карты:

  • ${pass.uuid} — идентификатор пропуска
  • ${pass.facility} — код предприятия
  • ${pass.card} — номер карты
  • ${pass.pincode} — ПИН
  • ${pass.duress_pincode} — ПИН прохода под принуждением
  • ${pass.type} — тип пропуска
  • ${pass.state} — состояние пропуска
  • ${pass.activation_date} — время начала действия пропуска (UNIX Timestamp)
  • ${pass.expiration_date} — время конца действия пропуска (UNIX Timestamp)
  • ${person.uuid} — идентификатор владельца пропуска
  • ${person.photo} — идентификатор фотографии владельца пропуска
  • ${person.name} — имя владельца пропуска
  • ${person.surname} — фамилия владельца пропуска
  • ${person.patronymic} — отчество владельца пропуска
  • ${person.organization} — организация владельца пропуска
  • ${person.division} — подразделение владельца пропуска
  • ${person.post} — должность владельца пропуска

Вы вольны включать эти переменные в тест письма в любой последовательности.

Если событие сформировано получением HTTP-запроса от «внешней» системы:

  • ${token} — токен запроса
  • ${body.myField} — произвольное поле (myField) из JSON-тела запроса

Если источником события для задачи автоматизации служит произвольная запись в системном журнале:

  • ${record.message} — текст системного сообщения
  • ${record.timestamp} — время регистрации сообщения
  • ${record.origin} — идентификатор сетевого узла-источника
  • ${record.subject} — идентификатор субъекта
  • ${user.username} — логин пользователя
  • ${user.firstName} — имя пользователя
  • ${user.lastName} — фамилия пользователя
  • ${user.patronymic} — отчество пользователя

Выполните следующие шаги:

  1. Заполните поле Заголовок письма. Если в задании задан фильтр по тревожным сообщениям, можно вписать, например:

    Тревога: ${event.headline}
  2. Введите текст письма, например: 

    В системе безопасности НЕЙРОСС зафиксировано тревожное событие.
    Источник: ${element.name}
    Время происшествия: ${event.sent} 
    Тип события: ${event.headline} 
  3. Введите email-адрес получателя сообщения.
  4. Если осуществляется видеонаблюдение, ведется запись видео места возникновения события, и на момент фиксации события есть видеоархив по одной или нескольким камерам, то к письму могут быть приложены кадры видеоархива за время события, по одному кадру с каждой камеры. Для включения функции установите Да в поле Отправлять связанные кадры архива.

    Обратите особое внимание на требования к настройке данной функции:

    1. Ведётся видеоархив (непрерывный в режиме 24/7 или по данному событию) и за время события есть видеоданные. Просмотреть наличие видеоархива можно в приложении Видеонаблюдение. Настройка задач на запись видеоархива осуществляется в разделе Настройка видеорегистраторов.
    2. Камера «привязана» к источнику тревог. Сопоставление камер элементам осуществляется в разделе Ситуационный центр > Источники тревог.
  5. Нажмите на кнопку Сохранить задание.
  6. При необходимости и организационной возможности выполнения теста, нажмите выполнить тест в заголовке блока Параметры действия.

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

Пример письма по событию «Взлом двери» с кадром камеры видеонаблюдения

Отправка отчёта на email

Вы также можете отправить по событию или расписанию любой лицензированный отчёт из АРМ НЕЙРОСС Отчёты.

Для отправки писем настройте локальный SMTP-сервер и укажите параметры почтового ящика в разделе Дополнительные настройки. Вы также можете использовать корпоративный сервер. Работа с почтовым доменом mail.ru и подобным не поддерживаются.

При выборе в качестве параметра действия «Отправка отчёта на email», вам потребуется:

  1. Задать все параметры письма аналогично инструкции в подразделе Отправка письма на email

    Письмо с отчётом также может быть дополнено кадрами видеоархива, если задача запускается по событию и, соответственно, есть источник тревог и «привязанные» к нему камеры.

  2. Указать шаблон отчёта, по которому должен строиться отчёт и набор параметров отчёта.

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


 Раскрыть | Дополнительные сведения и порядок настройки

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

Выполните следующие шаги:

  1. Выполните пп. 1—4 инструкции в подразделе Отправка письма на email.
  2. В поле Отчёт выберите из раскрывающегося списка требуемый шаблон отчёта. Если требуемого шаблона отчёта нет в списке, ознакомьтесь с разделом Настройка функций подготовки отчётов.
  3. В поле Набор параметров выберите из раскрывающегося списка предварительно подготовленный набор параметров, либо нажмите [Настроить наборы параметров] и создайте такой набор.
  4. Нажмите на кнопку Сохранить задание.
  5. При необходимости и организационной возможности выполнения теста, нажмите выполнить тест в заголовке блока Параметры действия.

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

Пример письма по событию «Взлом двери» с отчётом событий доступа по этой точке доступа за последний час и кадром камеры видеонаблюдения

Telegram-уведомление

Платформа НЕЙРОСС использует задачи автоматизации для информирования ответственных лиц о каких-либо событиях в системе. Кроме отправки электронных писем возможна отправка уведомлений в Телеграмм-канал.

Для получения сообщений в месседжер Telergam необходимо знать идентификатор своего канала и добавить бота @userinfobot в свой список контактов. 

При выборе в качестве параметра действия «Telegram-уведомление», вам потребуется:

  1. Сформулировать текст сообщения.
  2. Ввести ввести идентификатор (id) своего канала.
  3. При необходимости, включить отправку во вложении к сообщению кадров со «связанных» камер видеонаблюдения.


 Раскрыть | Дополнительные сведения и порядок настройки

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

Подготовка к настройке:

  1. Установите клиента Telegram на устройство и настройте свой аккаунт. 
  2. Добавьте в контакты бота @neyross_bot.
  3. Выясните идентификатор своего канала. Для этого вы можете воспользоваться ботом @userinfobot. Введите @userinfobot в строке поиска контактов. Вы получите сообщение вида:

    Id: 1055492440
    First: Ваше имя
    Last: Ваша фамилия
  4. Добавьте  в контакты бота @neyross_bot. Для этого введите @neyross_bot в строке поиска контактов. Выберите и нажмите Добавить в контакты.


Выполните следующие шаги:

  1. Заполните поле Сообщение. Например:

    Возникла тревога ${event.headline}
    Время отправки ${event.sent}
    Элемент-источник ${element.name} 

    Полный перечень доступных переменных приведён в подразделе Отправка письма на email.

  2. В поле Идентификатор чата/канала введите идентификатор (id) своего канала.
  3. Если осуществляется видеонаблюдение, ведется запись видео места возникновения события, и на момент фиксации события есть видеоархив по одной или нескольким камерам, то текст сообщения может быть дополнен кадрами видеоархива за время события, по одному кадру с каждой камеры. Для включения функции установите Да в поле Отправлять связанные кадры архива.
  4. Нажмите на кнопку Сохранить задание.

Пример Telegram-уведомления по тревоге видеоаналитики.

Отправка HTTP-запроса

Для интеграции с «внешними» системами предусмотрена передача HTTP-запроса. Поддерживаются методы GET, POST, PUT, DELETE. Поддерживаются запросы с Content-Type application/json, для отправки других типов запросов необходимо использовать пользовательский скрипт.

При выборе в качестве параметра действия «HTTP-запрос», вам потребуется:

  1. Указать URL-адрес «внешнего» сервера, по которому будет проводится приём запросов.
  2. Указать тип запроса: GET, POST, PUT, DELETE.
  3. Задать заголовки запроса. Для методов POST и PUT указать тело запроса. Вы можете включить информацию о событии. Для этого используются те же переменные, которые перечислены в подразделе Отправка письма на email.


 Раскрыть | Порядок настройки

Выполните следующие шаги:

  1. В поле URL введите полный адрес сервера с префиксом http(s)://.

  2. В поле Метод заглавными буквами введите имя используемого метода: GET, POST, PUT, DELETE.
  3. При выборе методов POST или PUT в поле Тело HTTP-запроса введите в квадратных скобках содержание запроса. Для подстановки переменных используйте инструкцию по ссылке.
  4. В поле Заголовки HTTP-запроса в формате JSON введите заголовок. Для подстановки переменных используйте инструкцию по ссылке.

Пользовательский скрипт

Функция выполнения произвольного скрипта позволяет использовать сложные алгоритмы анализа входных условий и последовательности выполняемых действий. Предоставляется механизм Scala-скриптовой логики.

При выборе в качестве параметра действия «Произвольный скрипт», вам потребуется:

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

Данная функция позволяет решать нестандартные объектовые задачи, «не покрытые» базовым функционалом Платформы НЕЙРОСС, в том числе самостоятельно, с помощью сервиса services.common.CodeCompilationService. 

Мы подготовили два примера демонстрации работы данной функции.

 Раскрыть | Примеры использования

Пример 1. Обработка событий доступа: Отслеживать количество людей в помещении и при прохождении лица с одноразовым пропуском в пустое помещение генерировать сигнал тревоги.

Выполните следующие шаги:

  1. Создайте фильтр по метке #ПроходСовершен [Фильтры].
  2. В блоке Параметры сигнала выберите По событию, в поле Фильтр по событиям выберите из раскрывающегося списка созданный на предыдущем этапе фильтр. 
  3. Скопируйте приведённый ниже код скрипта.

    import extensions.automation.scripts.AutomationActionScript
    import extensions.automation.signals.{AutomationSignal, NeyrossEventAutomationSignal}
    import models.common.{Event, EventExtensions, FunctionalElement}
    import models.neyross.Pass
    import proto.neyross.PassProto
    import utils.common.{EventBuilder, Tags}
    import scala.collection.mutable.TreeMap
    import scala.concurrent.{ExecutionContext, Future}
    import scala.concurrent.duration._
    import java.time.OffsetDateTime
    import models.pacs.PacsRoomComponent
    import slick.basic.DatabaseConfig
    import slick.jdbc.JdbcProfile
    import akka.actor.ActorRef
     
    class AdvancedRoomControl extends extensions.automation.scripts.AutomationActionScript {
      private implicit val ec: ExecutionContext = ctx.executionContext              // извлекаем из контекста скрипта ExecutionContext
      private implicit val dbConfig: DatabaseConfig[JdbcProfile] = ctx.dbConfig     // извлекаем из контекста скрипта DatabaseConfig
     
      private val scheduler = ctx.injector.instanceOf[utils.bootstrap.Scheduler]
      private val eventTransmissionActor: ActorRef = ctx.injectNamedActor(actors.common.EventTransmissionActor.Name)
     
      private val rooms = new PacsRoomComponent()
      private val roomsIds = Seq(1l, 45l, 123l, 56l)    // набор идентификаторов контролируемых комнат
      private val enter2lastRegularPassTime = TreeMap.empty[String, Option[OffsetDateTime]] // набор пар  (токен точки доступа -> время прохода последнего постоянного пропуска)
      private var passCount = 0
     
      override def init: Future[Unit] = {       // реализация метода init. Ищем в базе нужные точки доступа
        val dbAction = for {                    //  на вход и инициализируем карту enter2lastRegularPassTime
          rooms <- rooms.findInIds(roomsIds)
        } yield rooms.flatMap(_.enterAccessPoints)
        ctx.dbRun(dbAction).map(tokens => {
          enter2lastRegularPassTime.addAll(
            tokens.map(token => (token, None))
          )
        })
      }
     
      private def reportIfUnaccompanied(token: String): Future[Unit] = {    // отправляет событие тревоги через 10 секунд, в случае если
        passCount = passCount + 1                                           //  за это время не был совершен проход постоянного пропуска через заданную ТД
        val currentLastRegularPassTime = enter2lastRegularPassTime(token)
        Future.successful(
          scheduler.executeOnce(10 seconds)({
            if (enter2lastRegularPassTime(token) == currentLastRegularPassTime) {
              val warningEventBuilder = new EventBuilder
              val event = warningEventBuilder.setHeadline("Проход без сопровождения")
                  .setDescription(s"Проход пользователя с одноразовым пропуском без сопровождения через точку доступа $token")
                  .addEventTags(Tags.Alarm, Tags.PACS)
                  .build()
              eventTransmissionActor ! event
            }
          })(s"pass_check_$passCount")
        )
      }
     
      private def handleAccessTaken(pass: Pass, token: String): Future[Unit] = {    // обработчик события доступа
        if (enter2lastRegularPassTime.get(token).nonEmpty) {
          pass.`type` match {
            case Some(PassProto.Pass.Type.REGULAR) =>
              Future.successful(
                enter2lastRegularPassTime.addOne((token, Some(OffsetDateTime.now())))
              )
            case Some(PassProto.Pass.Type.ONETIME) =>
              enter2lastRegularPassTime(token) match {
                case Some(lastTime) if lastTime.plusSeconds(10).isBefore(OffsetDateTime.now()) =>
                  reportIfUnaccompanied(token)
                case None =>
                  reportIfUnaccompanied(token)
                case _ =>
                  Future.unit
              }
            case _ =>
              Future.unit
          }
        } else {
          Future.unit
        }
      }
     
      override def onSignal(signal: AutomationSignal): Future[Unit] = { // Обработчик сигнала автоматизации. Если сигнал представляет собой событие доступа, инициирует обработку данного события.
        signal match {                                                  //  В противном случае, ничего не делает
          case NeyrossEventAutomationSignal(eventDto) =>
            val isAccessTakenEvent = eventDto.event.eventTags.getOrElse(Nil).contains(Tags.AccessTaken)
            if (isAccessTakenEvent) {
              val passAndTokenOpt = for {
                passExtension: AnyRef <- eventDto.extensions.get(EventExtensions.EventPass)
                feExtension: AnyRef <- eventDto.extensions.get(EventExtensions.FunctionalElement)
                functionalElement = feExtension.asInstanceOf[FunctionalElement]
                pass = passExtension.asInstanceOf[Pass]
              } yield (pass, functionalElement.token)
              passAndTokenOpt match {
                case Some((pass, token)) =>
                  handleAccessTaken(pass, token)
                case _ =>
                  Future.failed(new IllegalArgumentException("unable to get pass or functional element token"))
              }
            } else {
              Future.unit
            }
          case _ =>
            Future.unit
        }
      }
    }
    new AdvancedRoomControl // последняя строка скрипта обязательно должна содержать экземпляр AutomationActionScript
                            //  в противном случае, скрипт не скомпилируется
  4. Вставьте код в поле Скрипт. Для открытия большого окна редактора, нажмите на кнопку .
  5. Нажмите на кнопку Сохранить задание.

Если в помещении нет людей, по факту получения события ПроходСовершен по пропуску типа [Разовый], будет формироваться тревожное событие «Проход без сопровождения», которое будет отправлено в ленту событий АРМ НЕЙРОСС Центр, также его можно будет отследить в отчёте Журнал событий.

Пример 2. Обработка событий неисправности: Отслеживать все события неисправности, если за последние N секунд возникло больше M неисправностей, совершается запись в системный журнал.

Выполните следующие шаги:

  1. Создайте фильтр по метке #Неисправность [Фильтры].
  2. В блоке Параметры сигнала выберите По событию, в поле Фильтр по событиям выберите из раскрывающегося списка созданный на предыдущем этапе фильтр. 
  3. Скопируйте приведённый ниже код скрипта.

    import extensions.automation.contexts.AutomationActionScriptContext
    import extensions.automation.scripts.AutomationActionScript
    import scala.concurrent.{ExecutionContext, Future}
    import extensions.automation.signals.{AutomationSignal, NeyrossEventAutomationSignal}
    import services.common.{SystemLogService, SystemLogTag}
    import java.time.OffsetDateTime
    import utils.common.Tags
      
    class AvalancheFaultStream extends AutomationActionScript {
     private implicit val executionContext: ExecutionContext = ctx.executionContext
     private val timeIntervalInSeconds: Long = 10 // временной интервал, за который учитываются неисправности (в секундах)
     private val criticalEventCount: Int = 4 // критическое количество событий неисправности за назначенный интервал
     private val systemLogService: SystemLogService = ctx.injector.instanceOf[SystemLogService]
      
     private def log: Future[Unit] = systemLogService.log(SystemLogTag.ALARM)(
        s"Зафиксировано $criticalEventCount событий неисправности за последние $timeIntervalInSeconds секунд"
     ).map(_ => ())
      
     private val cache = new scala.collection.mutable.ListBuffer[OffsetDateTime]
     private def updateCache(): Unit = {
         val now: OffsetDateTime = OffsetDateTime.now()
        cache.addOne(now)
        cache.dropWhile(_.plusSeconds(timeIntervalInSeconds).isBefore(now))
     }
      
     override def onSignal(signal: AutomationSignal): Future[Unit] = signal match {
        case NeyrossEventAutomationSignal(eventDto) if eventDto.event.eventTags.getOrElse(Nil).contains(Tags.Fault) =>
            updateCache()
            if (cache.size >= criticalEventCount) {
            val future: Future[Unit] = log
            future.onComplete(_ => {
                cache.clear()
            })
            future
            } else {
             Future.unit
            }
        case _ =>
            Future.unit
        }
    }
    new AvalancheFaultStream
  4. Вставьте код в поле Скрипт. Для открытия большого окна редактора, нажмите на кнопку .
  5. Нажмите на кнопку Сохранить задание.

При получении заданного количества неисправности за заданный период времени, будет формироваться запись в системном журнале «Зафиксировано M событий неисправности за последние N секунд».

  • No labels