全部产品
云市场

DTU集成SDK

更新时间:2019-11-27 20:11:04

概述

对于不带有广域网联网能力的存量单品设备,往往无法进行硬件升级,通过外接的透传DTU设备进行设备互联网接入是最佳方案。而传统的DTU设往往通过提供通用的TCP连接能力,虽然随着物联网的发展,近年出现了带有mqtt通道的DTU产品,但因为阿里云IoT在设备唯一性以及安全性上的加固,市售DTU无法直接接入阿里云IoT平台,因此希望寻找DTU设备合作伙伴,实现DTU设备对阿里云IoT透传模式的适配,帮助有接入阿里云IoT平台意愿的设备厂商快速完成接入,从而使用阿里云IoT平台所带来的便利服务。

本文适用的硬件形态如下:

  • 2G透传DTU
  • 3/4G透传DTU
  • 串口转以太网透传服务器(模块)

需求描述

1. 背景介绍

连接版本

阿里云IoT平台的接入针对不同的用户,分为接入基础版和高级版两个不同的版本,两者的区别如下:

版本
描述
使用场景
基础版
1、提供包括设备唯一性验证,安全连接在内的连接支持。
2、提供基于规则引擎的数据转发功能。
3、用户直接通过MQTT TOPIC进行数据收发
用户希望阿里云IoT平台为其设备提供更加稳定的连接能力,具体的设备数据直接以原始状态存入用户自己的数据库,或转发到自己的应用中进行处理。
高级版
1、提供包括设备唯一性验证,安全连接在内的连接支持。
2、提供设备数据的物模型解析能力。将设备抽象为属性,事件,服务三要素
3、提供透传数据转物模型脚本服务。
用户设备数据以格式化的方式进入阿里云IoT平台,用户可以选择将格式化数据通过规则引擎转储到其他阿里云产品中,供自己建立的应用使用。也可以直接在阿里云IoT提供的行业平台中进行使用,形成自己的应用。

对于基础版和高级版,最主要的区别在于是否搭载物模型机制。

三元组

阿里云IoT平台,为保证端侧设备的连接安全和设备的唯一性,为用户提供了设备三元组机制。三元组为名为ProductKey;deviceName;devicesecret的三个字符串,三个字符串的组合在平台中唯一存在,用于设备的连接认证和设备通道,三元组为阿里云IoT平台上设备的唯一身份。

SDK

阿里云IoT为希望进行设备接入的客户,提供了连接SDK。连接SDK运行于设备端,为用户提供了与阿里云IoT建立连接所需的协议栈,认证机制,加密机制,wifi配网,设备绑定等多种功能,用户可以按需选择使用,帮助用户快速接入阿里云IoT平台。对于存量DTU改造比较合适。

AliOS Things

相对于SDK提供的连接能力,AliOS Things是一个完整的嵌入式操作系统,AliOS Things已经原生包含连接SDK,同时也可以支持多种硬件平台的硬件抽象接口。对于新开发DTU产品在效率上会有比较大的提升。

云端透传解析服务

针对DTU在端侧的透传模式,如果用户希望在云端使用带有物模型的高级版接入能力,那么需要在数据抵达云平台后对数据用户的原数据进行解析,映射为物模型后进入高级版设备管理。如:用户上传数据为8个字节,前四字节为电压,后四字节为电流。则用户需要在阿里云IoT平台中编制一个解析脚本,实现从序列数据到物模型中属性的转换。

2.DTU改造需求

针对上述背景,合作伙伴的DTU产品需要替代一个本地无法接入互联网但具备本地通信能力的设备完成阿里云IoT平台的能力。由于本地设备不能再做软件上的修改,所以选择接入IoT平台的基础版还是高级版以及三元组的填写都需要在DTU的配置界面中完成,同时,DTU设备代替本地设备完成连接建立往固定的云上topic发送数据和订阅云上下发topic的功能。具体功能需求如下:

增加配置项

在合作伙伴的DTU产品的配置页,增加阿里云IoT对接tab或功能配置组,下图作为参考:

image.png | left | 747x411

其中 创建设备 的连接地址:https://iot.console.aliyun.com/product

设备三元组的具体位置位于阿里云IoT平台设备管理控制台下的具体设备详情中,如下图:

image.png | left | 747x370

网关厂商需要将用户所配置的三元组信息,及接入版本的信息进行DTU本地存储,从而每次上电时都可以获取用户的身份认证信息进行阿里云IoT平台的鉴权和建立连接工作。

将用户用户数据通过阿里云提供的通道及协议,转发至阿里云IoT平台的用户账户

  1. 完成连接SDK在DTU设备上的移植。本文档基于SDK版本2.3.0编写,因此建议用户基于相同的版本进行开发,用户也可以使用更高版本的SDK进行开发

    由于DTU设备主要存在于广域网场景中,且有本地配置工具,所以用户需要关心的是SDK中mqtt相关部分,TLS链接加密部分,以及物模型实现部分。

  2. 完成阿里云IoT平台的连接鉴权。

    在每次上电时,利用用户配置的三元组信息,通过SDK提供的连接和鉴权API完成和阿里云IoT平台建立连接并完成身份认证工作,等待用户本地数据到来。

    基础版:

    请参考example/mqtt/mqtt_example.c文件中IOT_MQTT_Construct()函数的调用以及传入参数,实现基础版的接入和鉴权。

    高级版:

    请参考examples/linkkit/linkkit_example_solo.c文件中IOT_Linkkit_Open()函数和IOT_Linkkit_Connect()函数完成阿里云IoT平台的高级版连接和鉴权。

  3. 实现业务逻辑,将接收到的本地用户数据,通过SDK提供的API转发至阿里云IoT平台。针对不同的接入版本,分为如下两个模式

    基础版:

    将接收到的用户数据,通过SDK提供的mqttpub接口,发送至云端的一个特定topic。topic格式如下:

    1. /${Productkey}/${deviceName}/update

    其中“\${Productkey}”部分需要替换为用户配置进来的productkey字符串,“\${deviceName}”替换为用户配置进来的devicename字符串。DTU需要将用户本地传进来的数据作为一个mqtt报文的payload传至云端。具体调用可以参考SDK软件包中example/mqtt/mqtt_example.c这个示例文件中IOT_MQTT_Publish() 函数的调用实现。

    高级版:

    在高级版中,SDK已经将topic进行封装,所以只需要将用户原数据通过IOT_Linkkit_Report()函数向云端上报数据,上报时需要传入“ITM_MSG_POST_RAW_DATA”参数,标识是透传上报,云端需要进行解析。具体的实现可以参考examples/linkkit/linkkit_example_solo.c文件中user_post_raw_data()函数的调用示例。

  • 将收到的阿里云IoT平台的下发数据,转发至本地设备通信口。

    在前一步的基础上,实现对云端特定topic的订阅,从而完成云端至边缘侧的数据下发。具体实现如下

    基础版:

    在建立mqtt实例后,订阅如下topic,具体的订阅操作参考examples/mqtt/mqtt_example.c文件中的IOT_MQTT_Subscribe()函数调用。在订阅时需要设置回调函数,用于处理接收到的数据。

    1. /${Productkey}/${deviceName}/get

    高级版:

    在高级版中,订阅的工作SDK已经完成,所以DTU只需要对RAWDATA_ARRIVED事件设置一个回调,在回调中获取云端下发的数据并转发给客户即可。具体可以参考examples/linkkit/linkkit_example_solo.c文件中的调用,以及回调的实现。

  1. IOT_RegisterCallback(ITE_RAWDATA_ARRIVED, \
  2. user_down_raw_data_arrived_event_handler);
  3. static int user_down_raw_data_arrived_event_handler(const int devid, const unsigned char *payload,
  4. const int payload_len)
  5. {
  6. EXAMPLE_TRACE("Down Raw Message, Devid: %d, Payload Length: %d", devid, payload_len);
  7. return 0;
  8. }

安全连接

在阿里云连接SDK中为用户提供了包括TLS和阿里专有的iTLS两种安全加密方式,DTU在实现时可以自由选择使用。为了保证终端用户数据的安全,请尽量采用加密传输通道进行数据传输。

  • DTU实现建议框图

image.png | left | 747x741

图中提到的函数参数或结构体成员的意义,请参考SDK软件包中examples/mqtt/mqtt_example.c和examples/linkkit/linkkit_example_solo.c文件。

3.用户使用路径示意

image.png | center | 581x1221

DTU型号 厂商 链接
F2A16 厦门四信通信科技有限公司 连接示例
HF5111B 上海汉枫电子科技有限公司 连接示例
ZWNET-4352 广州致远电子有限公司 连接示例