すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:OTAアップデートの実行

最終更新日:Feb 06, 2024

IoT Platformは、無線 (OTA) 機能をサポートしています。 OTA機能を使用してデバイスを更新できます。 このトピックでは、MQTT (Message Queuing Telemetry Transport) を使用してデバイスをIoT Platformに接続する場合に、OTA機能を使用してデバイスを更新する方法について説明します。 このトピックでは、OTAアップデートでデータ転送中に使用されるトピックとデータ形式についても説明します。

処理中

次の図は、MQTT上でOTA更新を実行するプロセスを示しています。

Process

  • 差分更新を実行するには、デバイスはOTAモジュールのバージョン番号を送信する必要があります。 完全な更新を実行するために、デバイスはOTAモジュールのバージョン番号を送信する必要はありません。 バージョン番号が送信されない場合、バッチ更新を構成するときにソースバージョンを指定することはできません。 詳細については、「バッチ更新の開始」をご参照ください。

    デバイスは、最初の更新前の起動中に1回だけバージョン番号を送信する必要があります。 アップデートがデバイスにインストールされた後、デバイスはすぐに現在のバージョン番号を送信する必要があります。

  • IoT Platformコンソールで複数のデバイスの更新を開始すると、各デバイスは更新待ち状態になります。

    IoT Platformがデバイスによって送信された更新の進行状況を受信すると、デバイスのステータスは [更新中] に変わります。

    説明 デバイスがIoT Platformから更新通知を受信すると、デバイスは更新パッケージをダウンロードして、すぐに、またはオフピークの営業時間中に更新を実行できます。
  • IoT Platformは、デバイスによって送信されたバージョン番号に基づいて、OTAの更新が成功したかどうかを確認します。
  • オフラインデバイスは、IoT Platformから更新通知を受信できません。

    デバイスがオンラインになった後、IoT Platformはデバイスを更新する必要があるかどうかを確認します。 更新が必要な場合、IoT Platformはデバイスに更新通知を送信します。 そうでない場合、通知は送信されない。

メッセージ形式

言語固有のSDKを使用してデバイスにOTAアップデートを実装する方法の詳細については、 Link SDKドキュメント

以下のステップは、OTA更新を実行するプロセスを説明する。

  1. オプションです。 デバイスをIoT PlatformのOTAサービスに接続し、バージョン番号を送信します。

    バージョン番号は、MQTTを介して次のトピック /ota/device/inform/${productKey}/${deviceName} にプッシュされます。 サンプルメッセージ:

    {
        "id": "123",
        "params": {
            "version": "1.0.1" 、
            "モジュール": "MCU"
        }
    }
    表1. パラメーター
    パラメーターデータ型説明
    idStringメッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。
    バージョンStringOTAモジュールのバージョン。
    モジュールStringOTAモジュールの名前。
    説明
    • デバイスがデフォルトモジュールのバージョンを送信する場合、moduleパラメーターはオプションです。
    • デフォルトモジュールのバージョンは、デバイスファームウェアのバージョンを示す。
  2. IoT Platformコンソールで、更新パッケージを追加し、更新パッケージを確認してから、バッチ更新を開始します。

    詳細については、「概要」をご参照ください。

  3. IoT Platformコンソールで更新を開始すると、デバイスはトピックから更新パッケージのURLを受け取ります。

    URLを含むメッセージは、IoT PlatformのOTAサービスから次のトピック /ota/device/upgrade/${productKey}/${deviceName} に送信されます。 IoT PlatformがデバイスにOTA更新リクエストを送信した後、デバイスはトピックから更新パッケージのURLを受信します。

    サンプルメッセージ:

    • 単一のファイルを含むOTAアップデートパッケージに関するサンプル情報:
      • HTTPS経由でOTAアップデートパッケージをダウンロードします:
        {
            "id": "123",
            "code": 200,
            "data": {
                "サイズ": 93796291、
                "sign": "f8d85b250d4d787a9f483d89a974 ***" 、
                "version": "10.0.1.9.20171112.1432" 、
                "isDiff": 1、
                "url": "https:// the_firmware_url" 、
                "signMethod": "MD5" 、
                "md5": "f8d85b250d4d787a9f48 ***" 、
                "モジュール": "MCU" 、
                "extData":{
                    "key1":"value1" 、
                    "key2":"value2" 、
                    "_package_udi":"{\" ota_notice\":\" カメラドライバーを更新して、ビデオがぼやけないようにします。 \"}"
                }
            }
        }
      • MQTT経由でOTAアップデートパッケージをダウンロードします:
        {
            "id": "123",
            "code": 200,
            "data":{
                "サイズ":432945、
                "digestsign":"A4WOP *** SYHJ6DDDJD9 ***" 、
                "version":"2.0.0" 、
                "isDiff":1、
                "signMethod":"MD5" 、
                "dProtocol":"mqtt" 、
                "streamId":1397345、
                "streamFileId":1、
                "md5":"93230c3bde ***" 、
                "sign":"93230c3bde42 ***" 、
                "モジュール":"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 ****"
                 }
              ],
              "モジュール": "MCU" 、
              "extData":{
                  "key1":"value1" 、
                  "key2":"value2" 、
                  "_package_udi":"{\" ota_notice\":\" カメラドライバーを更新して、ビデオがぼやけないようにします。 \"}"
              }
          }
      }
    表2. パラメーター
    パラメーターデータ型説明
    idLongメッセージの ID 。 各メッセージIDは、デバイスに対して一意である。
    メッセージString応答メッセージ。
    コードStringHTTP ステータスコード
    バージョンStringOTAアップデートパッケージのバージョン。
    サイズLong更新パッケージのサイズ。 単位:バイト

    このパラメーターは、OTA更新パッケージに単一のファイルが含まれている場合に使用できます。

    urlStringOTA更新パッケージのObject Storage Service (OSS) URL。

    このパラメーターは、OTAアップデートパッケージに単一のファイルが含まれ、ダウンロードプロトコルがHTTPSの場合に使用できます。

    dProtocolStringOTA更新パッケージのダウンロードに使用されるプロトコル。

    このパラメーターは、ダウンロードプロトコルがMQTTの場合に使用できます。

    streamIdLongMQTT経由でOTA更新パッケージをダウンロードするときに生成される一意のID。

    このパラメーターは、ダウンロードプロトコルがMQTTの場合に使用できます。

    streamFileIdInteger単一のファイルを含むOTA更新パッケージの一意のID。

    このパラメーターは、ダウンロードプロトコルがMQTTの場合に使用できます。

    isDiffLongこのパラメーターは、更新パッケージがデルタ更新パッケージの場合に使用できます。

    値を1に設定します。 この値は、更新パッケージに新しいバージョンと以前のバージョンの違いのみが含まれることを示します。 この場合、デルタ更新が実行される。

    digestsignStringセキュアな更新後のOTA更新パッケージの署名が実行される。 このパラメータは、安全な更新機能がOTA更新パッケージで有効になっている場合に使用できます。 安全な更新機能を有効にする方法の詳細については、「更新パッケージの追加」をご参照ください。
    サインStringOTA更新パッケージの署名。

    このパラメーターは、OTA更新パッケージに単一のファイルが含まれている場合に使用できます。

    signMethodString署名アルゴリズム。 有効な値:
    • SHA256
    • MD5
    Android用のDeltaアップデートパッケージは、MD5アルゴリズムのみをサポートします。
    md5String署名アルゴリズムがMD5の場合、IoT Platformはsignおよびmd5パラメーターの値を指定します。

    このパラメーターは、OTA更新パッケージに単一のファイルが含まれている場合に使用できます。

    モジュールStringOTA更新パッケージが適用されるモジュールの名前。
    説明 OTA更新パッケージがデフォルトモジュールに適用されている場合、IoT Platformはmoduleパラメーターを送信しません。
    extDataオブジェクト更新バッチのタグと、IoT Platformでデバイスにプッシュするカスタム情報。

    _package_udiはカスタム情報を指定します。

    各タグの形式: "key":"value"

    ファイル配列更新パッケージ内のファイルに関する情報。

    このパラメーターは、OTA更新パッケージに複数のファイルが含まれている場合に使用できます。 単一のファイルに関する情報:

    • fileSize: ファイルのサイズ。
    • fileName: ファイルの名前。
    • fileUrlfileMd5、およびfileSign: これらのパラメーターは、このテーブルのurlmd5、およびsignパラメーターに対応します。
  4. オプションです。 デバイスSDKが更新パッケージのURLを受信してから24時間以内に更新パッケージをダウンロードします。 それ以外の場合、URLは期限切れになります。 デバイスは、次のトピックにメッセージを送信することで、IoT Platformから新しい更新タスクを要求できます。

    /sys/${productKey}/${deviceName}/thing/ota/firmware/get サンプルメッセージ:

    {
        "id": "123",
        "version": "1.0"、
        "params": {
            "モジュール": "MCU"
        },
        "method": "thing.ota.firmware.get"
    } 
    表4. パラメーター
    パラメーターデータ型説明
    idStringメッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。
    バージョンStringプロトコルのバージョン。 値を 1.0 に設定します。
    paramsオブジェクトリクエストのパラメーター
    モジュールStringOTA更新パッケージが適用されるモジュールの名前。
    説明 このパラメーターを設定しない場合、デフォルトモジュールの更新パッケージ情報が要求されます。
    メソッドStringリクエスト方式。 値をthing.ota.firmware.getに設定します。

    IoT Platformがリクエストを受信すると、IoT Platformは更新パッケージ情報を /sys/${productKey}/${deviceName}/thing/ota/firmware/get_replyのトピックに送信します。

    • IoT Platformは、最新の更新パッケージに関する情報をデバイスに送信します。 レスポンス例:
      • 単一のファイルを含むOTAアップデートパッケージに関するサンプル情報:
        • HTTPS経由でOTAアップデートパッケージをダウンロードします:
          {
              "id": "123",
              "code": 200,
              "data": {
                  "サイズ": 93796291、
                  "sign": "f8d85b250d4d787a9f483d89a974 ***" 、
                  "version": "10.0.1.9.20171112.1432" 、
                  "isDiff": 1、
                  "url": "https:// the_firmware_url" 、
                  "signMethod": "MD5" 、
                  "md5": "f8d85b250d4d787a9f48 ***" 、
                  "モジュール": "MCU" 、
                  "extData":{
                      "key1":"value1" 、
                      "key2":"value2" 、
                      "_package_udi":"{\" ota_notice\":\" カメラドライバーを更新して、ビデオがぼやけないようにします。 \"}"
                  }
              }
          }
        • MQTT経由でOTAアップデートパッケージをダウンロードします:
          {
              "id": "123",
              "code": 200,
              "data":{
                  "サイズ":432945、
                  "digestsign":"A4WOP *** SYHJ6DDDJD9 ***" 、
                  "version":"2.0.0" 、
                  "isDiff":1、
                  "signMethod":"MD5" 、
                  "dProtocol":"mqtt" 、
                  "streamId":1397345、
                  "streamFileId":1、
                  "md5":"93230c3bde ***" 、
                  "sign":"93230c3bde42 ***" 、
                  "モジュール":"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 ****"
                   }
                ],
                "モジュール": "MCU" 、
                "extData":{
                    "key1":"value1" 、
                    "key2":"value2" 、
                    "_package_udi":"{\" ota_notice\":\" カメラドライバーを更新して、ビデオがぼやけないようにします。 \"}"
                }
            }
        }
      表1. 次の表にパラメーターを示します。
      パラメーターデータ型説明
      idStringメッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。

      応答のメッセージIDは、要求のメッセージIDと同じです。 /sys/${productKey}/${deviceName}/thing/ota/firmware/getトピックに送信されたデータでidパラメーターを表示できます。

      コードIntegerステータスコード。 値が200の場合、リクエストが成功したことを示します。
      データString更新パッケージに関する情報。 詳細については、「OTAアップデートパッケージ情報をデバイスにプッシュする」をご参照ください。
    • 更新パッケージ情報が存在しない場合、IoT Platformは応答を送信します。 サンプル応答:
      {
          "id": "123",
          "code": 200,
          "data": {
          }
      }
  5. デバイスSDKが更新パッケージのURLを受信した後、デバイスはSDK内のAPI操作を呼び出して更新パッケージをダウンロードします。 詳細については、「概要」をご参照ください。
    説明 デバイスは、更新パッケージを自動的にダウンロードできません。 更新パッケージをダウンロードするには、SDKで必要な操作を呼び出す必要があります。 デバイスが24時間以内にURLから更新パッケージをダウンロードできない場合、URLは期限切れになります。

    更新パッケージのダウンロード時に生成されるログの詳細については、次のトピックを参照してください。

  6. 更新中、デバイスは更新の進行状況を /ota/device/progress/${productKey}/${deviceName} のトピックに送信します。
    説明 進捗レポートの頻度は、最大3秒に1回に設定することを推奨します。 実際の頻度が制限を超えると、IoT PlatformコンソールのOTA更新パッケージの [バッチ詳細] ページですべての進行状況情報を表示できない場合があります。

    サンプルメッセージ:

    {
        "id": "123",
        "params": {
            "step": "-1",
            "desc": "アップデートパッケージ情報が見つからないため、OTAアップデートに失敗しました。"
            "モジュール": "MCU"
        }
    }
    表3. パラメーター
    パラメーターデータ型説明
    idStringメッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。
    ステップString

    OTAアップデートの進行状況。

    有効な値:
    • 1から100までの整数: 更新の進行状況を表すパーセンテージを示します。
    • -1: 更新が失敗したことを示します。
    • -2: ダウンロードが失敗したことを示します。
    • -3: 検証が失敗したことを示します。
    • -4: ファームウェアのフラッシュが失敗したことを示します。

    OTA更新の進捗値と説明は、実際の要件に基づいてデバイスで設定できます。 デバイスでOTA更新機能を開発する方法の詳細については、「サンプルコード」をご参照ください。

    descString現在のステップの説明。 説明の長さは128文字を超えることはできません。 例外が発生した場合、このパラメーターにはエラーメッセージが含まれます。
    モジュールStringOTA更新パッケージが適用されるモジュールの名前。 詳細については、「アップデートパッケージの追加」をご参照ください。
    説明 デバイスがデフォルトモジュールの更新進行状況を送信する場合、moduleパラメーターはオプションです。
  7. デバイスのOTA更新が完了すると、デバイスは現在のファームウェアバージョンを /ota/device/inform/${productKey}/${deviceName} のトピックに送信します。 送信されたバージョンがOTAサービスによってトピックに送信されたバージョンと同じである場合、OTAの更新は成功です。 そうでない場合、OTA更新は失敗する。
    説明 IoT Platformは、送信されたファームウェアバージョンに基づいてOTAの更新が成功したかどうかを確認します。 例えば、デバイスは、100% の更新進捗を提出する。 ただし、現在のファームウェアバージョンが指定されたタイムアウト期間内に送信されない場合、IoT Platformは更新が失敗したと見なします。

    OTAの更新が完了したら、すぐにデバイスを再起動することをお勧めします。 デバイスがオンラインになったら、現在のバージョン番号を送信します。 デバイスをIoT Platformに接続するリクエストと、現在のバージョン番号を送信するリクエストの間隔は、2秒を超えることはできません。

(共通エラーコード 29~31 など)

  • The signature is invalid. 次の図に示すように、更新パッケージのURLが無効または変更されている場合、このエラーが発生します。 Data masking
  • アクセスは拒否されました。 URLの有効期限が切れたため、エラーが発生しました。 各URLは24時間有効です。 Data masking

API リファレンス

OTAアップデート