設(shè)備透傳上報的原始raw數(shù)據(jù),如何解析成更易讀JSON數(shù)據(jù)格式?
傳感器數(shù)據(jù)輸出是二進(jìn)制,這種方式的數(shù)據(jù)量小,傳輸速度快。但二進(jìn)制數(shù)據(jù)不夠直觀,需要將數(shù)據(jù)解析成更易讀的JSON數(shù)據(jù)格式。本文以溫控器為例,在設(shè)備端采集的原始raw數(shù)據(jù)是:040B5417D49B99,通過數(shù)據(jù)解析腳本在ZWS云端轉(zhuǎn)換成結(jié)構(gòu)化的JSON格式:{“temperature”:29,”humidity”:61}。
1. 建立設(shè)備模型
登錄ZWS物聯(lián)網(wǎng)云平臺,創(chuàng)建設(shè)備類型:溫控器。
2. 添加數(shù)據(jù)字段
進(jìn)入設(shè)備類型的功能塊編輯頁面,添加溫度、濕度數(shù)據(jù)字段。
3. 編寫數(shù)據(jù)解析腳本
根據(jù)業(yè)務(wù)情況編寫數(shù)據(jù)解析的腳本,提交到物聯(lián)網(wǎng)云平臺。
比如,溫控器的數(shù)據(jù)格式如下:
那么,溫控器數(shù)據(jù)解析腳本示例:
//GroovyUtils為通用解析工具import com.zlgcloud.iotplatform.iotmapping.commons.GroovyUtilsimport java.nio.ByteBuffer;
/** * 將二進(jìn)制報文解析成物模型的map數(shù)據(jù) * * @param rawData 二進(jìn)制報文 * @return 物模型數(shù)據(jù) * @description 方法名必須為rawDataToJson,參數(shù)必須是byte[]類型 */static Map rawDataToJson(byte[] rawData) { Map map = new HashMap<>(); Map dataMap = new HashMap<>(); //定義解析數(shù)據(jù)的map,key固定為data,用于存放對應(yīng)事件內(nèi)字段的數(shù)據(jù) map.put("data", dataMap); //設(shè)置數(shù)據(jù)模型配置中定義的數(shù)據(jù)點(diǎn) map.put("event_name", "thermostat_fn.Temp_data");
//初始溫度、濕度為0 float temperature = 0; int humidity = 0;
//開始解析數(shù)據(jù) ByteBuffer byteBuffer = ByteBuffer.wrap(rawData); //從第0個字節(jié)開始讀取 int offset = 0; //讀取長度 int dataLen = byteBuffer.get(offset); offset += 1; //如果長度為4,則同時解析溫度和濕度數(shù)據(jù);否則長度就為2,只解析溫度數(shù)據(jù) if (dataLen == 4) { // 解析溫度 temperature = byteBuffer.getShort(offset); if (temperature >= 4096) { // 負(fù)值 temperature = -1 * (temperature - 4096); } temperature = temperature / 100; //解析濕度 offset += 2; humidity = byteBuffer.getShort(offset); humidity = humidity / 100; } else { //解析溫度 temperature = byteBuffer.getShort(offset); if (temperature >= 4096) { // 負(fù)值 temperature = -1 * (temperature - 4096); } temperature = temperature / 100; }
//將數(shù)據(jù)按數(shù)據(jù)模型配置定義的格式放入返回值中 dataMap.put("temperature", temperature); dataMap.put("humidity", humidity);
return map;}
4. 查看解析后的數(shù)據(jù)
云端添加溫控器設(shè)備,通過DTU設(shè)備將溫控器上線并上報raw數(shù)據(jù),在設(shè)備詳情的實(shí)時數(shù)據(jù)頁面,就能查看解析后的溫濕度數(shù)據(jù)。
?小結(jié)
設(shè)備上報的原始raw數(shù)據(jù),需要云端解析處理成JSON格式,才能直觀監(jiān)測。另外,不同類型的設(shè)備上報的數(shù)據(jù)格式也不一樣,具體的解析腳本需要按照業(yè)務(wù)數(shù)據(jù)格式來編寫,設(shè)備解析方式不一樣。
-
傳感器
+關(guān)注
關(guān)注
2541文章
49961瀏覽量
747520 -
云平臺
+關(guān)注
關(guān)注
1文章
1211瀏覽量
38710 -
數(shù)據(jù)解析
+關(guān)注
關(guān)注
0文章
13瀏覽量
3472
發(fā)布評論請先 登錄
相關(guān)推薦
評論