从我在文档中看到的内容中,可以在编写CEL时查询数据库以获取其他数据,但是是否可以调用外部API?是否还可以更新“度量”以填充缺失值。
例如,如果我想通过调用特定API添加“c8y_Position”细分的“alt”值来更新测量值:https://maps.googleapis.com/maps/api/elevation/json?locations=40.714728,-73.998672
是否有可能写下这样的陈述:
expression string js:getElevation(lng, lat) [
function request(lng, lat, callback) {
var xobj = new XMLHttpRequest();
// true parameter denotes asynchronous
xobj.open('GET', 'https://maps.googleapis.com/maps/api/elevation/json?locations=' + lat + ', ' + lng + ', true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
callback(xobj.responseText);
}
};
xobj.send(null);
}
request(lng, lat, function (data) {
return data.results.elevation;
});
]
insert into UpdateMeasurement
select
e.id as id,
getElevation(
getNumber(e, "c8y_Position.lng.value"),
getNumber(e, "c8y_Position.lat.value")
) as c8y_Position.alt
from MeasurementCreated e
是否可以进行此类处理。您有关于CEL的更多样本或文档吗?
答案 0 :(得分:2)
更新:
现在可以使用SendRequest流(https://www.cumulocity.com/guides/event-language/data-model#sendrequest)从CEL调用外部API。可以通过ResponseReceived(https://www.cumulocity.com/guides/event-language/data-model/#response-received)流接收结果。
之前的回复:
您可以使用QuarkIoE应用程序(https://zapier.com/zapbook/cumulocity/)将实时事件发送到Zapier,并从那里进入许多其他应用程序。除了Zapier中的500多个应用程序之外,还有一个通用的Webhooks应用程序(https://zapier.com/zapbook/webhook/),它允许基于QuarkIoE事件发送任何类型的REST请求。
它可能不适用于您的直接示例,但它仍然是一个非常有用的工具。
(您无法在QuarkIoE中更新测量值,您必须创建一个新的测量值;您还需要为可以在地图中显示的位置更新创建事件。)
答案 1 :(得分:1)
为了记录,我也遇到了这个问题,最后使用Amazon Web Services(AWS)Lambda和Cumulocity的REST API来解决它。您可以使用scheduled Webtasks代替AWS / Lambda来获得更简单的解决方案。基本解决方案是:
按计划,运行AWS Lambda函数,该函数从外部源检索数据,执行一些处理,并使用REST API在QuarkIoE中创建事件。
在QuarkIoE中编写CEL以处理新事件并更新设备寄存器。
答案 2 :(得分:0)
目前无法在QuarkIoE之外自由查询外部服务。
目前,您仅限于将连接到的内置服务。短信或电话