MQTT.fx是一款基于Eclipse Paho使用Java語言編寫的MQTT客戶端,支持Windows、Mac和Linux操作系統,可用于驗證設備是否可與物聯網平臺正常連接,并通過Topic訂閱和發布消息。本文以Windows系統下MQTT.fx為例,介紹設備使用MQTT協議模擬接入物聯網平臺。

前提條件

  • 已創建產品和設備,并獲取MQTT連接參數。具體操作,請參見創建產品與設備獲取MQTT簽名參數值

    本示例獲取的設備證書和MQTT連接參數值如下表,參數詳細說明,請參見MQTT-TCP連接通信

    參數
    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接入

  1. 下載并安裝MQTT.fx軟件。MQTT.fx軟件安裝和使用說明,請參見MQTT.fx
    本文操作以mqttfx-5.2.0-windows-x64版本為例演示具體操作。由于第三方軟件不定期更新,建議您以實際頁面為準。
    說明 使用MQTT.fx工具所需的License,請自行申請。
  2. 打開MQTT.fx軟件,單擊菜單欄中的Extras,選擇Edit Connection Profiles
    Edit Connection Profiles
  3. Edit Connection Profiles頁面,完成以下參數的設置。
    1. 設置基本信息。
      參數 說明
      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}:算法類型,支持hmacsha256hmacmd5hmacsha1
      • ${timestamp}:表示當前時間毫秒值,可以不傳遞timestamp

      物聯網平臺提供的連接參數中${ClientId}默認為${ProductKey} + '.' + ${DeviceName}組成的字符串,${Mode}默認為2${SignMethod}默認為hmacsha256,您可根據需要修改。

      注意
      • MQTT.fx的Client ID和設備的${ClientId},切勿混淆。
      • 不要遺漏參數之間及最后的豎線(|)。
      • 設置參數時,請確保參數值中或參數值的前后均沒有空格。
      • 輸入Client ID信息后,請勿單擊Generate
      General 本示例使用默認值。您也可以根據實際場景需求設置。
    2. 單擊User Credentials,選中Use Username/Password復選框,設置User NamePassword
      設置mqtt.fx的User Credentials
      參數 參數說明
      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語言腳本計算
    3. TLS直連模式(即securemode=2)下,單擊SSL/TLS,選中Enable SSL/TLS,設置ProtocolTLSv1.2
      注意 TCP直連模式(即securemode=3)下,無需設置SSL/TLS信息,直接進入下一步。
      Enable SSL/TLS
  4. 設置完成后,單擊右下角的OK
  5. 單擊Connect
    右側亮綠燈,表示連接成功。Connect

    您可在物聯網平臺控制臺,在對應實例下,選擇設備管理 > 設備,選擇產品,查看該設備狀態,預期設備為在線狀態。

    在線

下文通過測試自定義Topic、物模型通信Topic的上下行通信,驗證MQTT.fx與物聯網平臺連接是否成功。若測試與本示例結果不符,表示通信連接失敗,您需根據日志信息,進行修正。

使用自定義Topic通信

自定義Topic的詳細信息,請參見自定義Topic。本示例使用物聯網平臺默認提供的自定義Topic:
Topic 權限 說明
/a1***/device1/user/update/error 發布 上行通信:設備通過該Topic向物聯網平臺發送消息。
/a1***/device1/user/get 訂閱 下行通信:設備通過訂閱該Topic,獲取從物聯網平臺下發的消息。

上行通信

  1. 在MQTT.fx上,單擊Publish,在Publish文本框中,輸入具有發布權限的Topic:/a1***/device1/user/update/error
  2. 在文本編輯頁面,輸入要發送的消息內容,然后單擊Publish
    在mqtt.fx發布消息
  3. 登錄物聯網平臺控制臺,在對應實例下的日志服務頁面,查看設備到云消息日志消息。具體操作,請參見查詢云端運行日志
    查看mqtt.fx發布到物聯網平臺的消息

下行通信

  1. 在MQTT.fx上單擊Subscribe,在Subscribe文本框中,輸入具有訂閱權限的Topic:/a1***/device1/user/get
  2. 單擊Subscribe

    訂閱成功后,該Topic會顯示在列表中。

    自定義Topic顯示在mqtt.fx訂閱列表中
  3. 登錄物聯網平臺控制臺,在對應實例下,選擇設備管理 > 設備
  4. 單擊設備對應操作列的查看,進入設備詳情頁面。
  5. 單擊Topic列表頁簽,單擊已訂閱Topic對應操作列的發布消息
  6. 輸入消息內容,例如This is a test .,單擊確認
  7. 回到MQTT.fx上,查看接收到的消息。
    接收消息

使用物模型通信Topic通信

物模型通信Topic的詳細信息,請參見什么是Topic。本示例使用物模型通信Topic:
Topic 權限 說明
/sys/a1****/device1/thing/event/property/post 發布 上行通信:設備通過該Topic向物聯網平臺上報屬性數據。
/sys/a1****/device1/thing/event/property/post_reply 訂閱 下行通信:設備通過訂閱該Topic,獲取物聯平臺響應設備屬性上報的消息。
/sys/a1****/device1/thing/service/property/set 訂閱 下行通信:設備通過該訂閱Topic,獲取物聯網平臺下發的消息。

設備上報屬性

  1. 在MQTT.fx上單擊Subscribe,在Subscribe文本框中,輸入具有訂閱權限的Topic:/sys/a1****/device1/thing/event/property/post_reply
  2. 在MQTT.fx上單擊Publish,在Publish文本框中,輸入具有發布權限的Topic:/sys/a1****/device1/thing/event/property/post
  3. 在文本編輯頁面,輸入要上報的屬性數據,然后單擊Publish
    設備上報屬性數據的格式,需符合標準Alink JSON格式。具體說明,請參見設備上報屬性。本示例上報屬性LightCurrentLightSwitch數據。物模型屬性
  4. 在MQTT.fx上單擊Subscribe,查看物聯網平臺返回給設備的響應消息。
    如下圖所示,設備上報屬性成功。響應消息
  5. 登錄物聯網平臺控制臺,在對應實例下,選擇設備管理 > 設備
  6. 單擊設備對應操作列的查看,在設備詳情頁面單擊物模型數據,查看設備數據。

設置設備屬性

  1. 在MQTT.fx上單擊Subscribe,在Subscribe文本框中,輸入具有訂閱權限的Topic:/sys/a1****/device1/thing/service/property/set
  2. 登錄物聯網平臺控制臺,在對應實例下,選擇監控運維 > 在線調試
  3. 選擇要調試的設備,然后在屬性調試頁簽下,設置主燈開關關閉-0
  4. 單擊設置,發送指令。
  5. 在MQTT.fx上的Subscribe頁簽下,查看設備接收的消息。
    屬性設置

查看日志

  • 登錄物聯網平臺控制臺,在對應實例下的日志服務頁面,查看時間、TraceID和業務類型等運行日志消息。具體操作,請參見查詢云端運行日志
  • 在MQTT.fx上,單擊Log查看操作日志和錯誤提示日志。查看mqtt.fx的log