对于不带有广域网联网能力的存量单品设备,往往无法进行硬件升级,通过外接DTU将这种设备进行互联网接入是最佳方案。设备接入阿里云IoT时需要遵守阿里云IoT的接入规范,因此DTU需要集成SDK接入阿里云IoT,来快速将存量设备快速接入阿里云物联网平台。
使用说明
本文适用的硬件形态如下:
2G透传DTU。
3/4G透传DTU。
串口转以太网透传服务器(模块)。
名词解释
名词 | 说明 |
设备证书 | 设备证书指ProductKey、DeviceName、DeviceSecret的组合。
|
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或功能配置组,下图作为参考。
创建设备的连接地址:https://iot.console.aliyun.com/product
设备证书的具体位置位于阿里云IoT平台设备管理控制台下的具体设备详情中,如下图所示。
网关厂商需要将用户所配置的设备证书信息,及接入版本的信息进行DTU本地存储,从而每次上电时都可以获取用户的身份认证信息进行阿里云IoT平台的鉴权和建立连接工作。
数据转发
将用户数据通过阿里云提供的通道,转发至阿里云IoT平台的用户账户。
完成连接SDK在DTU设备上的移植。本文档基于SDK版本2.3.0编写,因此建议用户基于相同的版本进行开发,也可以使用更高版本的SDK进行开发
由于DTU设备主要存在于广域网场景中,且有本地配置工具,所以需要关心的是SDK中MQTT相关部分,TLS链接加密部分,以及物模型实现部分。
完成阿里云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()
函数完成连接和鉴权。
实现业务逻辑,将接收到的本地用户数据,通过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实现建议框图。
图中提到的函数参数或结构体成员的意义,请参考SDK软件包中examples/MQTT/MQTT_example.c
和examples/linkkit/linkkit_example_solo.c
文件。
用户使用路径示意图
集成Link SDK的DTU实例
DTU型号 | 厂商 |
F2A16 | 厦门四信通信科技有限公司。 |
HF5111B | 上海汉枫电子科技有限公司。 |
ZWNET-4352 | 广州致远电子有限公司。 |
LS-D3000 | 杭州乐舜。 |