全部產品
Search
文件中心

IoT Platform:OTA升級

更新時間:Jun 30, 2024

物聯網平台提供OTA升級與管理服務。本文介紹OTA升級訊息的Topic和資料格式,包括裝置上報OTA模組版本、物聯網平台推送升級包資訊、裝置上報升級進度和裝置請求擷取最新升級包資訊。

裝置進行OTA升級的完成流程,請參見OTA升級步驟

裝置上報OTA模組版本

資料上行。

Topic:/ota/device/inform/${productKey}/${deviceName}

裝置通過這個Topic上報當前的OTA模組版本資訊。

重要 本Topic只支援單個模組的版本上報。如果裝置需要上報多個模組的版本,請分多次上報,每次上報一個模組的版本資訊。

請求資料格式:

{
    "id": "123",
    "params": {
        "version": "1.0.1",
        "module": "MCU"
    }
}
表 1. 參數說明
參數類型說明
idString訊息ID號。String類型的數字,取值範圍0~4294967295,且每個訊息ID在當前裝置中具有唯一性。
versionStringOTA模組版本。
moduleStringOTA模組名。
說明
  • 上報預設(default)模組的版本號碼時,可以不上報module參數。
  • 裝置的預設(default)模組的版本號碼代表整個裝置的韌體版本號碼。

物聯網平台推送OTA升級包資訊

資料下行。

Topic:/ota/device/upgrade/${productKey}/${deviceName}

物聯網平台通過這個Topic推送OTA升級包資訊, 裝置訂閱該Topic可以獲得升級包資訊。

  • 單個檔案的OTA升級包資訊:
    • 升級包下載協議為HTTPS:
      {
          "code": "1000",
          "data": {
              "size": 432945,
              "version": "2.0.0",
              "isDiff": 1,
              "url": "https://***/nop***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=XfgJu7P6DW***qAKU%3D&security-token=***Tz2IHtIf3***",
              "md5": "93230c3bde425a9d***",
              "digestsign":"A4WOP***SYHJ6DDDJD9***",
              "sign": "93230c3bde425a9d***",
              "signMethod": "MD5",
              "module": "MCU",
              "extData":{
                  "key1":"value1",
                  "key2":"value2",
                  "_package_udi":"{\"ota_notice\":\"升級底層網路攝影機驅動,解決視頻映像模糊的問題。\"}"
              }
          },
          "id": 1626969597470,
          "message": "success"
      }
    • 升級包下載協議為MQTT:
      {
          "code":"1000",
          "data":{
              "size":432945,
              "version":"2.0.0",
              "isDiff":1,
              "signMethod":"MD5",
              "dProtocol":"mqtt",
              "streamId":1397345,
              "streamFileId":1,
              "md5":"93230c3bde425***",
              "digestsign":"A4WOP***SYHJ6DDDJD9***",
              "sign":"93230c3bde425***",
              "module":"MCU",
              "extData":{
                  "key1":"value1",
                  "key2":"value2"
              }
          },
          "id":1507707025,
          "message":"success"
      }
  • 多個檔案的OTA升級包僅支援HTTP下載協議,資訊如下:
    {
        "code": "1000",
        "data": {
            "version": "2.0.0",
            "isDiff": 1,
            "signMethod": "MD5",
            "files":[
                {
                    "fileSize":432944,
                    "fileName":"file1-name",
                    "fileUrl":"https://***/nop***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=***XJEH0qAKU%3D&security-token=CAISuQJ***",
                    "fileMd5":"93230c3bde425a9d***",
                    "fileSign":"93230c3bde425a9d****"
                },
                {
                    "fileSize":432945,
                    "fileName":"file2-name",
                    "fileUrl":"https://***/no***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=***qAKU%3D&security-token=***q6Ft5B2y***",
                    "fileMd5":"93230c3bde425a92***",
                    "fileSign":"93230c3bde425a92****"
                }
            ],
            "module": "MCU",
            "extData":{
                "key1":"value1",
                "key2":"value2",
                "_package_udi":"{\"ota_notice\":\"升級底層網路攝影機驅動,解決視頻映像模糊的問題。\"}"
            }
        },
        "id": 1626969597470,
        "message": "success"
    }
表 2. 參數說明
參數類型說明
idLong訊息ID號。每個訊息ID在當前裝置中具有唯一性。
messageString結果資訊。
codeString狀態代碼。
versionString裝置升級包的版本資訊。
sizeLong升級包檔案大小,單位:位元組。

OTA升級包中僅有一個升級包檔案時,包含該參數。

urlString升級包在Object Storage Service上的儲存地址。

OTA升級包中僅有一個升級包檔案,且下載協議為HTTPS時,包含該參數。

dProtocolString升級包下載協議。

僅升級包下載協議為MQTT時,包含該參數。

streamIdLong通過MQTT協議下載OTA升級包時的唯一標識。

僅升級包下載協議為MQTT時,包含該參數。

streamFileIdInteger單個升級包檔案的唯一標識。

僅升級包下載協議為MQTT時,包含該參數。

isDiffLong僅當升級包類型為差分時,訊息包含此參數。

取值為1,表示僅包含新版本升級包與之前版本的差異部分,需要裝置進行差分還原。

digestsignStringOTA升級包檔案安全升級後的簽名。僅當OTA升級包開啟安全升級功能,才有此參數。開啟OTA升級包安全升級功能的方法,請參見安全升級
signStringOTA升級包檔案的簽名。

OTA升級包中僅有一個升級包檔案時,包含該參數。

signMethodString簽名方法。取值:
  • SHA256
  • MD5
對於Android差分升級包類型,僅支援MD5簽名方法。
md5String當簽名方法為MD5時,除了會給sign賦值外還會給md5賦值。

OTA升級包中僅有一個升級包檔案時,包含該參數。

moduleString升級包所屬的模組名。
說明 模組名為default時,物聯網平台不下發module參數。
extDataObject升級批次標籤列表和推送給裝置的自訂資訊。

_package_udi表示自訂資訊的欄位。

單個標籤格式:"key":"value"

filesArray多個升級包檔案的資訊列表。

OTA升級包中有多個檔案時,包含該參數。每個升級包檔案資訊如下:

  • fileSize:升級包檔案大小。
  • fileName:升級包檔案的名稱。
  • fileUrlfileMd5fileSign:含義與urlmd5sign相同。

裝置上報升級進度

資料上行。

Topic:/ota/device/progress/${productKey}/${deviceName}

OTA升級過程中,裝置可以通過這個Topic上報OTA升級的進度百分比。

說明 建議設定裝置端上報進度頻率為3秒內最多一次。若裝置上報進度頻繁,在物聯網平台控制台的OTA升級包詳情的批次詳情中,可能無法查看到上報的全部進度。

請求資料格式:

{
    "id": "123",
    "params": {
        "step": "-1",
        "desc": "OTA升級失敗,請求不到升級包資訊。",
        "module": "MCU"
    }
}
表 3. 參數說明
參數類型說明
idString訊息ID號。String類型的數字,取值範圍0~4294967295,且每個訊息ID在當前裝置中具有唯一性。
stepString

OTA升級進度。

取值範圍:
  • 1~100的整數:升級進度百分比。
  • -1:升級失敗。
  • -2:下載失敗。
  • -3:校正失敗。
  • -4:燒寫失敗。

裝置上報的進度值及其描述資訊,可根據裝置實際升級情境在裝置端配置。裝置端配置方法,請參見裝置端Link SDK的OTA升級

descString當前步驟的描述資訊,長度不超過128個字元。如果發生異常,此欄位可承載錯誤資訊。
moduleString升級包所屬的模組名。模組的更多資訊,請參見添加升級包
說明 上報預設(default)模組的OTA升級進度時,可以不上報module參數。

裝置請求OTA升級包資訊

資料上行。

請求Topic:/sys/${productKey}/${deviceName}/thing/ota/firmware/get

響應Topic:/sys/${productKey}/${deviceName}/thing/ota/firmware/get_reply

請求資料格式:

{
    "id": "123",
    "version": "1.0",
    "params": {
        "module": "MCU"
    },
    "method": "thing.ota.firmware.get"
}
表 4. 參數說明
參數類型說明
idString訊息ID號。String類型的數字,取值範圍0~4294967295,且每個訊息ID在當前裝置中具有唯一性。
versionString協議版本,固定為1.0。
paramsObject請求參數。
moduleString升級包所屬的模組名。
說明 不指定則表示請求預設(default)模組的升級包資訊。
methodString要求方法,取值thing.ota.firmware.get

物聯網平台收到裝置請求後,響應請求。

  • 下發升級包資訊。返回資料格式如下:
    • 單個檔案的OTA升級包資訊:
      • 升級包下載協議為HTTPS:
        {
            "id": "123",
            "code": 200,
            "data": {
                "size": 93796291,
                "sign": "f8d85b250d4d787a9f483d89a974***",
                "version": "10.0.1.9.20171112.1432",
                "isDiff": 1,
                "url": "https://the_firmware_url",
                "signMethod": "MD5",
                "md5": "f8d85b250d4d787a9f48***",
                "module": "MCU",
                "extData":{
                    "key1":"value1",
                    "key2":"value2",
                    "_package_udi":"{\"ota_notice\":\"升級底層網路攝影機驅動,解決視頻映像模糊的問題。\"}"
                }
            }
        }
      • 升級包下載協議為MQTT:
        {
            "id": "123",
            "code": 200,
            "data":{
                "size":432945,
                "digestsign":"A4WOP***SYHJ6DDDJD9***",
                "version":"2.0.0",
                "isDiff":1,
                "signMethod":"MD5",
                "dProtocol":"mqtt",
                "streamId":1397345,
                "streamFileId":1,
                "md5":"93230c3bde***",
                "sign":"93230c3bde42***",
                "module":"MCU",
                "extData":{
                    "key1":"value1",
                    "key2":"value2"
                }
            }
        }
    • 多個檔案的OTA升級包僅支援HTTP下載協議,資訊如下:
      {
          "id": "123",
          "code": 200,
          "data": {
              "version": "2.0.0",
              "isDiff": 1,
              "signMethod": "MD5",
              "files":[
                  {
                      "fileSize":432944,
                      "fileName":"file1-name",
                      "fileUrl":"https://iotx***.aliyuncs.com/nop***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=XfgJu7***U%3D&security-token=CAISu***",
                      "fileMd5":"93230c3bde425a9d7984a594ac55ea1e",
                      "fileSign":"93230c3bde425a9d7984a594ac55****"
                  },
                  {
                      "fileSize":432945,
                      "fileName":"file2-name",
                      "fileUrl":"https://iotx-***.aliyuncs.com/no***.tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=XfgJu7P***KU%3D&security-token=CAISuQJ***",
                      "fileMd5":"93230c3bde425a9d7984a594ac56ea1f",
                      "fileSign":"93230c3bde425a9d7984a594ac56****"
                 }
              ],
              "module": "MCU",
              "extData":{
                  "key1":"value1",
                  "key2":"value2",
                  "_package_udi":"{\"ota_notice\":\"升級底層網路攝影機驅動,解決視頻映像模糊的問題。\"}"
              }
          }
      }
    表 5. 參數說明
    參數類型說明
    idString訊息ID號。String類型的數字,取值範圍0~4294967295,且每個訊息ID在當前裝置中具有唯一性。

    此處訊息ID返回的是裝置請求中的訊息ID,即請求Topic/sys/${productKey}/${deviceName}/thing/ota/firmware/get資料中的id

    codeInteger狀態代碼,200表示成功。
    dataObject升級包資訊,其中參數說明,請參見物聯網平台推送OTA升級包資訊的參數表
  • 無升級包資訊下發。返回資料格式如下:
    {
        "id": "123",
        "code": 200,
        "data": {
        }
    }

裝置請求下載檔案分區

升級包下載協議為MQTT時,裝置端擷取OTA升級包資訊後,可通過以下Topic分區下載OTA升級包檔案。

重要 裝置端通過MQTT協議下載的單個檔案大小不能超過16 MB。
  • 請求Topic:/sys/${productKey}/${deviceName}/thing/file/download
  • 響應Topic:/sys/${productKey}/${deviceName}/thing/file/download_reply

請求資料格式:

{
    "id": "123456",
    "version": "1.0",
    "params": {
        "fileToken":"1bb8***",
        "fileInfo":{
            "streamId":1234565,
            "fileId":1
        },
        "fileBlock":{
            "size":256,
            "offset":2
        }
    }
}
表 6. 參數說明
參數類型說明
idString訊息ID號。String類型的數字,取值範圍0~4294967295,且每個訊息ID在當前裝置中具有唯一性。
versionString協議版本,固定為1.0。
paramsObject請求參數。
fileTokenString檔案的唯一標識Token,非必填參數。支援數字、英文字母、底線(_)和英文句號(.),不超過16個字元。

使用說明:

  • 若傳入該參數,物聯網平台響應裝置請求時,會返回該參數,便於您在裝置端多檔案下載情境下,從響應訊息中確認下載的對應檔案。
  • 若確認裝置端在下載檔案的請求和響應周期內,不需要對其他檔案發起下載請求,可不設定該參數。
fileInfoObjectOTA升級包檔案資訊。
streamIdLong通過MQTT協議下載OTA升級包時的唯一標識。
fileIdInteger單個升級包檔案的唯一標識。
fileBlockObject檔案分區資訊。
sizeInteger請求下載的檔案分區大小,單位位元組,取值範圍為256~131072。若為最後一個檔案分區,取值範圍為1~131072。
offsetInteger檔案分區對應位元組的起始地址。取值範圍為0~16777216。

響應資料格式:

  • 結構如下圖:結構圖
    結構項說明
    JSON Bytes Length表示響應資料中JSON字串對應的位元組數組長度,必須佔位2個位元組,高位位元組在前,低位位元組在後。

    例如,響應的JSON字串使用UTF-8編碼轉碼成位元組數組的長度為十進位的87,對應十六進位57,則高位位元組為0x00,低位位元組為0x57。

    JSON String Bytes表示響應資料中JSON字串對應的位元組數組,編碼格式為UTF-8。具體內容,請參見下文的“響應的JSON資料格式”。
    File Block Bytes表示當前檔案分區的位元組數組,位元組順序按照相對於檔案頭的位移量從小至大排列。
    CRC16/IBM表示檔案分區的校正值,僅支援CRC16/IBM,佔位2個位元組,低位位元組在前,高位位元組在後。

    例如,檔案分區的校正值為0x0809,則低位位元組為0x09,高位位元組為0x08。

  • 響應的JSON資料格式:
    {
        "id": "123456",
        "code":200,
        "msg":"file size has exceeded the limit 16 MB",
        "data": {
            "fileToken":"1bb8***",
            "fileLength":1238848,
            "bSize":1491,
            "bOffset":2
        }
    }
表 7. 參數說明
參數類型說明
idString訊息ID號。String類型的數字,取值範圍0~4294967295,且每個訊息ID在當前裝置中具有唯一性。

此處訊息ID返回的是裝置請求中的訊息ID,即請求Topic/sys/${productKey}/${deviceName}/thing/file/download資料中的id

codeInteger狀態代碼,200表示成功。
msgString請求失敗時,返回的錯誤資訊。
dataObject返回裝置端的資料。
fileTokenString檔案的唯一標識Token。若請求參數傳入了fileToken值,則返回該參數。
fileLengthInteger檔案的總大小,單位位元組。
bSizeInteger當前檔案分區的大小,單位位元組。
bOffsetInteger當前檔案分區對應位元組的起始地址,與請求資料中的offset值相同。單位位元組。

相關文檔

錯誤碼說明及解決辦法,請參見裝置端接收的錯誤碼