Введение

Rule Engine - это простая в использовании платформа для создания рабочих процессов на основе событий. Есть 3 основных компонента:

  • Сообщение - любое входящее событие. Это могут быть входящие данные с устройств, событие жизненного цикла устройства, событие REST API, запрос RPC и т. д.

  • Узел правила - функция обработки входящего сообщения. Существует много различных типов узлов, которые могут фильтровать, преобразовывать или выполнять некоторые действия с входящим сообщением.

  • Цепочка правил - узлы соединяются друг с другом связями, поэтому исходящее сообщение от узла правила отправляется следующим подключенным узлам правил.

Сценарии использования

Rule Engine - это настраиваемая платформа для обработки сложных событий. Вот несколько распространенных сценариев использования:

  • Проверка и изменение данных для входящей телеметрии или атрибутов перед сохранением в базе данных.

  • Агрегация телеметрии. Например, данные с нескольких устройств могут быть агрегированы в соответствующий актив.

  • Создание/обновление/очистка сигналов на основе определенных условий.

  • Запуск действий на основе событий жизненного цикла устройства. Например, создание оповещения, если устройство находится в режиме онлайн/оффлайн.

  • Загрузка дополнительных данных, необходимых для обработки. Например, порогового значения температуры устройства, которое определено в атрибуте владельца устройства.

  • Запуск вызовов REST API во внешние системы.

  • Отправка электронных писем при возникновении сложного события и использование атрибутов других сущностей в шаблоне электронной почты.

  • Обработка событий в соответствии с настройками в аккаунте пользователя.

  • Вызовы RPC на основе определенных условий.

  • Интеграция с внешними системами, через Kafka, MQTT, REST API и т. д.

Запуск Rule Engine

Чтобы открыть интерфейс Rule Engine необходимо перейти в web браузере по ссылке https://re.имядомена, например, https://re.promuc.loc:

../_images/re_enter.png

Примечание

Удаление узлов и связей осуществляется выбором удаляемого элемента и нажатием клавиши Backspace.

Примечание

Обмен данными между узлами начинается только после создания цепочки.

Web интерфейс имеет ряд настроек, среди которых есть возможность изменения темы оформления. Для лучшего восприятия дальше в документе могут встречаться комбинация светлой и тёмной тем:

pic1 pic2

Пример получения данных и их отладочного просмотра

В данном простом примере будет рассмотрен процесс передачи данных в Rule Engine при помощи REST API POST запроса и просмотр полученных данных в узле отладки.

  1. Откройте страницу Rule Engine.

  2. Нажмите Создать цепочку:

../_images/example-re-nodes.png
  1. Перетащите узел HTTP Input в рабочую область. Откройте его настройки. Поле Address будет содержать путь до сервера Rule Engine:

../_images/input-http-settings.png
  1. Перетащите узел Debug в рабочую область:

../_images/example-nodes.png
  1. Соедините узел HTTP Input с узлом Debug перетаскиванием мыши с выхода узла HTTP Input на вход узла Debug:

../_images/example-linked-nodes.png
  1. Нажмите иконку Сохранить цепочку в правом верхнем углу:

../_images/example-re-chain-save.png
  1. Для проверки работы цепочки можно отправить данные командой curl:

curl -k -H "Content-Type: application/json" -X POST -d '{"data":{"temp":23,"door":"open"}, "chain":"123"}' http://127.0.0.1:5555/api/pushdata

или при помощи утилиты Postman:

../_images/example-nodes-postman.png
  1. Проверить получение данных можно кликнув мышкой на кнопке узла Debug:

../_images/example-nodes-debug-display.png

Внутренний обмен данными Rule Engine

  • Rule Engine передает данные между блоками через сообщения JSON:

    {
        "id": 2,
        "msg": {
            "DATA": {
                "door": "open",
                "temp": 23
            },
            "METADATA": {
                "chain": "123",
                "from": "HTTP",
                "time": 1697437369155
            }
        },
        "name": "123",
        "type": "debug"
    }
    

    id: ид блока в системе

    msg: тело сообщения от блока

    DATA: входящие данные

    METADATA: имя цепочки, тип входного блока, время получения сообщения

    name: имя цепочки для дебага, появляется только при выводе данных в веб

    type: тип вывода для дебага, появляется только при выводе данных в веб