設(shè)備數(shù)據(jù)上云,解析后的設(shè)備數(shù)據(jù)一般是時序存儲,但純粹的設(shè)備時序數(shù)據(jù)無法給用戶帶來更大的業(yè)務(wù)價值,需要根據(jù)業(yè)務(wù)需求進(jìn)行額外的數(shù)據(jù)統(tǒng)計(jì)分析。本文將介紹如何利用ZWS云平臺的自定義統(tǒng)計(jì)算法對數(shù)據(jù)進(jìn)行統(tǒng)計(jì)。
??應(yīng)用場景
為什么需要自定義統(tǒng)計(jì)算法?由于業(yè)務(wù)需求各式各樣,有的需要求平均值,有的需要求累加值,不同維度需要不同統(tǒng)計(jì)算法,開發(fā)者可以通過自定義統(tǒng)計(jì)算法來滿足對應(yīng)的項(xiàng)目需求。
??統(tǒng)計(jì)數(shù)據(jù)準(zhǔn)備
首先,需要在ZWS云平臺中創(chuàng)建設(shè)備并上報設(shè)備數(shù)據(jù):
??統(tǒng)計(jì)算法
ZWS云平臺的統(tǒng)計(jì)算法有兩種,分別是內(nèi)置統(tǒng)計(jì)算法和自定義統(tǒng)計(jì)算法。
內(nèi)置算法為云平臺定義好的算法,可以直接關(guān)聯(lián)設(shè)備進(jìn)行統(tǒng)計(jì),無需關(guān)心統(tǒng)計(jì)算法內(nèi)容和過程。
自定義算法可以自己擬定數(shù)據(jù)統(tǒng)計(jì)的方式(例如取某段時間的最大最小值、總和等等)來統(tǒng)計(jì)設(shè)備數(shù)據(jù)。
??創(chuàng)建自定義統(tǒng)計(jì)算法
不同于內(nèi)置算法,自定義算法從請求參數(shù)、統(tǒng)計(jì)過程、統(tǒng)計(jì)結(jié)果均由用戶自定義,需要開發(fā)者編寫腳本。目前自定義統(tǒng)計(jì)中支持了Groovy和JavaScript兩種腳本語言解析。
1. 請求參數(shù)
類別:云平臺提供給自定義算法的參數(shù);
參數(shù)名:參數(shù)的別名。
在云平臺中,提供了6種參數(shù)給自定義算法的開發(fā)者使用:
devType:設(shè)備類型;
devId:創(chuàng)建設(shè)備定義的ID,可以用于選取一個設(shè)備進(jìn)行統(tǒng)計(jì);
dataSource:設(shè)備類型功能塊中的某一個字段;
dataCompareOperation:字段的比較條件,有大于、小于和等于;
dataValue:需要比較的數(shù)據(jù)值;
group:軟件分組,可以對一整個軟件分組進(jìn)行統(tǒng)計(jì)。
2.算法代碼
統(tǒng)計(jì)數(shù)據(jù)的過程代碼,可以使用Groovy或者JavaScript語言編寫。
3.返回參數(shù)
定義統(tǒng)計(jì)后結(jié)果顯示的字段。
這里以統(tǒng)計(jì)一小時內(nèi)設(shè)備的某個數(shù)據(jù)的總和為例,編寫一個JavaScript腳本:
// 載入需要實(shí)現(xiàn)的接口 var DataStatisticScriptMethod = Java.type("com.zlgcloud.iotplatform.iotdata.service.data.statistics.DataStatisticScriptMethod"); // 創(chuàng)建繼承實(shí)現(xiàn)接口的類 var JsDataStatisticScriptMethod = Java.extend(DataStatisticScriptMethod); // 創(chuàng)建func對象 var func = new JsDataStatisticScriptMethod() { execute: function(param) { //獲取創(chuàng)建算法頁面的請求參數(shù),參數(shù)值會由云平臺根據(jù)算法實(shí)例的選擇項(xiàng),進(jìn)行自動填充 var thirdThingsId = param.get("devId"); var infoModelId = param.get("devType"); var property = param.get("property"); //可以自定義統(tǒng)計(jì)時間范圍,如果查詢條件沒有range,則會根據(jù)算法實(shí)例的數(shù)據(jù)開始時間和數(shù)據(jù)結(jié)束時間范圍進(jìn)行統(tǒng)計(jì) var currentTime = new Date().valueOf(); var anHourAgo = currentTime - 3600000; // 拼裝elasticseach 查詢的dsl // 這里根據(jù)業(yè)務(wù)需要設(shè)置數(shù)據(jù)范圍. 查詢時會限制租戶和用戶管理的設(shè)備. 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 } } } ] } } }; //獲取統(tǒng)計(jì)結(jié)果 var result = Java.super(func).queryEs(infoModelId, esParam); var rtn = {"result_in_hour":result['aggregations']['result_in_hour']['value']}; return rtn; } }
將腳本復(fù)制到自定義算法中。
同時創(chuàng)建實(shí)例,給設(shè)備的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)。
執(zhí)行算法過后,可以看到自定義統(tǒng)計(jì)結(jié)果。
審核編輯:劉清
-
javascript語言
+關(guān)注
關(guān)注
0文章
3瀏覽量
961
原文標(biāo)題:【產(chǎn)品應(yīng)用】如何利用IoT云平臺統(tǒng)計(jì)設(shè)備數(shù)據(jù)?— 進(jìn)階篇
文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論