設備接入-自定義消息收發
使用MQTT協議接入物聯網平臺的設備,通過向Topic發布消息和訂閱Topic的方式和平臺進行消息通信。Topic分為系統Topic、物模型Topic和自定義Topic,其中自定義Topic需要用戶在控制臺定義。 本文為您介紹設備使用自定義Topic與物聯網平臺進行上下行消息通信,以及物聯網平臺和業務服務器之間的通信步驟。
提醒:Tuya 物聯網平臺阿里云版大部分功能兼容現在的阿里云IoT平臺設備接入和北向API功能,為了兼容涂鴉IoT設備生態和阿里云IoT設備生態,部分名詞叫法有改動,但不影響使用,業務代碼可以直接替換使用,即 ProductID=ProductKey,HardwareID=DeviceName 。
Wi-Fi智能插座案例
本示例中,以一款 Wi-Fi智能插座 產品為例,設備使用MQTT協議接入到IoT平臺,通過訂閱自定義Topic接收IoT平臺下發的指令,通過向自定義Topic發布消息上報電流、電壓、功率數據。IoT平臺將收到的數據通過AMQP或Kafka轉發到用戶的業務服務器,業務服務器調用IoT平臺提供的北向API向自定義Topic發布消息,設備通過訂閱的Topic接收到指令控制智能插座。
Tuya IoT 平臺 開通即用,提供 MQTT接入協議
設備端 和 服務端 業務程序,由企業自有研發團隊負責。
控制臺操作步驟
1. 創建產品
在左側導航欄,選擇產品開發,進入產品列表頁面,點擊右上角的創建產品按鈕,進入創建產品頁面,輸入產品信息,生成唯一產品ID,即 ProductID,下文簡稱PID。
產品ID(ProductID) 即為阿里云IoT平臺中的 ProductKey,原來業務代碼可以直接替換使用。
輸入產品名稱,選擇直連設備、一機一密、阿里云IoT自定義、點擊下方的創建產品按鈕,創建產品,生成產品唯一ID,即ProductID。
2. 自定義產品Topic
在左側導航欄,選擇產品開發,進入產品列表頁面,選擇對應的產品,點擊右側繼續開發按鈕,進入產品詳情。
在產品詳情的Topic管理頁簽下,單擊自定義Topic,點擊新增自定義Topic按鈕,增加Topic。
本示例中,定義了以下兩個Topic類:
設備發布消息Topic:/TbSCo****/${deviceName}/user/devmsg,權限為發布。用于設備向IoT平臺發送消息(數據),數據格式用戶可以自己定義。
設備訂閱消息Topic:/TbSCo****/${deviceName}/user/cloudmsg,權限為訂閱。在進行設備端開發時,訂閱這個Topic,當云端向下發送消息時,通過該Topic發送消息給設備。
3. 添加設備
在左側導航欄,單擊 設備管理 > 設備列表,進入設備管理頁面,點擊右上角的添加設備按鈕。
選擇對應的產品,輸入設備的唯一硬件ID(HardwareID)。
HardwareID 即為阿里云IoT平臺中的 DeviceName,原來業務代碼可以直接替換使用。
4. 獲取設備MQTT連接參數
在左側導航欄,單擊 設備管理 > 設備列表,進入設備管理頁面,選擇對應的設備,單擊查看,進入設備詳情。
在設備詳情頁面,點擊右上部的連接參數查看,查看MQTT 連接參數
5. 配置服務端訂閱(可選)
如果您需要在自己的服務器上面監聽設備上報的數據、設備在線狀態等,創建VPC對等連接和創建服務端訂閱
使用Postman模擬設備
1. Postman 簡介
?Postman相信每一個開發者都不陌生,是一個功能強大的接口測試工具?,主要用于測試HTTP請求,支持各種HTTP請求方法,包括GET、POST、PUT、DELETE等。它可以幫助開發者模擬用戶發起的各類HTTP請求,驗證響應結果是否符合預期?。隨著MQTT協議逐漸應用在各種應用中,現在Postman也支持調試MQTT協議的調試。
Postman下載地址:https://www.postman.com/downloads/
2. Postman MQTT 配置
Postman主要用于HTTP協議接口的測試,現在也支持WebSocket、Socket.io、GraphQL、gPRC、MQTT協議的調試。Postman打開的時,一般情況下默認的是HTTP協議調試頁面,點擊左上角的“協議圖標”,切換到MQTT協議調試
切換到Postman MQTT調試頁面后,根據下圖配置MQTT參數模擬需要接入的設備,注意前后不要有空格。
3. 模擬設備上線
根據上一步Postman MQTT 配置的介紹,將獲取的MQTT連接參數根據要求填入輸入框,并點擊Connect。
?? 注意:參數的前后不要有多余的空格,冒號注意要用英文,連不上的情況下多數是前后空格問題!
如果如圖提示Connected,表示已經使用Postman模擬了一個設備,并使用MQTT協議接入到了IoT平臺,刷新設備詳情頁,可以看到設備已經上線,并展示出上線時間。
至此,表示設備已經使用MQTT協議接入到IoT平臺,并成功上線。
4. 模擬設備向平臺發送數據
4.1. 定義發送的數據協議
Wi-Fi智能插座,定時向IoT平臺上報電壓、電流兩項數據,本示例不使用物模型上報數據,使用自定義數據協議格式上報數據,自定義的協議格式如下:
示例:上報數據 05 CC 60 02 49 F0,前 3 字節轉換為10進制表示 380000mV,即380V;后三字節轉換為10進制表示 150000mA,即150A;
4.2. 確定設備發布Topic
通過自定義產品Topic中的/${ProductID}/${HardwareID}/user/devmsg 自定義Topic,向IoT平臺發送數據05 CC 60 02 49 F0。
注意:需要將Topic中的 ${ProductID} 和 ${HardwareID} 替換成您自己的 ProductID 和 HardwareID ,例如:/TbSCoh3w***86c1jC/72c3****bab3/user/devmsg 不需要${}
4.3. Postman模擬發送數據
前提條件:根據模擬設備上線中的配置,先將設備上線;
切換到Postman的Message頁簽,輸入需要發送的消息和發送的Topic,單擊Send發送按鈕;
在左側導航欄,選擇日志服務,刷新頁面,如果能看到剛剛發送的數據,則表示數據上報成功;
設備上報到IoT平臺后,開發者可以繼續使用消息轉發>服務端訂閱,將發送到平臺的數據,使用Kafka或AMQP轉發到開發者的業務服務器,對數據進行處理或使用。
5. 平臺向模擬設備發送指令
5.1. 定義平臺下發指令協議
Wi-Fi智能插座,需要根據平臺指令控制插座開關、需要根據指令查詢電壓電流參數,本示例不使用物模型上報數據,使用自定義數據協議格式上報數據,自定義的協議格式如下:
指令(1字節) | 指令參數(1字節) | 參數備注 |
01 | 00 或 01 | 00代表關,01代表開 |
02 | 00 或 01 或 02 | 00查詢電壓電流,01查詢電壓,02查詢電流 |
示例:
指令 01 01,第 1 字節01表示功能指令控制開關,第 2 字節01表示參數為開;即01 01表示打開插座開關。
指令 02 00,第 1 字節02表示功能指令查詢參數,第 2 字節00表示查詢電壓電流;即02 00表示查詢當前插座的電壓電流參數,設備接收到指令后,通過Topic發送電壓電流參數
5.2. 確定需要訂閱的Topic
通過在自定義產品Topic中定義的/${ProductID}/${HardwareID}/user/cloudmsg,訂閱該Topic,接收平臺發送給設備的控制指令。
注意:需要將Topic中的 ${ProductID} 和 ${HardwareID} 替換成您自己的 ProductID 和 HardwareID ,例如:/TbSCoh3w***86c1jC/72c3****bab3/user/cloudmsg 不需要${}
5.3. 模擬設備訂閱Topic
切換到Postman的 Topics 頁簽,輸入需要訂閱的Topic,點擊右邊的SUBSCRIBE開關,開始訂閱,如果下面出現Subscribed,則代表訂閱成功,可以去平臺設備詳情Topic列表查看。
在左側導航欄,單擊設備列表找到對應的設備,在設備詳情Topic列表頁簽下,如果出現剛剛訂閱的Topic,則代表Topic訂閱成功,可以通過該Topic,向設備該送指令。
在Postman頁面中可以看到發送的指令消息01 01,表示控制指令發送成功,如果是真實設備,可以解析對應的指令,執行相應的邏輯。