Создать операцию с CEP, используя пользовательский фрагмент
Я пытаюсь написать собственное правило 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"
который не работает как ключ, пара значений, такая как "имя": "получить данные измерений" будет иметь. Попытка инкапсулировать фрагменты внутри фрагментов тоже не работает.
1 ответ
Параметр фрагментов в 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.