全部產品
Search
文件中心

IoT Platform:基於MQTT協議的裝置動態註冊

更新時間:Jun 30, 2024

在物聯網平台控制台為產品開啟動態註冊功能後,直連裝置可使用一型一密安全認證方式完成動態註冊,通過MQTT通訊協定串連物聯網平台。裝置先基於TLS建立與物聯網平台的串連,擷取MQTT串連所需的裝置密鑰,再中斷連線,然後重建立立MQTT串連進行通訊。本文介紹裝置的動態註冊流程。

前提條件

重要

一型一密免預註冊的地區限制、執行個體限制、操作流程等資訊,請參見一型一密免預註冊

已完成一型一密文檔中的以下步驟:

  1. 建立產品。

  2. 開啟動態註冊。

  3. 添加裝置。

  4. 產線燒錄。

動態註冊流程

流程

  1. 裝置發送CONNECT報文,報文中包含動態註冊參數,請求建立串連。

    說明

    目前,動態註冊只支援使用TLS建立串連,不支援TCP直連。動態註冊時,物聯網平台不會校正MQTT串連的Keep Alive(保活時間),因此可以不用設定Keep Alive時間。

    • MQTT串連網域名稱說明:公用執行個體和企業版執行個體中,MQTT的接入網域名稱,請參見查看和配置執行個體終端節點資訊(Endpoint)

      說明

      若直連裝置使用一型一密免預註冊認證方式,則${YourRegionId}值為cn-shanghai

    • CONNECT報文的動態註冊參數:

      • 當裝置屬於新版公用執行個體或企業版執行個體時,動態註冊參數如下:

        mqttClientId:clientId+"|securemode=-2,authType=xxxx,random=xxxx,signmethod=xxxx,instanceId=xxxx|"
        mqttUserName: deviceName+"&"+productKey
        mqttPassword:sign_hmac(productSecret,content)
      • 當裝置屬於舊版公用執行個體時,動態註冊參數如下:

        mqttClientId:clientId+"|securemode=2,authType=xxxx,random=xxxx,signmethod=xxxx|"
        mqttUserName: deviceName+"&"+productKey
        mqttPassword:sign_hmac(productSecret,content)
      說明

      執行個體的詳細說明,請參見執行個體概述

      參數說明:

      • mqttClientId

        參數取值中包含的詳細參數如下表所示。

        參數

        說明

        clientId

        用戶端ID,可自訂,長度在64個字元內。建議使用裝置的MAC地址或SN碼,方便您識別區分不同的用戶端。

        securemode

        安全模式。

        authType

        一型一密認證方式,不同類型將返回不同的認證參數:

        • register:一型一密預註冊認證方式,返回DeviceSecret。

        • regnwl:一型一密免預註冊認證方式,返回DeviceToken、ClientID。

        random

        隨機數。您自訂隨機數。

        signMethod

        簽名演算法。目前支援hmacmd5、hmacsha1、hmacsha256。

        instanceId

        執行個體ID。請登入物聯網平台控制台,在執行個體概覽頁面查看。

      • mqttUserName

        組成結構:deviceName+"&"+productKey

        樣本:device1&al123456789

      • mqttPassword

        計算方法:sign_hmac(productSecret,content)

        其中,content的值是提交給伺服器的必需參數和值(deviceName、productKey、random)按照字母順序排序、拼接(無拼接符號)的字串。然後,將content的值通過mqttClientId中的signMethod指定的演算法,使用產品的ProductSecret進行簽名計算。

        樣本:hmac_sha1(h1nQFYPZS0mW****, deviceNamedevice1productKeyal123456789random123)

  2. 物聯網平台返回CONNECT ACK。

    • 返回0,表示裝置動態註冊成功。

    • 返回其他值,表示裝置動態註冊失敗。請根據返回的錯誤碼,確定錯誤原因。

    裝置發送串連請求後,物聯網平台返回的結果狀態代碼和說明如下表。

    結果碼

    訊息

    說明

    0

    CONNECTION_ACCEPTED

    動態註冊成功。

    2

    IDENTIFIER_REJECTED

    參數錯誤。原因可能是:

    • 必填參數缺失或格式錯誤。

    • 您使用了TCP直連註冊。動態註冊只能使用TLS通道。

    3

    SERVER_UNAVAILABLE

    雲端錯誤。請稍後再試。

    4

    BAD_USERNAME_OR_PASSWORD

    動態註冊失敗,鑒權未通過。

    請檢查傳入的mqttUserNamemqttPassword取值是否正確。

  3. 建立串連後,物聯網平台通過推送認證的Topic,根據CONNECT報文中的authType,返回不同的認證參數。

    說明

    裝置無需訂閱推送認證的Topic。

    • 一型一密預註冊認證方式:Topic為/ext/registerauthType取值為register,返回DeviceSecret。

      物聯網平台推送的訊息Payload格式如下:

      {
        "productKey" : "***",
        "deviceName" : "***",
        "deviceSecret" : "***"
      }
    • 一型一密免預註冊認證方式:Topic為/ext/regnwlauthType取值為regnwl,返回ClientID、DeviceToken。

      物聯網平台推送的訊息Payload格式如下:

      {
        "productKey" : "***",
        "deviceName" : "***",
        "clientId" : "***",
        "deviceToken" : "***"
      }
  4. 裝置收到並儲存DeviceSecret,或ClientID和DeviceToken的組合,斷開當前MQTT串連。

    裝置可以通過發送DISCONNECT報文或直接斷開TCP串連,斷開當前串連。

    如果裝置未斷開此串連,15秒之後,物聯網平台會主動中斷連線。

    如果您使用Eclipse Paho MQTT用戶端,需設定MqttConnectOptions.setAutomaticReconnect(false)關閉自動重連。否則,註冊成功且TCP斷連後,重連邏輯會發起新的動態註冊請求。

  5. 裝置使用DeviceSecret(一型一密預註冊),或將ClientID轉化為mqttClientId後和DeviceToken組合(一型一密免預註冊),再次發起MQTT串連請求,建立裝置與物聯網平台的串連,進行訊息通訊。具體操作,請參見MQTT-TLS串連通訊

操作範例

直連裝置的動態註冊樣本,請參見一型一密動態註冊(MQTT通道)