实时处理 - 读取托管对象片段

时间:2016-09-23 11:14:55

标签: cumulocity

我想使用事件处理功能来创建派生测量值。

我们的设备会报告一个度量值,该度量值包含我们在托管对象片段中按设备存储的目标值。我想创建一个设备测量,它是测量和目标之间的差异,它似乎是RTP / CEL实现的理想候选者。

我查看了real time processing指南,但无法理解如何从托管对象中读取片段。

编辑。我更新了我的代码,我几乎就在那里,我无法弄清楚如何使用测量中的传入deviceId来获取我的片段数据。

create variable ManagedObject device =  findManagedObjectById(m.measurement.source.value);
create variable BigDecimal setpoint = getNumber(device, "uty_Setpoint.value");

insert into CreateMeasurement
select
  m.measurement.time as time,
  m.measurement.source.value as source,
  "uty_Pressure_delta" as type,
   {"uty_Pressure_delta.T.value", getNumber(m, "uty_Pressure.pressure.value") - setpoint,
   "uty_Pressure_delta.T.unit", "percent"  } as fragments
from MeasurementCreated m
where getNumber(m, "uty_Pressure.pressure.value") is not null

1 个答案:

答案 0 :(得分:1)

第一步是根据测量来源查询对象

findManagedObjectById(measurement.source.value)

您还可以查看geofence示例,该示例还从设备对象中读取一些参数。

http://cumulocity.com/guides/event-language/geofence/

之后您可以使用以下功能访问片段:

getNumber(deviceObject, "myFragmentInDevice.value")

getString(deviceObject, "myFragmentInDevice.value")

我会确保将目标值存储为数字而不是字符串,因为这样您就可以使用将返回BigDecimal的getNumber函数。

http://cumulocity.com/guides/event-language/functions/#utility-functions