使用自定义片段通过 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 时出错。