存量设备如何上云? 这是全网最方便的方式

Posted HaaS技术社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存量设备如何上云? 这是全网最方便的方式相关的知识,希望对你有一定的参考价值。

 

本文将具体介绍如何通过符合阿里云物联网平台接入协议规范的DTU设备,快速实现存量串口输出设备接入阿里云物联网平台。

背景信息

在工业、农业、医疗、城市、楼宇、园区等多种场景中,存在着大量的通过串口与外界通信的存量设备。对此类设备进行物联网改造时,往往无法修改设备本身的串口传输协议,只能在云端进行数据解析工作。为了快速使此类设备接入和使用阿里云物联网平台,阿里云联合硬件合作伙伴,共同定义了可以通过简单配置即可接入物联网平台平台的透传数据DTU设备。

图 1. 数据流转流程图

本地设备通过串口与DTU设备相连,DTU通过2G、3G、4G或Ethernet网络与阿里云物联网平台相连,由DTU设备实现阿里云物联网平台的接入协议。设备证书将被配置到DTU中,由DTU代表设备与物联网平台进行数据通信。

创建产品和设备

在物联网平台创建产品和设备,获取设备证书信息(ProductKey、DeviceName和DeviceSecret)。

  1. 登录物联网平台控制台
  2. 创建产品。

             a. 在左侧导航栏,选择设备管理>产品。 

             b. 在产品管理页,单击创建产品。

             c. 填入产品信息,单击确定。完成产品创建。

                  存量设备的数据按其本身格式通过DTU设备透传到物联网平台,因此需创建数据格式为透传/自定义的产品。产品信息设置如下图所示。

 3. 创建设备。

        a. 在控制台左侧导航栏,选择设备。

        b. 在设备管理页,单击添加设备。

        c. 选择刚创建的产品,输入设备名称和备注名称,单击确定。完成设备创建。

设备创建成功后,会弹出设备证书信息。您也可以在设备管理页,单击设备对应的查看按钮,进入设备详情页查看设备证书信息。该设备证书将被配置到DTU设备端。

 

定义物模型

物模型指将物理空间中的实体进行数字化,并在云端构建该实体的数据模型。在物联网平台中,定义物模型即定义产品功能(包括属性、事件、服务)。完成功能定义后,系统将自动生成该产品的物模型。本文以电机变频设备为例,需创建电机转速、电流和设置转速三个属性。

  1. 在物联网平台控制台的左侧导航栏,选择设备管理>产品。
  2. 在产品管理页,找到之前创建的产品,单击对应的查看按钮。
  3. 在产品详情页,选择功能定义,再单击自定义功能对应的添加功能。
  4. 根据下表逐个添加属性。
    功能类型功能名称标识符数据类型取值范围单位读写类型
    属性转速speedint320 ~ 3000rpm只读
    属性电流currentint320 ~ 30A只读
    属性设置转速setspeedInt320 ~ 3000rpm读写

编辑数据解析脚本

阿里云物联网平台支持的标准数据格式为Alink JSON格式,而存量设备的原始数据通过DTU设备透传到物联网平台,物联网平台不能直接处理此类数据。物联网平台提供数据解析功能,可将上行的自定义格式数据解析为Alink JSON格式;将下行数据解析为设备的自定义数据格式。您需在物联网平台控制台上,提交数据解析脚本供物联网平台调用。数据解析脚本需根据设备上报数据和云端下发数据进行编写。

  1. 在物联网平台控制台上,变频电机产品对应的产品详情页,选择数据解析页签。
  2. 在编辑脚本输入框中,输入解析脚本。

    说明 脚本代码中属性的标识符必须与定义物模型时定义的一致。

    点击查看数据解析脚本编写指导

    本示例设备发送至云端的数据为16进制格式,因此脚本需将16进制格式数据格式转换为Alink JSON格式;并将云端下发的Alink JSON格式数据转换为16进制格式。本示例脚本如下:

    var ALINK_ID = "12345";
    var ALINK_VERSION = "1.1";
    var ALINK_PROP_POST_METHOD = 'thing.event.property.post';
    // var ALINK_EVENT_TEMPERR_METHOD = 'thing.event.TempError.post';
    // var ALINK_EVENT_HUMIERR_METHOD = 'thing.event.HumiError.post';
    var ALINK_PROP_SET_METHOD = 'thing.service.property.set';
    // var ALINK_SERVICE_THSET_METHOD = 'thing.service.SetTempHumiThreshold';
    /* * * * * *
    * 传入参数 ->
    * 0102 // 共2个字节 * 输出结果 ->
    *{"method":"thing.event.TempError.post","id":"12345","params":{"Temperature":
    2},"version":"1.1"}
    * 传入参数 ->
    * 0202 // 共2个字节 * 输出结果 ->
    *{"method":"thing.event.HumiError.post","id":"12345","params":{"Humidity":2},
    "version":"1.1"}
    */
    /*此函数用于实现设备上发数据到物模型的转换*/
    function rawDataToProtocol(bytes) {
        /*将设备上报的RAW数据转换为数组其中bytes对象中存储着设备上报RAW数据*/ 
        var uint8Array = new Uint8Array(bytes.length);
        for (var i = 0; i < bytes.length; i++) {
            uint8Array[i] = bytes[i] & 0xff;
        }
    
        var params = {};                            // 定义属性存放对象
        var jsonMap = {};                           // 定义模拟Alink数据报对象
    
        /*填写Alink数据报协议头部分*/
        jsonMap['version'] = ALINK_VERSION;         // Alink 协议版本号
        jsonMap['id'] = ALINK_ID;                   // 模拟消息ID
        jsonMap['method'] = ALINK_PROP_POST_METHOD;// 模拟设备上行数据方法:设备属性上报
        /*填写Alink数据报属性部分*/          
        params['speed']= uint8Array[0];            // 将收到的第一个字节转换为转速值
        params['current'] = uint8Array[1];          // 将收到的第二个字节转换为电流
        jsonMap['params'] = params;                 // 将参数打包到数据帧中
    
        return jsonMap;                             // 返回时会发送给IoT设备管理平台
    
    }
     
    //以下是部分辅助函数
    function buffer_uint8(value)
    {
        var uint8Array = new Uint8Array(1);
        var dv = new DataView(uint8Array.buffer,0);
        dv.setUint8(0, value);
        return [].slice.call(uint8Array);
    }
    function buffer_int16(value)
    {
        var uint8Array = new Uint8Array(2);
        var dv = new DataView(uint8Array.buffer,0);
        dv.setInt16(0, value);
        return [].slice.call(uint8Array);
    }
    
    function buffer_int32(value)
    {
        var uint8Array = new Uint8Array(4);
        var dv = new DataView(uint8Array.buffer,0);
        dv.setInt32(0, value);
        return [].slice.call(uint8Array);
    }
    function buffer_float32(value)
    {
        var uint8Array = new Uint8Array(4);
        var dv = new DataView(uint8Array.buffer,0);
        dv.setFloat32(0, value);
        return [].slice.call(uint8Array);
    }
    
    /*此函数实现由云端下发数据转换为到设备能识别的16进制数*/
    function protocolToRawData(json)
    {
        var method = json['method'];
        var id = json['id'];
        var version = json['version'];
    
        var payloadArray = [];
        if (method == ALINK_PROP_SET_METHOD)    // 接收来自IoT设备管理平台的“设置设备属性”的命令
        {
            var send_params = json['params'];
            var prop_cur = send_params['setspeed'];   // 将设置的具体值抽取出来
    
             //按照自定义协议格式拼接 rawdata
            payloadArray = payloadArray.concat(buffer_uint8(0x55)); // 第一字节数据头,标识数据功能用户自定义
            payloadArray = payloadArray.concat(buffer_uint8(prop_cur)); // 第二字节,具体的设置值
        }
    
         return payloadArray;    // 返回时,将数据发送至设备端。
    }
  3. 测试脚本。
    • 测试上行数据解析。

      1. 选择模拟类型为设备上报数据。
      2. 在模拟输入下的输入框中,输入一个模拟数据。

        本示例脚本的逻辑为:数据的第一个字节为转速值,第二个字节为电流值。例如6410 ,64表示转速为100;10表示电流为16安培。

      3. 单击运行。
      4. 在右侧运行结果栏,查看解析结果。
    • 测试下行数据解析。

      1. 选择模拟类型为设备接受数据。
      2. 在模拟输入下的输入框中,输入模拟下行数据。下行数据示例如下:
        {
            "method": "thing.service.property.set",
             "id": "12345",
             "version": "1.0",
             "params": {
             "setspeed": 123
            }
        }
      3. 单击运行。
      4. 在右侧运行结果栏,查看解析结果。
  4. 确认脚本可用后,单击提交按钮,将脚本提交到物联网平台。

    注意 物联网平台不能调用草稿状态的脚本,只有已提交的脚本才会被调用来解析数据。

设备端开发

在本示例中,使用电脑模拟DTU设备端。电脑通过USB转串口与DTU连接。

注意 请确保DTU可以正确连接Internet。

  1. 配置DTU设备。

    本示例使用F2x16 DTU设备。

    1. 连接DTU设备与电脑USB口。

    2. 在电脑上,打开DTU配置工具,配置正确的串口号,设置波特率,并打开串口。

    3. 单击右下方登陆配置按钮,使DTU进入配置状态。
    4. 单击读取配置按钮,获取现有DTU的配置。

    5. 确保工作协议为port。在右侧配置界面下,单击串口,再进行本地串口配置。配置信息如下图。

    6. 单击IoT接入配置,填入从物联网平台获取的设备证书信息和地域。

    7. 单击下方下发配置按钮,使配置生效。

      如果配置下发失败,请单击退出登录后,重新配置。

    8. 完成配置后,单击退出登录按钮,使DTU进入正常工作模式。
    9. 将DTU断电,再重新上电。当DTU上online灯点亮后,即表示已连接上物联网平台。

      您还可以在物联网平台控制台上,查看设备的状态。

  2. 测试数据通信。
    1. 测试上传数据。测试DTU设备代替存量设备上传数据到物联网平台。
      1. 打开串口调试工具。

        注意 在本地电脑上,使用串口调试工具进行设备数据的收发模拟前,请务必确保DTU配置工具已经关闭。

      2. 设置串口调试工具的相关参数,并打开串口,然后单击发送。

        根据物联网平台上的物模型定义,模拟发送转速和电流两个参数到云端。假定转速为150,电流为10安培,则在串口工具中,按先后顺序填写96 0A两个16进制数。

      3. 数据发送后,在物联网平台控制台,设备对应的设备详情页运行状态页签下,打开实时刷新开关。稍后就可以看到上传的数据。

    2. 测试接收云端下发数据。使用物联网平台调试真实设备功能,下发设置转速指令,测试DTU接收云端下发数据。

      云端和设备端均能接收到正确数据,说明配置成功。

      1. 在物联网平台控制台左侧导航栏,选择监控运维>在线调试。
      2. 选择要调试的设备,再选择调试真实设备。

      3. 选择功能为已定义的转速设置属性,方法选择为设置,输入一个测试值,单击发送指令。

      4. 指令发送成功后,在DTU串口调试工具的接收框中,查看接收到的数据。接收到的数据中,55为数据头,数据值为64(即十进制的100)。

名词解释

  • 物模型

    阿里云物联网平台将设备抽象为”属性“,”事件“,”服务“三大要素。设备的三要素抽象描述,称为物模型。

  • 属性

    一般用于描述设备运行状态,例如电机的转速,灯的开关和亮度,水的温度。

  • 事件

    设备运行时的事件,一般包含需要被外部感知和处理的通知信息,例如开关机通知、报警等。

  • 服务

    设备可被外部调用的能力,例如调整电机转速。

  • 设备证书

    设备证书指ProductKey、DeviceName和DeviceSecret,是阿里云物联网平台认证设备的标识。设备证书信息不可泄露。

  • ProductKey

    物联网平台为产品颁发的全局唯一标识。

  • DeviceName

    在注册设备时,自定义的或系统自动生成的设备名称,具备产品维度内的唯一性。

  • DeviceSecret

    物联网平台为设备颁发的设备密钥。

以上是关于存量设备如何上云? 这是全网最方便的方式的主要内容,如果未能解决你的问题,请参考以下文章

IoT 设备免烧录三元组快速上云

蚂蚁集团SOFAStack:新一代分布式云PaaS平台,打造企业上云新体验

蚂蚁集团SOFAStack:新一代分布式云PaaS平台,打造企业上云新体验

云原生解决什么问题?

物联网平台存量设备如何一键迁移企业版实例

存量设备通过DTU进入阿里云IoT平台