使用自定义片段使用CEP创建操作

时间:2018-10-08 12:02:05

标签: complex-event-processing operation esper cumulocity

我正在尝试编写一个自定义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";

当我为MeasurementEvent.measurement ...字段使用简单的字符串时(例如“ testString”),该规则有效。但是这些行像在本示例中那样键入时会导致错误。像在文档中的示例中一样,将“:”更改为“,”会使规则起作用,但结果是

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

不能用作键,“名称”:“获取测量数据” 这样的值对将具有。 试图将片段封装在片段中似乎也不起作用。

1 个答案:

答案 0 :(得分:1)

CEL中的fragments参数不是对象。它是键/值的列表,其中键是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上,您无法设置状态。它将自动处于PENDING状态。仅在PUT上可以更改它。在尝试过帐时,保持该行将导致API错误。