Добрый день.
Пытаюсь решить задачу настройки уведомлений по важности события, делаю как на скриншотах, и тут возникает проблема если использовать SYS_THRESHOLD_REARMED как общее для завершения событий, то приходят лишние уведомления, если не использовать то не приходят уведомления о завершении. В противном случае нужно использовать на каждый триггер своё собственное завершающее событие, что совсем не удобно. Есть какое-то простое решение?
Можно помимо генерации аларма делать запись с таким-же ключом в persistent storage, и в правиле отсылки почты по SYS_THRESHOLD_REARMED проверять наличие такого ключа, и только если он есть выполнять отсылку.
Работает, спасибо за идею!
Простой код, может кому-то понадобится при решении похожей задачи:
sub main() {
alarm_status = false;
alarm_ps_status = ReadPersistentStorage("%<dciId>_%i");
if (alarm_ps_status != null) {
alarm_status = true;
}
return alarm_status;
}
А точно работает? ReadPersistentStorage на делает подстановку, т.е. будет искаться ключ %<dciId>_%i, а не скажем 127_313.
Понаблюдал предварительно, в ps записи добавляются и удаляются, в соответствии с настроенными событиями. Видимо работает.
Вы правы, не работает, попробую переделать.
Похоже это следствие ошибки в ReadPersistentStorage - если записи с заданным ключом нет, то возвращается пустая строка, а не NULL. Правильным вариантом кода будет
ReadPersistentStorage($event->dciId . "_0x" . right(d2x($node->id), 8, "0"));
Предварительно можно еще проверить что $event->dciId не NULL.
Спасибо! Проверю.
Теперь работает корректно, спасибо!
Итоговый вариант:
sub main() {
alarm_status = false;
alarm_ps_status = ReadPersistentStorage($event->dciId . "_0x" . right(d2x($node->id), 8, "0"));
if ((alarm_ps_status != null) && (alarm_ps_status == "1")) {
alarm_status = true;
}
return alarm_status;
}