我正在尝试编写一个自定义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"
不能用作键,“名称”:“获取测量数据” 这样的值对将具有。 试图将片段封装在片段中似乎也不起作用。
答案 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错误。