DTU集成SDK

对于不带有广域网联网能力的存量单品设备,往往无法进行硬件升级,通过外接DTU将这种设备进行互联网接入是最佳方案。设备接入阿里云IoT时需要遵守阿里云IoT的接入规范,因此DTU需要集成SDK接入阿里云IoT,来快速将存量设备快速接入阿里云物联网平台。

使用说明

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

  • 2G透传DTU。

  • 3/4G透传DTU。

  • 串口转以太网透传服务器(模块)。

名词解释

名词

说明

设备证书

设备证书指ProductKeyDeviceNameDeviceSecret的组合。

  • ProductKey:是物联网平台为产品颁发的全局唯一标识。该参数很重要,在设备认证以及通信中都会用到,因此需要您保管好。

  • DeviceName:在注册设备时,自定义的或系统生成的设备名称,具备产品维度内的唯一性。该参数很重要,在设备认证以及通信中都会用到,因此需要您保管好。

  • DeviceSecret:物联网平台为设备颁发的设备密钥,和DeviceName成对出现。该参数很重要,在设备认证时会用到,因此需要您保管好并且不能泄露。

SDK

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

AliOS Things

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

云端透传解析服务

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

DTU改造

由于本地设备不能修改软件,所以接入IoT平台的设备证书的填写都需要在DTU的配置界面中完成,同时,DTU设备代替本地设备完成连接建立,以及向固定的云上Topic发送数据和订阅云上下发Topic的功能。具体功能需求如下:

增加配置项

xxxDTU配置页面,增加阿里云IoT对接tab或功能配置组,下图作为参考。

image.png

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

设备证书的具体位置位于阿里云IoT平台设备管理控制台下的具体设备详情中,如下图所示。

image.png

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

数据转发

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

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

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

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

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

    • 用户自定义Topic方式:

      请参考example/MQTT/MQTT_example.c文件中IOT_MQTT_Construct()函数的调用以及传入参数,实现DTU的接入和鉴权。

    • 物模型方式:

      请参考examples/linkkit/linkkit_example_solo.c文件中IOT_Linkkit_Open()函数和IOT_Linkkit_Connect()函数完成连接和鉴权。

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

    • 自定义Topic方式。

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

      /${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的订阅,从而完成云端至边缘侧的数据下发。具体实现如下:

  • 自定义Topic方式。

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

    /${Productkey}/${deviceName}/get
  • 物模型。

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

    IOT_RegisterCallback(ITE_RAWDATA_ARRIVED, \
                         user_down_raw_data_arrived_event_handler);
    
    static int user_down_raw_data_arrived_event_handler(const int devid, const unsigned char *payload,
            const int payload_len)
    {
        EXAMPLE_TRACE("Down Raw Message, Devid: %d, Payload Length: %d", devid, payload_len);
        return 0;
    }

安全连接

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

  • DTU实现建议框图。

image.png

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

用户使用路径示意图

集成Link SDK的DTU实例

DTU型号

厂商

F2A16

厦门四信通信科技有限公司。

HF5111B

上海汉枫电子科技有限公司。

ZWNET-4352

广州致远电子有限公司。

LS-D3000

杭州乐舜。