QuarkIoE事件语言 - 调用外部API

时间:2016-02-09 12:16:07

标签: cumulocity

从我在文档中看到的内容中,可以在编写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的更多样本或文档吗?

3 个答案:

答案 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之外自由查询外部服务。

目前,您仅限于将连接到的内置服务。短信或电话