ZWS云平台应用(5)-raw数据解析

描述

设备透传上报的原始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格式,才能直观监测。另外,不同类型的设备上报的数据格式也不一样,具体的解析脚本需要按照业务数据格式来编写,设备解析方式不一样。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分