Вычисление дельты

image0

Вычисляет дельту между предыдущим показанием и текущим, и добавляет ее к сообщению. Полезно для интеллектуального учета. Например, когда прибор учета воды сообщает абсолютное значение счетчика один раз в сутки. Чтобы узнать потребление за текущий день, необходимо сравнить значение за предыдущий день со значением за текущий день.

Расчет дельты выполняется для данных отправителя, например, для устройства, ресурса или потребителя.

Конфигурация узла:

  • Входные данные - (по-умолчанию pulseCounter) поле, которое будет использоваться для выходных данных.

  • Выходные данных - (по-умолчанию delta) поле, в котором будет храниться результат вычисления дельты.

  • Точность - точность расчета дельты.

  • Использование кэша - (по-умолчанию enabled) включает кэширование последних значений в памяти.

  • Отказ, если дельта отрицательна - (по-умолчанию enabled) отправляет сообщение в цепочку Отказ, если значение дельты отрицательное.

  • Задержка между сообщениями - (по-умолчанию disabled) добавляет задержку между текущим и предыдущим сообщением.

Тип выходного сообщения:

  • Успех - если во входящем сообщении присутствует поле с входными данными;

  • Другое - если во входящем сообщении отсутствует поле с входными данными;

  • Отказ - если установлен параметр Сообщать Отказ, если дельта отрицательна и расчет дельты возвращает отрицательное значение.

Давайте рассмотрим поведение узла правила на примере. Предположим следующую конфигурацию:

image1

Предположим, что следующие сообщения исходят от одного и того же устройства и поступают на узел правил в той последовательности, в которой они перечислены:

{
      "msg": {
            "pulseCounter": 42
      },
      "metadata": {
            "ts": "1616510425000"
      }

}
{
      "msg":
      {
            "pulseCounter": 73
      },
      "metadata": {
            "ts": "1616510485000"
      }
}
{
      "msg": {
            "temperature": 22
      },
      "metadata": {
            "ts": "1616510486000"
      }
      "msg": {
            "pulseCounter": 42
      },
      "metadata": {
            "ts": "1616510487000"
      }
}

Вывод будет следующим:

{
      "msg": {
            "pulseCounter": 42,
            "delta": 0,
            "periodInMs": 0
      },
      "metadata": {
            "ts": "1616510425000"
      },
      "relation": "Success"
}
{
      "msg": {
            "pulseCounter": 73,
            "delta": 31,
            "periodInMs": 60000
      },
      "metadata": {
            "ts": "1616510485000"
      },
      "relation": "Success"
}
{
      "msg": {
            "temperature": 22
      },
      "metadata": {
            "ts": "1616510486000"
      },
      "relation": "Other"
}
{
      "msg": {
            "pulseCounter": 42
      },
      "metadata": {
            "ts": "1616510487000"
      },
      "relation": "Failure"
}