使用自定义片段通过 CEP 创建操作
Create an operation with CEP using a custom fragment
我正在尝试编写自定义 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"
不能像 "name" 这样的键值对工作:"get measurement data" 会有。
尝试将片段封装在片段中似乎也不起作用。
CEL 中的片段参数不是对象。它是 key/value 的列表,其中键是 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 在尝试 POST 时出错。
我正在尝试编写自定义 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"
不能像 "name" 这样的键值对工作:"get measurement data" 会有。 尝试将片段封装在片段中似乎也不起作用。
CEL 中的片段参数不是对象。它是 key/value 的列表,其中键是 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 在尝试 POST 时出错。