Тревога по условию ================== |image0| Узел анализирует входные данные, если условие, указанное пользователем, соблюдается, то отправляет сообщение о нормальной величине входного значения. Если полученное значение не соотвествует ожидаемому, то отправляет сообщение указанное в настройках. Сообщение, поступающее на вход данного узла должно быть в формате: \* **values[]** \* **property-name** - имя входной переменной ``str`` \* **value** - значение на проверку ``bool|number`` \* **source** - по желанию, ``str`` Если новое поступившее *value* будет идентично старому, то тревога не сработает. Конфигурация узла: ------------------ |image1| Входные данные ~~~~~~~~~~~~~~ **Структура csv файла:** - **property_name** - имя входящей переменной, указать требуется значение входящего *property-name*; ``str`` - **alarm_text** - сообщение, которое будет отправлено с тревогой ``str`` - **description** - доп. сообщение, которое будет отправлено с тревогой ``str`` - **type** - способ анализа значения свойства для отправки следующему узлу. Далее нужные значения для каждого типа: - **bool** - преобразует в ``binary`` оператор - **true** - на вход можно подать в любом регистре, всё переводится в нижний. - **false** - **threshold** - **min_value** - условие тревоги ``double`` - **max_value** - условие тревоги ``double`` - **threshold** - входное значение равно этому значению ``double`` - **cov** - Если изменение в пределах шума, проверяем была ли ранее тревога. Если уже была, то скипаем ``double`` - **interval** - **min_value** - условие тревоги ``double`` - **max_value** - условие тревоги ``double`` - **min_resolution** - Проверяем на пересечение пределов измерения ``double`` - **max_resolution** - Проверяем на пересечение пределов измерения ``double`` - **cov** - Если изменение в пределах шума, проверяем была ли ранее тревога. Если уже была, то скипаем ``double`` - **status_flag** - пользовательский флаг ``unsigned int`` Загрузка настроек из файла csv, пример ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. csv-table:: Table :header: "prop_y_name", "alarm_parm_text", "description", "type", "min_val", "max_val", "thresh", "bin", "min_resolution", "max_resolution", "cov", "status_flag" :widths: 15, 15, 25, 10, 10, 10, 10, 10, 15, 15, 10, 10 "adress0", "alarm", "Тревога!", "int", "1", "2", "", "", "-100", "100", "0.5", "10" "adress1", "alarm", "Тревога!", "thresh", "", "", "40", "", "-100", "100", "0.5", "0" "adress2", "alarm", "Тревога!", "bool", "", "", "", "false", "", "", "", "0" **Csv** :: property_name;alarm_text;description;type;min_value;max_value;threshold;binary;min_resolution;max_resolution;cov;status_flag address0;alarm;Тревога! Выход за интервал;interval;10;20;;;-100;100;0.5;10 address1;alarm;Тревога! Критический уровень;threshold;;;40;;-100;100;0.5;0 address2;alarm;Тревога! Условие истинно;bool;;;;false;;;;0 Пример сообщения на вход ~~~~~~~~~~~~~~~~~~~~~~~~ **Json** :: { "values":[ { "property-name": "address0", "value": 22.000000, "source": "temperature-checker" }, { "property-name": "address1", "value": 16.43, "source": "Jason" } ] } .. raw:: html
Данные на выходе из узла ~~~~~~~~~~~~~~~~~~~~~~~~ **Json** :: { "alarms": [ { "alarm_text": "alarm", "description": "Тревогa! Казахстан угрожает нам бомбардировкой!", "property-name": "address0", "source": "temperature-checker", "status_flag":1, "value": 22.000000 }, { "alarm_text": "normal" "property-name": "address1", "description": "Норма", "source": "Jason", "status_flag":0, "value": 16.43 } ] } .. raw:: html
Пример использования: --------------------- Построим схему: (или возьмём готовую ``test_alert.yaml``) |image2| Настройте схему по следующим параметрам: .. code:: json { "values":[ { "property-name": "address0", "value": 16.43 } ] } **Python** .. code:: python import random obj['DATA']['values'][0]['value']=random.randint(0,30) return obj **alarm(202).csv** .. code:: csv property_name;alarm_text;description;type;min_value;max_value;threshold;binary;min_resolution;max_resolution;cov;status_flag address0;alarm;Тревога! Выход за интервал;interval;10;20;;;-100;100;0.5;10 Сохраняем цепочку и смотрим вывод в сокет |image3| .. |image0| image:: ../../_img/action-create-alarm.png .. |image1| image:: ../../_img/action-create-alarm-config.png .. |image2| image:: ../../_img/alarm_chain.png .. |image3| image:: ../../_img/alarm_socket.png