Всем привет!
Есть элемент данных, который обновляется каждые 1800 сек (полчаса). Полчаса (а не час) выбраны в данном конкретном случае для уменьшения нагрузки на узел при генерации элемента данных (обработка лога) - два раза в час на интервале в 1800 сек. лучше, чем раз в час на интервале 3600.
Триггер выглядит так:
Идея такая: триггер срабатывает, если за последний час сумма #1 + #2 превысит в K раз сумму #3 + #4 за предпоследний час. Очевидная идея использовать item.sum(3605) > item.sum(3605,3605) * K работала плохо, если в последовательности данных было много подряд идущих нулей (ещё было бы удобным иметь возможность в sum() указывать смещение в штуках, а не по времени, как в last()).
Поэтому решил триггер сделать не по времени, а используя last(). Но вылезла проблема - как передать (отразить) в имени триггера не просто ITEM.VALUE (ITEM.LASTVALUE), а сумму двух значений: last(#1) + last(#2). Дело в том, что в ITEM.VALUE (ITEM.LASTVALUE) всегда выводится последнее значение ITEM, невзирая на использованные функции в триггере, т.е. item.last(), item.last(#4), item.sum(3605) и т.д. всегда будут выдавать значение item.last(), для любого N в ITEM.VALUEN, т.к. это один и тот же item.
Сработает, когда #1 = 1 (на шаг раньше - НЕ сработает: (159 + 8) < ((7 + 20) * 10). Но, из-за того, что я написал выше, в диагностике будет значение ITEM.VALUE=1 и сообщение аларма будет выглядеть странно: "Слишком большое количество: 1". А хочется увидеть правильное: "Слишком большое количество: 160". Ещё раз напомню, что здесь не спасёт использование .sum() - всё равно будет выведено последнее значение (на момент срабатывания), т.е., всё та же единица.
Вопрос: как вывести в имени сумму двух значений - последнюю и предпоследнюю? Согласен на вариант типа: "Слишком большое количество: 1 + 159", без реального суммирования
Если простыми средствами не получится, два варианта решения:
1. Сделать период опроса = 3600 (час) и сравнивать только #1 и #2.
2. Сравнение на > *K делать на получасовом интервале (и тоже сравнивать только #1 и #2).
В обоих случаях в имени триггера будет выводится правильный ITEM.VALUE (last()).
Есть элемент данных, который обновляется каждые 1800 сек (полчаса). Полчаса (а не час) выбраны в данном конкретном случае для уменьшения нагрузки на узел при генерации элемента данных (обработка лога) - два раза в час на интервале в 1800 сек. лучше, чем раз в час на интервале 3600.
Триггер выглядит так:
Code:
(item.last(#1) + item.last(#2)) > (item.last(#3) + item.last(#4)) * K
Поэтому решил триггер сделать не по времени, а используя last(). Но вылезла проблема - как передать (отразить) в имени триггера не просто ITEM.VALUE (ITEM.LASTVALUE), а сумму двух значений: last(#1) + last(#2). Дело в том, что в ITEM.VALUE (ITEM.LASTVALUE) всегда выводится последнее значение ITEM, невзирая на использованные функции в триггере, т.е. item.last(), item.last(#4), item.sum(3605) и т.д. всегда будут выдавать значение item.last(), для любого N в ITEM.VALUEN, т.к. это один и тот же item.
Code:
Пример: K = 10 item.last(#5) = 20 item.last(#4) = 7 item.lst(#3) = 8 item.last(#2) = 159 item.last(#1) = 1
Вопрос: как вывести в имени сумму двух значений - последнюю и предпоследнюю? Согласен на вариант типа: "Слишком большое количество: 1 + 159", без реального суммирования

Если простыми средствами не получится, два варианта решения:
1. Сделать период опроса = 3600 (час) и сравнивать только #1 и #2.
2. Сравнение на > *K делать на получасовом интервале (и тоже сравнивать только #1 и #2).
В обоих случаях в имени триггера будет выводится правильный ITEM.VALUE (last()).


Comment