
應用場景
市面上生產的傳統設備,往往不具備聯網能力,且外界通信主要通過串口傳輸二進制數據。在將這些設備接入物聯網平臺,進行數字化管理過程中,會遇到一個問題“如何將上報的二進制數據變成更易讀的JSON數據?”,比如:上報“01040209E8A9”如何變成“溫度:25.36℃”,這個將原始數據轉換成JSON數據的過程就是數據解析。
數據解析流程
數據解析簡化流程:黑盒二進制數據->解析處理->易讀JSON數據。
數據解析配置
* 說明:溫控器不具備入網能力,這里用DTU作為網關透傳。

后續的解析腳本會按照模型設置的數據點來返回解析后的數據。
2. 配置數據解析腳本


//GroovyUtils為通用解析工具
import com.zlgcloud.iotplatform.iotmapping.commons.GroovyUtils
import 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", "MX_TEMP_fn.raw");
//初始溫度、濕度為0
float temperature = 0;
float 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;
}
說明:
1. 解析腳本中支持對多個數據點進行解析處理,不僅限于兩個數據點。
2. 解析腳本中的數據點要與數據模型中配置的一致,否則會解析保存失敗。
將編寫好的解析腳本配置到溫控器的設備類型上:
3.查看解析后的數據







原文標題:【產品應用】IoT云平臺如何識別設備透傳的黑盒數據?
文章出處:【微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。
-
致遠電子
+關注
關注
13文章
412瀏覽量
31911
原文標題:【產品應用】IoT云平臺如何識別設備透傳的黑盒數據?
文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
告別繁瑣的云平臺開發!IoT_CLOUD之 百度云

評論