【问题标题】:Create an operation with CEP using a custom fragment使用自定义片段通过 CEP 创建操作
【发布时间】:2018-10-09 14:51:08
【问题描述】:

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

它不能用作键值对,例如 "name": "get measurement data"。 尝试将片段封装在片段中似乎也不起作用。

【问题讨论】:

    标签: complex-event-processing operation esper cumulocity


    【解决方案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 上,您才能更改它。尝试 POST 时,保留该行将导致 API 出错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多