對于不帶有廣域網聯網能力的存量單品設備,往往無法進行硬件升級,通過外接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 | 杭州樂舜。 |