設備端[IoT Device SDK]使用實戰
華為物聯網接入平臺IoTDA除了原生接入協議,也提供了各個語言版本的SDK。
華為提供的IoT Device SDK,支持TCP/IP協議棧的設備集成IoT Device SDK后,可以直接與物聯網平臺通信。不支持TCP/IP協議棧的設備,例如藍牙設備、ZigBee設備等需要利用網關將設備數據轉發給物聯網平臺,此時網關需要事先集成IoT Device SDK。
SDK簡介:
設備接入前,需創建產品(可通過控制臺創建或者調用應用側API接口創建產品)。
產品創建完畢后,需注冊設備(可通過控制臺注冊單個設備或者使用應用側API接口注冊設備)。
設備注冊完畢后,按照圖中流程實現消息/屬性上報、接收命令/屬性/消息、OTA升級、自定義TOPIC、泛協議接入(相關Demo)等功能。
針對不同類型的終端設備,提供了不同的SDK:
既然用到SDK,就是要更快捷的對接應用,減少自己寫代碼的工作量,平臺提供的也會更穩定,和平臺一起升級。
接下來以C#語言為例,進行一次設備代碼接入,看看是不是很方便。
通過官網 設備接入 IoT Device SDK介紹 通道可以找到各個版本的SDK入口,但是幫助文檔這里沒有過多的說明,而是直接導航到github源代碼處(和HuaweiCloud.SDK相比,感覺Device SDK代碼上還不夠成熟,沒有上傳到nuget上,命名也不太規范)。
SDK目錄結構
iot-device-sdk-java:sdk代碼
iot-device-demo:普通直連設備的demo代碼
iot-gateway-demo:網關設備的demo代碼
iot-device-feature-test:調用demo程序的入口工程
iot-tcp-device-test:子設備實例啟動工程
引用的第三方類庫使用版本
MQTTnet:v3.0.11
MQTTnet.Extensions.ManagedClient:v3.0.11
Newtonsoft.Json:v12.0.3
NLog:v4.7
DotNetty.Codecs:v0.6.0
DotNetty.Transport:v0.6.0
云端產品創建
在設備接入-控制臺 (huaweicloud.com)添加產品選擇MQTT協議,并上傳Profile或者自定義產品屬性和命令
設備接入地址和端口
以智能門禁為例創建這樣的產品
設備接入處,注冊新設備,要記錄好設備Id和密鑰
設備SDK接入工作過程
開發環境:Windows 10 操作系統,Microsoft Visual Studio 2022(官方代碼上VS2017版本),.NET Standard 版本:2.0。很好的支持.net core 和.net framework。
源代碼的測試調用入口控制臺程序默認是.net core2.2版本的。用就用最新的,目前相信用VS的都升級到.net6了,只要切換一下目標版本即可。
在項目解決方案上右鍵屬性菜單,選擇目標框架
因為客戶端集成SDK是一個MQTT的長連接程序,作為一個程序模塊,我這里創建了一個單例模式的Device,方便監聽命令和隨時上報消息。
所有的鏈接邏輯,上報消息體和命令格式,SDK都做了封裝,只要繼承相應的接口,就可以直接等待接收命令消息。
SDK提供了一個IoTDevice對象作為設備端操作對象,DeviceClient是一個實際客戶端。
創建一個類RecycleDevice客戶端,其中定義了 DeviceClient對象,集成了若干Listener,用來監聽事件和命令
public class RecycleDevice : CommandListener, MessagePublishListener, ConnectListener, DeviceMessageListener, CommandV3Listener, DeviceShadowListener, RawMessageListener { 。。。。
舉例其中2個Listener
命令下發CommandListener
在對象類上集成這個接口CommandListener,并實現接口,同時IoTClient進行監聽。OnCmmand需要Report消息狀態,平臺才知道發送成功,否則20s后認為失敗。
private bool Connect(string serverUri, int port, string deviceId, string deviceSecret) { // 創建設備 IoTDevice device = new IoTDevice(serverUri, port, deviceId, deviceSecret); if (device.Init() != 0) { return false; } _IoTClient = device.GetClient(); _IoTClient.messagePublishListener = this; _IoTClient.commandListener = this; return true; } public void OnCommand(string requestId, string serviceId, string commandName, Dictionary
屬性上報Report
public void ReportPropes() { Dictionary
運行代碼,在Test工程中添加新代碼
class Program { private static ManualResetEvent mre = new ManualResetEvent(false); static void Main(string[] args) { RecycleDevice.IoTClient.Init(); RecycleDevice.IoTClient.ReportPropes(); mre.WaitOne(); } }
打開設備看到在線,并且有信息上傳了
發一個命令看看
控制臺打印出上報消息和命令交互,怎么樣是不是很簡單?
附件是一個樣例代碼,完整的但內容很短。
附件: RecycleDevice.rar 1.46KB 下載次數:1次
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。