在一些物联网业务场景中,由于资源受限或配置较低,设备端不适合直接构造物模型的JSON数据结构体与物联网平台进行直接通信。这种情况下,可以将设备上报的原数据直接透传到物联网平台。物联网平台调用您提交的数据解析脚本,将设备上行数据解析为物联网平台定义的标准格式(Alink JSON),再进行业务处理。

背景信息

数据解析流程图如下所示。

iot

设备端接入物联网平台

本文以环境数据采集设备为例。

  1. 登录物联网平台控制台
  2. 在左侧导航栏,选择设备管理 > 产品,再单击创建产品,创建一个产品。
    表 1. 产品信息
    参数 说明
    产品名称 自定义产品名称。
    所属品类 选择自定义品类
    节点类型 选择直连设备
    连网方式 选择WiFi
    数据格式 选择透传/自定义
    认证方式 选择设备密钥
  3. 产品创建成功后,单击前往创建物模型
  4. 单击编辑草稿 > 添加自定义功能,添加以下属性。
    物模型属性
  5. 单击发布更新将物模型发布为正式版。
  6. 在左侧导航栏,选择设备,再单击添加设备,在刚创建的产品下添加设备。
    设备创建成功后,获取设备证书信息(ProductKey、DeviceName和DeviceSecret)。
  7. 开发设备端,并测试运行。
    本示例中使用物联网平台提供的设备端SDK进行开发。设备端开发操作说明,请参见Link Kit SDK文档

    设备端开发完成后,设置设备端上报的模拟物模型数据,测试运行设备端SDK。

    设备端成功接入物联网平台后,在物联网平台控制台设备页,该设备状态显示为在线

    监控运维 > 日志服务中,搜索、查看该设备的上行消息分析。单击MessageID,即可查看设备上报消息详情。

    本示例中,设备上报的Hex格式消息内容为:0xaa1fc800003710ff0005d76b15001c013400ad04ffff0400ffff18003000ff2e

编写数据解析脚本

在物联网平台控制台,编辑、提交脚本,并模拟数据解析。

  1. 在物联网平台控制台左侧导航栏,选择设备管理 > 产品
  2. 产品页,单击产品对应的查看
  3. 产品详情页,选择数据解析页签。
  4. 数据解析页签下的编辑脚本输入框中,输入数据解析脚本。

    根据设备数据协议内容编写解析脚本。本示例中的设备数据协议如下。

    iot

    示例中的环境采集设备只有数据上报功能,因此只需要编写上行数据解析函数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;
            //协议版本号,固定字段,取值1.0
            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;
    }
  5. 测试数据解析。
    1. 选择模拟类型为设备上报数据
    2. 模拟输入下的输入框中,输入一个模拟数据。
      模拟数据可使用测试运行设备端后,在日志服务页,查看到的设备端上报数据的Hex格式内容:0xaa1fc800003710ff0005d76b15001c013400ad04ffff0400ffff18003000ff2e
    3. 单击执行

      右侧运行结果栏显示解析结果如下图。

      iot
  6. 确认脚本能正确解析数据后,单击提交,将脚本提交到物联网平台系统。

脚本提交后,设备端再向物联网平台上报数据时,物联网平台会调用脚本进行数据解析。解析后的数据将显示在设备对应的设备详情页的运行状态页签下。

iot