Построение условий - пример

Цель: синхронизировать реальный объект и его цифрового двойника без потери данных.

В системе мониторинга создан цифровой двойник реального объекта. Реальный объект может быть в одном из двух состояний: включен или выключен. Изменять состояния объекта могут несколько авторизованных операторов. При этом в данные цифрового объекта записывается информация не только о новом состоянии объекта, но и об операторе, который произвел это изменение.

Возможна ситуация, когда связь с реальным объектом потеряна, и в это время его состояние было изменено. Однако при синхронизации не передаётся информация о том, кто изменил состояние объекта.

Пошаговое руководство:

Шаг 1: в секции Мониторинг настроить тип проверки MQTT-сенсор

Проверка возвращает следующие метрики:

  • state - включен (1) или выключен (0) объект,

  • id - последний оператор, взаимодействовавший с объектом.

Метрика msg - текстовое сообщение, создаётся с помощью правил формирования данных.

Шаг 2: настроить смену состояния объекта оператором

Если в объект приходит информация с id, не равным 0, то происходит изменение всех параметров на полученные значения. В сообщении указывается, что состояние изменено авторизованным оператором.

[
  {
    "conditions": [
      {
        "_field": {
          "name": "new.message.id",
          "value": {
            "_neq": "0"
          }
        }
      }
    ],
    "actions": [
      {
        "type": "set",
        "field": "message.state",
        "value": "{{new.message.state}}"
      },
      {
        "type": "set",
        "field": "message.id",
        "value": "{{new.message.id}}"
      },
      {
        "type": "set",
        "field": "message.msg",
        "value": "Оператор поменял состояние объекта"
      }
    ]
  },
...
]

Шаг 3: настроить включение объекта после обрыва и восстановления связи

Если в объект приходит информация с id, равным 0, то необходимо сравнить в каком состоянии находится цифровой двойник. В том случае, если оно отличается от состояния, которое пришло в сообщении, происходит изменение всех параметров на полученные значения и в сообщении указывается, что состояние объекта изменено неизвестным оператором. Так как в условиях нет возможности напрямую сравнить текущее значение с вновь полученным, эта проверка выполняется двумя блоками.

Для выполнения первого блока действий состояние объекта должно быть равно 0, и вновь пришедшее состояние должно быть равно 1:

[
...
  {
    "conditions": [
      {
            "_field": {
              "name": "new.message.id",
              "value": {
                "_eq": "0"
              }
            }
          },
          {
            "_field": {
              "name": "new.message.state",
              "value": {
                "_eq": "1"
              }
            }
          },
          {
            "_field": {
              "name": "current.message.state",
              "value": {
                "_eq": "0"
              }
            }
          }
    ],
    "actions": [
      {
        "type": "set",
        "field": "message.state",
        "value": "{{new.message.state}}"
      },
      {
        "type": "set",
        "field": "message.id",
        "value": "{{new.message.id}}"
      },
      {
        "type": "set",
        "field": "message.msg",
        "value": "Объект был включен"
      }
    ]
  },
...
]

Шаг 4: настроить выключение объекта после обрыва и восстановления связи

Для выполнения второго блока действий состояние объекта должно быть равно 1, и вновь пришедшее состояние должно быть равно 0:

[
...
  {
    "conditions": [
      {
        "_field": {
          "name": "new.message.id",
          "value": {
            "_eq": "0"
          }
        }
      },
      {
        "_field": {
          "name": "new.message.state",
          "value": {
            "_eq": "0"
          }
        }
      },
      {
        "_field": {
          "name": "current.message.state",
          "value": {
            "_eq": "1"
          }
        }
      }
    ],
    "actions": [
      {
        "type": "set",
        "field": "message.state",
        "value": "{{new.message.state}}"
      },
      {
        "type": "set",
        "field": "message.id",
        "value": "{{new.message.id}}"
      },
      {
        "type": "set",
        "field": "message.msg",
        "value": "Объект был включен"
      }
    ]
  }
]