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

背景信息

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

图 1. 数据流转流程图

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

创建产品和设备

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

  1. 登录物联网平台控制台。
  2. 创建产品。
    1. 在左侧导航栏,选择设备管理>产品。
    2. 在产品管理页,单击创建产品。
    3. 填入产品信息,单击确定。完成产品创建。

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

  3. 创建设备。
    1. 在控制台左侧导航栏,选择设备。
    2. 在设备管理页,单击添加设备。
    3. 选择刚创建的产品,输入设备名称和备注名称,单击确定。完成设备创建。

      设备创建成功后,会弹出设备证书信息。您也可以在设备管理页,单击设备对应的查看按钮,进入设备详情页查看设备证书信息。该设备证书将被配置到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;                   // 模拟消息IDjsonMap['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'];   // 将设置的具体值抽取出来//按照自定义协议格式拼接 rawdatapayloadArray = 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

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

存量设备通过DTU进入阿里云IoT平台相关推荐

  1. 阿里IOT云平台(二)---10分钟物联网设备接入阿里云IoT平台

    本文转载自:https://www.geek-workshop.com/thread-37883-1-1.html.基于VS Code和Node.js 我替换了原文中的温度.湿度属性图(主要是修正了标 ...

  2. 电信NB-IoT设备对接阿里云IoT平台实战——实践类

    众所周知,中国电信的NB-IoT设备必须直连电信CTWing平台,无法直接在阿里云IoT,AWS IoT,腾讯云IoT 管理中国电信的NB-IoT设备. 今天我们就给大家介绍如何通过阿里云IoT企业物 ...

  3. 4G Modbus Json边缘网关接入阿里云IoT平台

    LTE-669P 4G边缘网关系列 阿里云平台连接教程 今天介绍物联设备 LTE-669P 4G边缘网关如何接入阿里云平台系列. LTE-669P是一款工业级4G JSON无线边缘解析网关,支持RS4 ...

  4. 10分钟虚拟设备接入阿里云IoT平台实战

    10分钟虚拟设备接入阿里云IoT平台实战 1. 准备工作 1.1 注册阿里云账号 使用个人淘宝账号或手机号,开通阿里云账号,并通过实名认证(可以用支付宝认证) 1.2 免费开通IoT物联网套件 产品官 ...

  5. 【ODYSSEY-STM32MP157C】上报数据到阿里云 IoT 平台

    我们在上一节<[ODYSSEY-STM32MP157C]驱动 UART 读取传感器数据> 已经成功读取到 PMS5003ST 传感器的数据,本节我们将学习如何将设备接入阿里云 IoT 平台 ...

  6. 基于阿里云IoT平台OTA进行APP确认升级的方案——业务架构类

    简介: 对于家居类及个人消费电子类的物联设备,基于用户体验的考虑,生产企业一般会为消费者提供通过手机APP进行确认升级的功能,典型的使用场景是通过手机APP对手环进行升级.本文主要介绍APP确认升级的 ...

  7. 阿里云IOT平台学习(一)--基础概念

    以下所有内容均来自阿里云IOT平台的手册和阿里云的IOT教学视频.本系列主要是自己对IOT平台学习过程中的整理,不是程序猿,仅涉及少量代码. 阿里云iot官方手册:https://iot.consol ...

  8. 基于阿里云IoT平台和HAAS210云模组的OTA

    最近开发了一款嵌入式物联网门锁, 用到了阿里云IoT平台的OTA能力, 设备端用了阿里云的HAAS210模组, 有些收获, 在此做个分享. 1.云平台的选型 作为一个小微企业, 自建云平台不现实, 因 ...

  9. C# 基于开源MQTT自主接入阿里云IoT平台

    1. 准备工作 1.1 注册阿里云账号 使用淘宝账号或手机号,开通阿里云账号,并通过实名认证(可以用支付宝认证) 1.2 免费开通IoT物联网套件 产品官网 https://www.aliyun.co ...

最新文章

  1. 关于DWG文件转换成PDF
  2. CVPR 2021 | 利用时序差分进行动作识别的最新Backbone—TDN
  3. rpmbuild打包mysql5.7_用rpmbuild打包mysql
  4. 用软件如何识别pdf文字
  5. Angular内提供了一个可以快速建立测试用web服务的方法:内存 (in-memory) 服务器...
  6. 在哪里可以运行EJB?
  7. 使用JUnit规则测试预期的异常
  8. 你在寻觅冬季唯美的海报设计素材么?
  9. 【SAP业务模式】之ICS(三):前台操作
  10. HTTP Error 404 - File or Directory not found caused by ISAPI filter of Sharepoint
  11. 南京大学计算机学院冯新宇导师,中国科学技术大学计算机科学与技术专业硕士研究生导师冯新宇...
  12. 适合产品经理不同阶段的书籍和课程
  13. 计算机博弈 基础算法 阿尔法-贝塔剪枝算法 α-β剪枝算法
  14. 旧iPhone手机钱包中公交卡 银行卡 转移到新手机iPhone11上
  15. C4D界面认识及常用操作
  16. 小火狐进化_口袋妖怪xy三主进化详细介绍
  17. 计算机制作画报说课稿,幼儿园小班主题秋的画报说课稿教案反思
  18. 重磅官宣:说一件大事
  19. 第二章 年轻人都是富翁
  20. is与==的恩怨、编码的详解

热门文章

  1. 2021年焊工(技师)考试题库及焊工(技师)最新解析
  2. Grafana面板(panel):数据处理(Transformation)---一个奇怪的功能!
  3. 【牛客网面经整理】0805百度面经
  4. 当前安全设置禁止运行该页中activeX控件,该页无法正常显示
  5. OBS推流时的视频色彩相关参数设置
  6. bert 使用(3)
  7. cocosCreator 控制音乐,音效的图片转换
  8. 元宇宙产业委联席秘书长叶毓睿:去中心化和去中介化的定义、区别,以及和元宇宙的关系
  9. Echarts之饼图内外圆重叠且图例不统一
  10. 滚动轴承退化趋势预测