MQTT.fx是一個多平台的MQTT協議用戶端,本文以Windows系統為例,介紹使用MQTT.fx類比物聯網裝置接入阿里雲物聯網平台,並體驗物聯網平台的核心功能。
前提條件
已建立產品和裝置,並擷取MQTT串連參數。具體操作,請參見建立產品與裝置和擷取MQTT簽名參數值。
本樣本擷取的裝置認證和MQTT串連參數值如下表,參數詳細說明,請參見MQTT-TLS串連通訊。
參數
值
ProductKey
a1***
DeviceName
device1
DeviceSecret
f35***d9e
clientId
a1***.device1|securemode=2,signmethod=hmacsha256,timestamp=2524608000000|
username
device1&a1***
passwd
86761***21d
mqttHostUrl
a1***.iot-as-mqtt.cn-shanghai.aliyuncs.com
port
1883
已定義物模型屬性,用於測試裝置使用物模型通訊Topic進行上下通訊。具體操作,請參見為產品定義物模型。
本樣本定義物模型如下圖所示:
MQTT.fx類比的線上裝置,僅支援非透傳訊息通訊。如需實現透傳資訊通訊,您可以使用真實裝置或SDK進行測試。
配置MQTT.fx接入
下載並安裝MQTT.fx軟體。MQTT.fx軟體安裝和使用說明,請參見MQTT.fx。
本文操作以mqttfx-5.2.0-windows-x64版本為例示範具體操作。由於第三方軟體不定期更新,建議您以實際頁面為準。
說明使用MQTT.fx工具所需的License,請自行申請。
開啟MQTT.fx軟體,單擊功能表列中的Extras,選擇Edit Connection Profiles。
在Edit Connection Profiles頁面,完成以下參數的設定。
設定基本資料。
參數
說明
Profile Name
輸入您的自訂名稱iot connection。
Profile Type
MQTT伺服器串連,選擇MQTT Broker。
Broker Address
MQTT接入網域名稱,對應《前提條件》中已擷取的mqttHostUrl值:a1***.iot-as-mqtt.cn-shanghai.aliyuncs.com。
a1***為本樣本產品的ProductKey。
cn-shanghai為本樣本所在地區。
此處僅輸入欄位名,無需攜帶連接埠號碼。
Broker Port
設定為1883。
Client ID
MQTT的協議欄位。
固定格式:
${ClientId}|securemode=${Mode},signmethod=${SignMethod}|timestamp=${timestamp}|
。輸入《前提條件》中已擷取的clientId值:a1***.device1|securemode=2,signmethod=hmacsha256,timestamp=2524608000000|。
參數說明:
${ClientId}:裝置、App或Web等情境下的Client ID資訊。
重要該值需自訂,長度在64個字元以內。若為裝置的ID資訊,建議使用您裝置的MAC地址或SN碼,方便您識別區分不同的裝置。
${Mode}:安全模式。可選值有2(TLS直連模式,需要設定SSL/TLS資訊)和3(TCP直連模式,無需設定SSL/TLS資訊)。
${SignMethod}:演算法類型,支援hmacsha256、hmacmd5和hmacsha1。
${timestamp}:表示目前時間毫秒值,可以不傳遞timestamp。
物聯網平台提供的串連參數中${ClientId}預設為
${ProductKey} + '.' + ${DeviceName}
組成的字串,${Mode}預設為2,${SignMethod}預設為hmacsha256,您可根據需要修改。重要MQTT.fx的Client ID和裝置的${ClientId},切勿混淆。
不要遺漏參數之間及最後的豎線(|)。
設定參數時,請確保參數值中或參數值的前後均沒有空格。
輸入Client ID資訊後,請勿單擊Generate。
General
本樣本使用預設值。您也可以根據實際情境需求設定。
單擊User Credentials,選中Use Username/Password複選框,設定User Name和Password。
參數
參數說明
User Name
由裝置名稱DeviceName、and(&)和產品ProductKey組成,固定格式為
${DeviceName}&${ProductKey}
。輸入《前提條件》中已擷取的username值:device1&a1***。
device1
為裝置的DeviceName。a1***
為裝置的ProductKey。
Password
通過選擇的加密方法,以裝置的DeviceSecret為密鑰,將參數和參數值拼接後,加密產生Password。
輸入《前提條件》中已擷取的passwd值:86761***21d。
重要如果您使用的MQTT.fx版本,在粘貼Password後不顯示具體的字串,只要游標已從輸入框的前部移至了後部,則表示粘貼成功,請勿重複粘貼。
請注意參數和參數值中字母的大小寫。
若您設定Client ID時,修改了已擷取值中的${ClientId}、${SignMethod}的設定,必須保證加密參數的值與Client ID中對應參數值一致,需重新計算出Password。相關參數設定與計算方法,請參見使用Node.js語言指令碼計算。
TLS直連模式(即securemode=2)下,單擊SSL/TLS,選中Enable SSL/TLS,設定Protocol為TLSv1.2。
重要TCP直連模式(即
securemode=3
)下,無需設定SSL/TLS資訊,直接進入下一步。
設定完成後,單擊右下角的OK。
單擊Connect。
右側亮綠燈,表示串連成功。
您可在物聯網平台控制台,在對應執行個體下,選擇 ,選擇產品,查看該裝置狀態,預期裝置為線上狀態。
下文通過測試自訂Topic、物模型通訊Topic的上下行通訊,驗證MQTT.fx與物聯網平台串連是否成功。若測試與本樣本結果不符,表示通訊串連失敗,您需根據日誌資訊,進行修正。
使用自訂Topic通訊
自訂Topic的詳細資料,請參見使用自訂Topic通訊。本樣本使用物聯網平台預設提供的自訂Topic:
Topic | 許可權 | 說明 |
| 發布 | 上行通訊:裝置通過該Topic向物聯網平台發送訊息。 |
| 訂閱 | 下行通訊:裝置通過訂閱該Topic,擷取從物聯網平台下發的訊息。 |
上行通訊
在MQTT.fx上,單擊Publish,在Publish文字框中,輸入具有發布許可權的Topic:
/a1***/device1/user/update/error
。在文本編輯頁面,輸入要發送的訊息內容,然後單擊Publish。
登入物聯網平台控制台,在對應執行個體下的Log Service頁面,查看裝置到雲訊息日誌訊息。具體操作,請參見查詢雲端作業記錄。
下行通訊
在MQTT.fx上單擊Subscribe,在Subscribe文字框中,輸入具有訂閱許可權的Topic:
/a1***/device1/user/get
。單擊Subscribe。
訂閱成功後,該Topic會顯示在列表中。
登入物聯網平台控制台,在對應執行個體下,選擇 。
單擊裝置對應操作列的查看,進入裝置詳情頁面。
單擊Topic列表頁簽,單擊已訂閱Topic對應操作列的發布訊息。
輸入訊息內容,例如This is a test .,單擊確認。
回到MQTT.fx上,查看接收到的訊息。
使用物模型通訊Topic通訊
物模型通訊Topic的詳細資料,請參見什麼是Topic。本樣本使用物模型通訊Topic:
Topic | 許可權 | 說明 |
| 發布 | 上行通訊:裝置通過該Topic向物聯網平台上報屬性資料。 |
| 訂閱 | 下行通訊:裝置通過訂閱該Topic,擷取物聯平台響應裝置屬性上報的訊息。 |
| 訂閱 | 下行通訊:裝置通過該訂閱Topic,擷取物聯網平台下發的訊息。 |
裝置上報屬性
在MQTT.fx上單擊Subscribe,在Subscribe文字框中,輸入具有訂閱許可權的Topic:
/sys/a1****/device1/thing/event/property/post_reply
。在MQTT.fx上單擊Publish,在Publish文字框中,輸入具有發布許可權的Topic:
/sys/a1****/device1/thing/event/property/post
。在文本編輯頁面,輸入要上報的屬性資料,然後單擊Publish。
裝置上報屬性資料的格式,需符合標準Alink JSON格式。具體說明,請參見裝置上報屬性。本樣本上報屬性LightCurrent和LightSwitch資料。
登入物聯網平台控制台,在對應執行個體下,選擇 。
單擊裝置對應操作列的查看,在裝置詳情頁面單擊物模型資料,查看裝置資料。
設定裝置屬性
在MQTT.fx上單擊Subscribe,在Subscribe文字框中,輸入具有訂閱許可權的Topic:
/sys/a1****/device1/thing/service/property/set
。登入物聯網平台控制台,在對應執行個體下,選擇 。
選擇要調試的裝置,然後在屬性調試頁簽下,設定主燈開關為關閉-0。
單擊設定,發送指令。
在MQTT.fx上的Subscribe頁簽下,查看裝置接收的訊息。