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

【產品應用】ZWS物聯網云平臺如何下發命令給設備?

ZWS云平臺應用(1)-設備建模

ZWS云平臺應用(6)-設備命令

評論