【问题标题】:Real Time Processing - read a managed object fragment实时处理 - 读取托管对象片段
【发布时间】:2016-09-26 23:26:50
【问题描述】:

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

我们的设备报告一个测量值,该测量值具有我们在每个设备的托管对象片段中存储的目标值。我想创建一个设备测量,它是测量和目标之间的差异,它似乎是 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

【问题讨论】:

  • 你应该直接在语句中做,而不是外面的变量。因此,将 setpoint 替换为 getNumber(findManagedObjectById(m.measurement.source.value), "uty_Setpoint.value") measure.source.value 无法解析)
  • 这就解释了为什么每次我重新部署它都会工作一次!谢谢。

标签: cumulocity


【解决方案1】:

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

findManagedObjectById(measurement.source.value)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多