MQTT協議分析—對接華為云體驗整個通信流程
本章帶領大家使用MQTT.fx作為客戶端采用MQTT協議連接華為IoT中的IoTDA服務,體驗整個MQTT的使用流程。
一、創建產品
進入控制臺,選擇“設備接入IoTDA”服務。
點擊左側“產品”。
點擊右上角“創建創建產品”。
我們創建一個名為MQTT_TEST的產品,協議類型選擇“MQTT”,數據格式選擇“JSON”,設備類型是傳感器“Sensor”,填寫完點擊右下角“立即創建”,即可看到如下圖所示的產品。
點擊上圖產品名稱“MQTT_TEST”,選擇“模型定義”,點擊自定義模型,如下圖
我們新建一個Sensor名稱的服務,如下圖,點擊“確認”。
在Sensor服務中添加一個Temperature名稱的屬性,數據類型為小數,勾選“必選”,待會我們通過MQTT.fx客戶端模擬上傳,如下圖。
添加一個名為“Power_Control”的命令,新增一個名為Status的參數,數據類型為字符串,長度為3,添加ON和OFF兩個枚舉值,用,隔開,點擊“確認”即可完成添加
二、注冊設備
點擊左側“設備”,選擇右上角“注冊設備”,如上圖。
選擇剛才創建產品使用的資源空間及產品,任意填寫標識碼,在產品中我們一般使用設備的MAC地址、IMEI號、串碼等獨一無二的信息作為設備的標識碼,這里隨意填寫,只要記得就行,設備名稱可以隨意填寫,密鑰為了方便我這里填寫123456,填寫完成之后點擊“確定“出現如下圖所示的信息界面。
三、使用MQTT.fx作為客戶端連接
MQTT協議規定進行連接或者通訊時需要的“接入地址”、“端口”、“Client ID“、“用戶名”、“密碼”等信息,這些信息的獲取方法每個平臺都不一樣,具體如何獲取取決于平臺的要求,華為云IoTDA對“Client ID“、“用戶名”、“密碼”等信息的詳細要求可以查閱下面這個幫助文檔:https://support.huaweicloud.com/api-iothub/iot_06_v5_3009.html,這三項信息主要用于鑒權,我們可以通過根據下面的文檔將需要的數據手動計算出來或者使用一個小工具直接生成,這個小工具的-:https://developer.obs.cn-north-4.myhuaweicloud.com/hub/mqttClientIdGenerator-19.2.0.zip
打開下載好的“mqttClientIdGenerator-19.2.0”,填入之前我們設置和系統生成的信息:
設備ID?? 5f223ea2f958e402cae7c76e_1023405741
密鑰?????? 12345678
點擊“Generate”,即可得到鑒權所需的clientID、username和password
打開安裝好的MQTT.fx軟件,點擊“設置”,如下圖:
根據IoTDA中“總覽”界面的接入域名、非加密端口1883和上面的三個鑒權信息填寫,注意這里的Password是那個軟件生成的并不是直接填寫12345678,最終如下圖:
點擊ok,然后點擊“connect”,可以在IoTDA設備中看到剛才我們的設備的狀態由“未激活”變為“在線”,如下圖:
到這一步說明連接成功了!
四、觀察數據上報和命令下發
在IoTDA服務中MQTT的topic被劃分為如下:
設備消息:設備向該topic發布一些消息,例如傳感器異常等
設備屬性:設備向該topic發布自身屬性。例如溫濕度。
命令下發:設備訂閱了該topic可以收到服務器下發的命令。
自定義topic:我們可以自定義一些topic以滿足不同的需求。
要如何上報數據呢?這就是MQTT中的發布機制,我們需要查看IoTDA的幫助文檔,從而確定Temperature這個屬性需要發布到哪一個topic中以及JSON數據的格式,詳細文檔可以參考:
https://support.huaweicloud.com/api-iothub/iot_06_v5_3010.html?設備屬性上報格式。https://support.huaweicloud.com/api-iothub/iot_06_v5_3004.html?topic定義
主要信息:
我們需要將{device_id}字段替換為5f223ea2f958e402cae7c76e_1023405741,最終使用的topic為:$oc/devices/5f223ea2f958e402cae7c76e_1023405741/sys/properties/report。
數據格式為:
根據以上信息組成一個JSON格式的數據,Services為一個列表,可以在其中存放我們在產品中定義的全部屬性,例如:service_id為Sensor的這個服務,其中由名為Temperature的屬性,最終效果如下圖:
在MQTT.fx軟件中填寫topic和JSON數據格式,點擊publish發布,如下圖:
這時可以看到IoTDA設備界面中收到了數據,如下圖:
如何收到服務器下發的命令呢?使用MQTT協議的訂閱機制,根據topic定義和如下文檔:https://support.huaweicloud.com/api-iothub/iot_06_v5_3014.html
我們可以訂閱一個topic,因為每次命令下發時topic中最后一級字符串是指request_id,代表每次請求的編號是獨一無二的,還可以用于向服務器request_id對應的命令執行,我們無法提前預知其內容,所以使用*通配符,無論什么request_id都能收到,我們訂閱:$oc/devices/5f223ea2f958e402cae7c76e_1023405741/sys/commands/#,如下圖:
在文本框內填入topic點擊Subscribe即可訂閱,這時打開IoTDA設備界面選擇MQTT_TEST設備,點擊“命令下發”,發送一個ON指令,如下圖:
立馬可以在MQTT.fx中看到如下信息,說明下發成功了:
體驗到這里就算結束了!
IoT MQTT
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。