设备原始数据无需适配物模型,在物联网平台云端通过脚本实现二进制数据转换为物模型JSON格式。

背景信息

在大量物联网业务场景中,由于资源受限,或配置较低,设备端不适合直接构造物模型的JSON数据结构体与物联网平台进行直接通信。此时,可以将原数据直接透传到物联网平台,然后在物联网平台控制台,编写数据解析脚本,将设备上行数据解析为物联网平台定义的标准格式(Alink JSON)。

物联网平台接收到来自设备的数据时,先运行解析脚本,将透传的数据转换成Alink JSON格式的数据,再进行业务处理。数据解析流程图如下所示。
图 1. 数据解析架构图
数据解析架构图

配置云端控制台

  1. 创建产品并定义物模型。
    1. 根据设备实际情况,创建产品。
      示例中,选择WiFi入网,数据采用透传/自定义方式。产品信息
    2. 功能定义栏,自定义如下图所示功能。
      包括温度、湿度、二氧化碳、甲醛、PM2.5、光照强度。自定义功能
  2. 创建设备。
    1. 设备页,为该产品创建设备。
      示例中,使用设备序列号作为DeviceName。设备信息
    2. 记录完整的设备证书信息(ProductKey、DeviceName、DeviceSecret),以备后续设备开发使用。

数据解析

  1. 查看设备上行消息。
    已开发完成的设备通电后,配置本地网络的WiFi账号、密码、设备身份信息后,即可在物联网平台看到设备状态为在线
    1. 在物联网平台控制台左侧导航栏选择监控运维>日志服务,选中上面已创建的产品。
    2. 选择上行消息分析页签,单击MessageID,即可查看设备上报消息详情。
      查看设备上报消息详情我们用Hex方式查看设备上报的原始数据。
      0xaa1fc800003710ff0005d76b15001c013400ad0ff0400ffff18003000ff2e
      此时并不能读懂设备数据的业务意义,需要使用阿里云物联网平台云端数据解析能力。
  2. 编写数据解析脚本。
    找到设备开发文档,获取数据协议内容。参考协议,编写解析脚本,处理设备上报的原始数据。下图为某设备数据协议示例。某设备数据协议示例您可以在物联网平台提供的数据解析页面,编辑、提交脚本并模拟数据解析。
    数据解析脚本中需定义支持以下两个方法:
    • Alink JSON格式数据转为设备自定义数据格式:protocolToRawData。
    • 设备自定义数据格式转Alink JSON格式数据:rawDataToProtocol。
    示例中的环境采集设备只有数据上报功能,因此只需要编写上行数据解析函数protocolToRawData,无需实现rawDataToProtocol。
    var PROPERTY_REPORT_METHOD = 'thing.event.property.post';
     
    //上行数据,自定义二进制转物模型JSON
    function rawDataToProtocol(bytes) {
    
        var uint8Array = new Uint8Array(bytes.length);
        for (var i = 0; i < bytes.length; i++) {   
            uint8Array[i] = bytes[i] & 0xff;
        }
    
        var dataView = new DataView(uint8Array.buffer, 0);
    
        var jsonMap = new Object();
           
            //属性上报method
           jsonMap['method'] =PROPERTY_REPORT_METHOD;
           //协议版本号固定字段
           jsonMap['version'] = '1.0';
           //标示该次请求id值
           jsonMap['id'] = new Date().getTime();
           var params = {};
           //12,13对应产品属性中PM2.5
           params['pm25'] =
    (dataView.getUint8(13)*256+dataView.getUint8(12));
           //14,15对应产品属性中 temperature
           params['temperature'] =
    (dataView.getUint8(15)*256+dataView.getUint8(14))/10;
           //16,17对应产品属性中 humidity
           params['humidity'] = 
    (dataView.getUint8(17)*256+dataView.getUint8(16));
           //18,19对应产品属性中co2
           params['co2'] = (dataView.getUint8(19)*256+dataView.getUint8(18));
           //22,23对应产品属性中甲醛hcho
           params['hcho'] =
    (dataView.getUint8(23)*256+dataView.getUint8(22))/100;
           //28,29对应产品属性中光照lightLux
           params['lightLux'] = 
    (dataView.getUint8(29)*256+dataView.getUint8(28));
    
           jsonMap['params'] = params;
    
        return jsonMap;
    }
    
    //下行指令,物模型JSON转二进制格式
    function protocolToRawData(json) {
        var payloadArray = [1];//此设备只有上报数据功能,无法接收云端指令
        return payloadArray;
    }
  3. 模拟数据解析。
    脚本编写完成后,将前面监控日志看到的设备Hex数据拷贝出来,粘贴到模拟输入框,单击运行,可以在右侧看到运行结果。确认数据正确后,提交脚本。模拟数据解析

    数据解析脚本提交后,进入设备详情页。选择运行状态页,显示经脚本解析后设备采集到的环境数据。

    查看设备运行状态

名词解释

  • 物模型

    是对设备在云端的功能描述,包括设备的属性、服务和事件。物联网平台通过定义一种物的描述语言来描述物模型,称之为 TSL(即 Thing Specification Language),采用JSON格式,您可以根据TSL组装上报设备的数据。

  • Alink协议

    阿里云定义的设备与云端之间的通信协议。

  • 设备证书
    设备证书指ProductKey、DeviceName、DeviceSecret。
    • ProductKey:是物联网平台为产品颁发的全局唯一标识。
    • DeviceName:在注册设备时,自定义的或自动生成的设备名称,具备产品维度内的唯一性。
    • DeviceSecret:物联网平台为设备颁发的设备密钥,和DeviceName成对出现。
  • 数据解析脚本

    针对采用透传格式/自定义数据格式的设备,需要在云端编写数据解析脚本,将设备上报的二进制数据或自定义的JSON数据,转换为平台上的Alink JSON数据格式。

更多最佳实践

点击查看更多阿里云最佳实践