物联网行业知识|存量设备通过DTU进入阿里云IoT平台

物联网行业知识|存量设备通过DTU进入阿里云IoT平台
文章图片

本文将具体介绍如何通过符合阿里云物联网平台接入协议规范的DTU设备,快速实现存量串口输出设备接入阿里云物联网平台。
背景信息 在工业、农业、医疗、城市、楼宇、园区等多种场景中,存在着大量的通过串口与外界通信的存量设备。对此类设备进行物联网改造时,往往无法修改设备本身的串口传输协议,只能在云端进行数据解析工作。为了快速使此类设备接入和使用阿里云物联网平台,阿里云联合硬件合作伙伴,共同定义了可以通过简单配置即可接入物联网平台平台的透传数据DTU设备。
图 1. 数据流转流程图
物联网行业知识|存量设备通过DTU进入阿里云IoT平台
文章图片

本地设备通过串口与DTU设备相连,DTU通过2G、3G、4G或Ethernet网络与阿里云物联网平台相连,由DTU设备实现阿里云物联网平台的接入协议。设备证书将被配置到DTU中,由DTU代表设备与物联网平台进行数据通信。
创建产品和设备 在物联网平台创建产品和设备,获取设备证书信息(ProductKey、DeviceName和DeviceSecret)。

  1. 登录物联网平台控制台。
  2. 创建产品。
    1. 在左侧导航栏,选择设备管理>产品。
    2. 在产品管理页,单击创建产品。
    3. 填入产品信息,单击确定。完成产品创建。 存量设备的数据按其本身格式通过DTU设备透传到物联网平台,因此需创建数据格式为透传/自定义的产品。产品信息设置如下图所示。
      物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

  3. 创建设备。
    1. 在控制台左侧导航栏,选择设备。
    2. 在设备管理页,单击添加设备。
    3. 选择刚创建的产品,输入设备名称和备注名称,单击确定。完成设备创建。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

      设备创建成功后,会弹出设备证书信息。您也可以在设备管理页,单击设备对应的查看按钮,进入设备详情页查看设备证书信息。该设备证书将被配置到DTU设备端。
定义物模型 物模型指将物理空间中的实体进行数字化,并在云端构建该实体的数据模型。在物联网平台中,定义物模型即定义产品功能(包括属性、事件、服务)。完成功能定义后,系统将自动生成该产品的物模型。本文以电机变频设备为例,需创建电机转速、电流和设置转速三个属性。
  1. 在物联网平台控制台的左侧导航栏,选择设备管理>产品。
  2. 在产品管理页,找到之前创建的产品,单击对应的查看按钮。
  3. 在产品详情页,选择功能定义,再单击自定义功能对应的添加功能。
  4. 根据下表逐个添加属性。
    功能类型 功能名称 标识符 数据类型 取值范围 单位 读写类型
    属性 转速 speed int32 0 ~ 3000 rpm 只读
    属性 电流 current int32 0 ~ 30 A 只读
    属性 设置转速 setspeed Int32 0 ~ 3000 rpm 读写
编辑数据解析脚本 阿里云物联网平台支持的标准数据格式为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. 在右侧运行结果栏,查看解析结果。
      物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

    • 测试下行数据解析。
      1. 选择模拟类型为设备接受数据。
      2. 在模拟输入下的输入框中,输入模拟下行数据。下行数据示例如下:
        { "method": "thing.service.property.set", "id": "12345", "version": "1.0", "params": { "setspeed": 123 } }

      3. 单击运行。
      4. 在右侧运行结果栏,查看解析结果。
      物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

  4. 确认脚本可用后,单击提交按钮,将脚本提交到物联网平台。 注意 物联网平台不能调用草稿状态的脚本,只有已提交的脚本才会被调用来解析数据。
设备端开发 在本示例中,使用电脑模拟DTU设备端。电脑通过USB转串口与DTU连接。
注意 请确保DTU可以正确连接Internet。
  1. 配置DTU设备。 本示例使用F2x16 DTU设备。
    1. 连接DTU设备与电脑USB口。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

    2. 在电脑上,打开DTU配置工具,配置正确的串口号,设置波特率,并打开串口。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

    3. 单击右下方登陆配置按钮,使DTU进入配置状态。
    4. 单击读取配置按钮,获取现有DTU的配置。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

    5. 确保工作协议为port。在右侧配置界面下,单击串口,再进行本地串口配置。配置信息如下图。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

    6. 单击IoT接入配置,填入从物联网平台获取的设备证书信息和地域。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

      物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

    7. 单击下方下发配置按钮,使配置生效。 如果配置下发失败,请单击退出登录后,重新配置。
    8. 完成配置后,单击退出登录按钮,使DTU进入正常工作模式。
    9. 将DTU断电,再重新上电。当DTU上online灯点亮后,即表示已连接上物联网平台。 您还可以在物联网平台控制台上,查看设备的状态。
      物联网行业知识|存量设备通过DTU进入阿里云IoT平台
      文章图片

  2. 测试数据通信。
    1. 测试上传数据。测试DTU设备代替存量设备上传数据到物联网平台。
      1. 打开串口调试工具。 注意 在本地电脑上,使用串口调试工具进行设备数据的收发模拟前,请务必确保DTU配置工具已经关闭。
      2. 设置串口调试工具的相关参数,并打开串口,然后单击发送。 根据物联网平台上的物模型定义,模拟发送转速和电流两个参数到云端。假定转速为150,电流为10安培,则在串口工具中,按先后顺序填写96 0A两个16进制数。
        物联网行业知识|存量设备通过DTU进入阿里云IoT平台
        文章图片

      3. 数据发送后,在物联网平台控制台,设备对应的设备详情页运行状态页签下,打开实时刷新开关。稍后就可以看到上传的数据。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
        文章图片

    2. 测试接收云端下发数据。使用物联网平台调试真实设备功能,下发设置转速指令,测试DTU接收云端下发数据。
      1. 在物联网平台控制台左侧导航栏,选择监控运维>在线调试。
      2. 选择要调试的设备,再选择调试真实设备。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
        文章图片

      3. 选择功能为已定义的转速设置属性,方法选择为设置,输入一个测试值,单击发送指令。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
        文章图片

      4. 指令发送成功后,在DTU串口调试工具的接收框中,查看接收到的数据。接收到的数据中,55为数据头,数据值为64(即十进制的100)。 物联网行业知识|存量设备通过DTU进入阿里云IoT平台
        文章图片

      云端和设备端均能接收到正确数据,说明配置成功。
名词解释
  • 物模型 阿里云物联网平台将设备抽象为”属性“,”事件“,”服务“三大要素。设备的三要素抽象描述,称为物模型。
  • 属性 一般用于描述设备运行状态,例如电机的转速,灯的开关和亮度,水的温度。
  • 事件 设备运行时的事件,一般包含需要被外部感知和处理的通知信息,例如开关机通知、报警等。
  • 服务 设备可被外部调用的能力,例如调整电机转速。
  • 设备证书 设备证书指ProductKey、DeviceName和DeviceSecret,是阿里云物联网平台认证设备的标识。设备证书信息不可泄露。
  • ProductKey 物联网平台为产品颁发的全局唯一标识。
  • DeviceName 在注册设备时,自定义的或系统自动生成的设备名称,具备产品维度内的唯一性。
  • DeviceSecret 【物联网行业知识|存量设备通过DTU进入阿里云IoT平台】物联网平台为设备颁发的设备密钥。

    推荐阅读