Создать операцию с CEP, используя пользовательский фрагмент - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь написать собственное правило CEP, которое создает операцию для агента для сбора измерения, которое вызвало запуск правила.Правило CEP выглядит следующим образом:

insert into CreateOperation
select
  OperationStatus.PENDING as status,
  "5345" as deviceId,
  {
    "c8y_GetData", {
        "name": "get measurement data",
        "measurementID": measurementEvent.measurement.id.value,
        "measurementType": measurementEvent.measurement.type
    }
  } as fragments
from MeasurementCreated measurementEvent
where measurementEvent.measurement.type = "c8y_TemperatureMeasurement";

Когда я использую простые строки для полей measureEvent.measurement ... (например, "testString"), правило работает.Но эти строки вызывают ошибки при вводе, как в этом примере.Изменение ":" на "," как в примерах из документации, заставляет правило работать, но в результате получается

"name",
"get measurement data",
"measurementID",
"176438",
"measurementType",
"c8y_TemperatureMeasurement"

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

1 Ответ

0 голосов
/ 08 октября 2018

Параметр фрагментов в CEL не является объектом.Это список ключа / значения, где ключ является JSONPath.Все разделено запятыми (я знаю, это выглядит странно).Фигурные скобки в Esper на самом деле указывают на массив, а не на объект.

Ваше утверждение должно выглядеть следующим образом:

insert into CreateOperation
select
  "5345" as deviceId,
  {
    "c8y_GetData.name", "get measurement data",
    "c8y_GetData.measurementID", measurementEvent.measurement.id.value,
    "c8y_GetData.measurementType", measurementEvent.measurement.type
  } as fragments
from MeasurementCreated measurementEvent
where measurementEvent.measurement.type = "c8y_TemperatureMeasurement";

Также обратите внимание, что я отбросил строку с OperationStatus.На POST операции вы не можете установить статус.Это будет автоматически в состоянии ОЖИДАНИЯ.Только на PUT вы можете изменить это.Сохранение строки приведет к ошибке в API при попытке POST.

...