Примеры тревог
В данном разделе приводятся некоторые существенные конфигурации тревоги, чтобы в дальнейшем вы смогли ссылаться на них при создании своих собственных настроек тревог.
Примеры выражения триггера
Далее приведены несколько реальных примеров выражения триггера тревоги:
Выражение | Примечания |
| Данное выражение будет обращаться к таблице по умолчанию (т.е. к значению переменной в случае триггера переменной), находить запись со значением 1 в поле |
| Данное выражение используется тревогой "Устройство отключено". Оно активирует тревогу, если поле |
| Данная тревога будет активирована, если температура будет держаться выше 27 градусов с понедельника по пятницу с 9.00 до 18.00. |
| Данное выражение триггера события активирует тревогу, когда поле |
| Это выражение анализирует последнее время выполнения запроса SQL под названием То же выражение может использоваться для анализа продолжительности ввода/вывода (например, времени чтения/записи) любой переменной устройства. |
Тревога предупреждение об ударе
Предположим, что наше аппаратное устройство является контроллером погрузчика, который генерирует событие Удар, когда погрузчик сталкивается с препятствием. Данное событие содержит поле Уровень, которое представляет уровень удара, более высокие уровни сигнализируют о более серьезных ударах.
Тревога Предупреждение об ударе имеет только один триггер события, который активируется при возникновении события Удар в контексте терминала данных, если значение целочисленного поля Уровень в данных события выше 50 (т.е. тревога активируется только при серьезных ударах).
Информация о тревоге
Поле | Значение |
Имя тревоги | impact_warning |
Описание тревоги | Предупреждение об ударе |
Тревога включена | TRUE |
Сообщение | Сильный удар транспорта |
Триггеры, активируемые событиями
Маска контекста | Событие | Выражение фильтра |
users.admin.devices.forklift | impact | {level} > 50 |
Тревожные уведомления
Поле | Значение |
Уведомлять владельца при наличии подключения к серверу | TRUE |
Требуется подтверждение | FALSE |
Звук уведомления | <Not set> |
Отправит e-mail сообщение владельцу | TRUE |
Адресаты е-mail сообщений | NONE |
Дополнительные адресаты е-mail сообщений |
|
Проблема нескольких устройств
Данный комплексный пример показывает, как взаимодействие двух функций системы, тревог и запросов, может быть полезным для обнаружения ошибок, касающихся сразу нескольких Device.
Допустим, что десять температурных датчиков подключены к SberMobile Server и принадлежат пользователю john. Контекст терминала данных каждого датчика имеет переменную "Температура" (имя переменной: temperature), значение которой обладает целочисленным полем, celsius, показывающим температуру в градусах Цельсия. Предположим, что температура отдельно взятого датчика не критична, но если три или более датчика сообщают о температуре выше 100 градусов, что может привести к проблеме в дальнейшем, необходима активация тревоги, чтобы позволить операторам выяснить и устранить проблему.
Мы будем использовать запрос, который поможет найти все термометры, сообщающие о температуре выше 100 градусов:
SELECT * FROM users.john.devices.*:temperature WHERE temperature$celsius > 100
Данный запрос вернет таблицу ( таблицу данных ), содержащую одну запись для каждого датчика, сообщающего о высокой температуре.
Выполнить данный запрос можно путем вызова функции executeQuery
из
корневого контекста и ввода текста запроса в качестве параметра входа. Смысл в том, чтобы установить тревогу с триггером, который будет периодически выполнять данный запрос и проверять количество записей выхода. Если количество больше трех, триггер активируется.
Триггеры переменной могут и не использоваться напрямую для проверки выхода функции, но в данном случае нам необходимо проверить выход функции - executeQuery
является функцией. Как было сказано ранее, тревоги могут быть активированы двумя способами - когда возникает событие (так называемые "триггеры события") или согласно значению какой-либо переменной ("триггер переменной"). В нашем примере мы будем использовать триггер переменной, но немного его доработаем. Триггер переменной всегда имеет контекст, переменную и выражение. В данном примере выражения могут вызывать функции.
Итак, мы собираемся создать тревогу с не имеющими значения контекстом, переменной (которая все равно соответствует контексту) и очень важным значением выражения. Данное выражение не будет даже ссылаться на контекст и переменную тревоги. В данном случае для нас важно само выражение, потому что именно оно приведет к выполнению запроса. Все остальные части (контекст и переменная) являются просто шаблонами. В качестве их значений мы возьмем "" (корневой) контекст и доступную только для чтения переменную version, содержащую версию сервера.
Тревога активируется, когда значение оценивается как true.
Чтобы получить доступ к записям, содержащимся в выходе функции executeQuery, мы будем использовать свойство Записи (более подробное описание о процессе разрешения ссылки см. в разделе Ссылки). Итак, итоговая ссылка, которая вернет количество датчиков, зарегестрировавших высокую температуру, выглядит таким образом:
{:executeQuery("SELECT * FROM users.john.devices.*:temperature WHERE temperature$celsius > 100")#records}
Принцип действия:
Триггер периодически опрашивает корневой контекст на значение переменной version.
Данное значение отвергается, т.к. оно не используется в выражении триггера.
Происходит вычисление выражения. Во время оценки, поскольку схема ссылки не указана, ссылка разрешается как стандартная. Функция "Выполнить запрос" корневого контекста выполняется и возвращает количество строк в результате. Это число сравнивается с числовой константой "3". Результирующее выражение возвращает TRUE, если оно больше или равно трем, и FALSE в противном случае.
Если выражение возвращает TRUE, триггер активирует тревогу и отправляются все уведомления.
Информация о тревоге
Поле | Значение |
Имя тревоги | temperature_warning |
Описание тревоги | Предупреждение о температуре |
Тревога включена | TRUE |
Сообщение | Три и более датчиков показывают высокую температуру |
Триггеры переменной
Маска контекста | Переменная | Выражение | Monitor State Changes | Check Period (seconds) | Level |
"" (empty string - Root context) | version | {:executeQuery("SELECT * FROM users.john.deviceservers.sensors.devices.*:temperature WHERE temperature$celsius > 100")#records} >= 3 | FALSE | 10 | Error |
Тревожные уведомления
Поле | Значение |
Уведомлять владельца при наличии подключения к серверу | TRUE |
Требуется подтверждение | FALSE |
Звук уведомления | <Not set> |
Отправить e-mail сообщение владельцу | TRUE |
Адресаты е-mail сообщений | NONE |
Дополнительные адресаты е-mail сообщений |
|
Дополнительные примеры можно найти в разделе Триггеры. |