应用场景
上一篇《如何利用IoT云平台统计设备数据?— 基础篇》介绍了如何运用ZWS云平台中的内置统计算法进行数据统计,这次将介绍如何创建自定义统计算法。
自定义算法可以自己拟定数据统计的方式(例如取某段时间的最大最小值、总和等等)来统计设备数据。
在云平台中,提供了6种参数给自定义算法的开发者使用:
devType:设备类型;
devId:创建设备定义的ID,可以用于选取一个设备进行统计;
dataSource:设备类型功能块中的某一个字段;
dataCompareOperation:字段的比较条件,有大于、小于和等于;
dataValue:需要比较的数据值;
统计数据的过程代码,可以使用Groovy或者JavaScript语言编写。
3. 返回参数
定义统计后结果显示的字段。
// 载入需要实现的接口
var DataStatisticScriptMethod = Java.type("com.zlgcloud.iotplatform.iotdata.service.data.statistics.DataStatisticScriptMethod");
// 创建继承实现接口的类
var JsDataStatisticScriptMethod = Java.extend(DataStatisticScriptMethod);
// 创建func对象
var func = new JsDataStatisticScriptMethod() {
execute: function(param) {
//获取创建算法页面的请求参数,参数值会由云平台根据算法实例的选择项,进行自动填充
var thirdThingsId = param.get("devId");
var infoModelId = param.get("devType");
var property = param.get("property");
//可以自定义统计时间范围,如果查询条件没有range,则会根据算法实例的数据开始时间和数据结束时间范围进行统计
var currentTime = new Date().valueOf();
var anHourAgo = currentTime - 3600000;
// 拼装elasticseach 查询的dsl
// 这里根据业务需要设置数据范围. 查询时会限制租户和用户管理的设备.
var esParam = {
"aggregations": {
"result_in_hour": {
"sum": {
"field": "data." + property
}
}
},
"query": {
"bool":{
"must": [
{
"term": {
"third_things_id.keyword": thirdThingsId
}
},
{
"range": {
"timestamp": {
"gte": anHourAgo,
"lt": currentTime
}
}
}
]
}
}
};
//获取统计结果
var result = Java.super(func).queryEs(infoModelId, esParam);
var rtn = {"result_in_hour":result['aggregations']['result_in_hour']['value']};
return rtn;
}
}
将脚本复制到自定义算法中。
同时创建实例,给设备的数据进行统计。
执行算法过后,可以看到自定义统计结果。
关联产品
更多往期文章,请点击“ 阅读原文 ”。