Снятие тревоги ============== |image0| Этот узел загружает последнюю тревогу с настроенным типом тревоги для отправителя сообщения и сбрасывает тревогу, если она существует. Конфигурация узла: - **Alarm Details Builder** - скрипт - **Alarm Type** - любая строка, представляющая тип тревоги Узел правил имеет возможность получить тип тревоги, используя шаблон с полями из метаданных сообщения: |image1| **Alarm Details Builder** скрипт, используемый для обновления сведений о тревоге **JsonNode**. Это полезно для хранения дополнительных параметров внутри **Alarm**. Например, вы можете сохранить пару имя/значение атрибута из полезной нагрузки исходного сообщения или метаданных. **Alarm Details Builder** скрипт должен возвращать объект **details**. |image2| - Доступ к данным сообщения можно получить через свойство **msg**. Например, **msg.temperature** - Доступ к метаданным сообщения можно получить через свойство **metadata**. Например, **metadata.customerName** - Доступ к типу сообщения можно получить через свойство **msgType**. Например **msgType** - Доступ к текущим сведениям о тревоге можно получить через **metadata.prevAlarmDetails**. **ОБРАТИТЕ ВНИМАНИЕ:** **metadata.prevAlarmDetails** — это необработанное строковое поле, и его необходимо преобразовать в объект, используя следующую конструкцию: :: var details = {}; if (metadata.prevAlarmDetails) { details = JSON.parse(metadata.prevAlarmDetails); } Функцию сценария **Alarm Details Builder** можно проверить с помощью функции *Test JavaScript*. **Пример функции конструктора деталей** Эта функция берет свойство счетчика из предыдущего сигнала тревоги и увеличивает его. Также помещает атрибут температуры из полезной нагрузки входящего сообщения в сведения о тревоге. :: var details = {temperature: msg.temperature, count: 1}; if (metadata.prevAlarmDetails) { var prevDetails = JSON.parse(metadata.prevAlarmDetails); if(prevDetails.count) { details.count = prevDetails.count + 1; } } return details; Этот узел обновляет текущий сигнал тревоги: - изменяет статус тревоги **status** на **CLEARED_ACK**, если она уже была подтверждена, иначе на **CLEARED_UNACK** - устанавливает **clear time** на текущее системное время - обновляет сведения об аварийных сигналах с помощью нового объекта, возвращенного из сценария **Alarm Details Builder**. В случае, когда Тревога не существует или это уже Сброшенная Тревога, исходное Сообщение будет передано следующим узлам через цепочку **False**. В противном случае новое сообщение будет передано по цепочке **Cleared**. Сообщение на выходе будет иметь следующую структуру: - **Message Type** - ALARM - **Originator** - тот же отправитель из входящего сообщения - **Payload** - JSON-представление тревоги, которая была сброшена - **Metadata** - все поля из исходных метаданных сообщения. Также будет добавлено дополнительное свойство внутри метаданных - *isClearedAlarm* со значением *true*. Вот пример полезной нагрузки исходящего сообщения: :: { "tenantId": { "entityType": "TENANT", "id": "22cd8888-5dac-11e8-bbab-ad47060c9bbb" }, "type": "High Temperature Alarm", "originator": { "entityType": "DEVICE", "id": "11cd8777-5dac-11e8-bbab-ad55560c9ccc" }, "severity": "CRITICAL", "status": "CLEARED_UNACK", "startTs": 1526985698000, "endTs": 1526985698000, "ackTs": 0, "clearTs": 1526985712000, "details": { "temperature": 70, "ts": 1526985696000 }, "propagate": true, "id": "33cd8999-5dac-11e8-bbab-ad47060c9431", "createdTime": 1526985698000, "name": "High Temperature Alarm" } .. |image0| image:: ../../_img/action-clear-alarm.png .. |image1| image:: ../../_img/action-clear-alarm-fetch-alarm-type-from-metadata.png .. |image2| image:: ../../_img/action-clear-alarm-config.png