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

IoT Platform:OTA アップデートの概要

最終更新日:Jun 09, 2026

Over-the-Air (OTA) 技術は、ワイヤレスネットワーク経由でデバイスのファームウェア、ソフトウェア、またはドライバーを更新して、機能を追加し、脆弱性を修正し、パフォーマンスを最適化します。このトピックでは、IoT Platform に接続されているデバイスの OTA アップデートプロセスについて説明します。

制限

OTA を使用するデバイスは、MQTT 経由で IoT Platform に接続する必要があります。デバイスは、MQTT または HTTPS 経由で更新パッケージをダウンロードできます。

  • 各 Alibaba Cloud アカウントは、最大 500 個の更新パッケージをサポートします。アカウント配下のすべての RAM ユーザーがこのクォータを共有します。

  • 更新パッケージの数、サイズ、フォーマット、およびリージョンには、以下の制限が適用されます。

    • HTTPS ダウンロード:1 つの更新には、1 つ以上のファイルを含めることができます。単一ファイルのサイズは最大 1,000 MB です。サポートされているフォーマットは、.bin.dav.tar.gz.zip.gzip.apk.tar.gz.tar.xz、および .pack のみです。

    • MQTT ダウンロード:最大 16 MB までの単一ファイルにのみ対応しており、China (Shanghai)、China (Beijing)、および China (Shenzhen) リージョンでのみ利用できます。MQTT ファイルダウンロードを開発するには、C Link SDK を使用してください (サンプルコード)。

仕組み

image
説明
  • 分散デバイスは、宛先インスタンスに配布された後、Over-the-Air (OTA) で更新できます。

前提条件

OTA アップデート手順

image
説明

このトピックの例では C Link SDK を使用しています。その他の言語の例については、「概要」をご参照ください。

ステップ1:バージョン番号の報告

  1. OTA 機能を設定します。

    1. デバイスを IoT Platform に接続する。 IoT Platform コンソールで、対象のインスタンスを選択し、[デバイス管理] > [デバイス] の順に選択します。 デバイスのステータスが [オンライン] であることを確認します。

    2. OTA 機能を初期化します

    3. OTA 機能を設定します

  2. 現在のバージョン番号を報告します。デバイスは、最初の更新の前にバージョンを報告する必要があります。起動時に 1 回だけバージョンを報告し、定期的に報告しないでください。1 回の呼び出しにつき、1 つのモジュールバージョンのみ報告できます。トピックとメッセージフォーマット:本トピック末尾の「メッセージフォーマット」を参照してください。

ステップ2:更新パッケージ情報のプッシュ

  1. 更新パッケージの追加:製品の OTA モジュールと更新パッケージを追加します。

    • モジュール:同じ製品のデバイス向けの、ユーザー定義の更新可能なモジュール (ファームウェア、ソフトウェア、ドライバーなど) です。

    • フルパッケージ:完全な更新ファイル。1 つ以上のパッケージを追加できます。複数のサンプルパッケージの追加には C Link SDK が必要です。フル更新の前にデバイスが OTA モジュールバージョンを報告する必要はありませんが、バージョンを報告しない場合、一括更新で特定のバージョンをターゲットにすることはできません。一括更新ジョブの作成

    • 差分パッケージ:現在のバージョンとターゲットバージョンの差分のみが含まれます。デバイスは、更新前にローカルで差分復元を実行してフルパッケージを再構築します。差分更新により、OTA アップデートクォータの消費とダウンロードトラフィックが削減されます。デバイスは、差分更新の前に OTA モジュールバージョンを報告する必要があります。

      • AliOS Things チップの場合、Alibaba Cloud が差分パッケージ生成と差分復元アルゴリズムを提供します。OTA Diff Tools ユーザーガイド

      • その他のデバイスの場合、差分パッケージの生成と差分復元アルゴリズムの開発をご自身で行う必要があります。

  2. オプション:アップデートパッケージの検証:パッケージを追加する際に [アップデートパッケージの検証][はい] に設定した場合、一括デプロイの前に、選択したデバイスでテストする必要があります。パッケージは、テストデバイスのアップデートが成功した後にのみ利用可能になります。

    OTA アップデートを続行する前に、アプリケーションによる確認を要求できます。

    1. アプリケーションをご自身で開発してください。プラットフォームはデバイスに更新メッセージをプッシュしません。アプリケーションが更新メッセージをクエリする必要があります。

    2. アプリケーションは ListOTAUnfinishedTaskByDevice を呼び出して、未完了のデバイス更新ジョブをクエリします。

    3. アプリケーションは ConfirmOTATask を呼び出して更新ジョブを確認します。プラットフォームは、確認後にのみデバイスに更新メッセージをプッシュします。

  3. バッチ更新ジョブを作成する:IoT プラットフォームは、更新情報 (パッケージ URL、バージョン、サイズ) をデバイスにバッチで送信します。デバイスのステータスは [更新待ち] または [確認待ち] に変わり、デバイスが進捗を報告すると [更新中] に変わります。

ステップ3:更新パッケージのダウンロード

  1. 更新パッケージ情報の取得。オフラインのデバイスは更新メッセージを受信できません。デバイスがオンラインになると、IoT Platform は保留中の更新を確認し、必要に応じてメッセージをプッシュします。

    • IoT Platform が更新パッケージ情報をプッシュします。デバイスは次のトピックをサブスクライブします: /ota/device/upgrade/${YourProductKey}/${YourDeviceName}。デバイスは、次の2つのシナリオでこのトピックの更新情報を受信します。

      • ジョブ作成時にデバイスがオンラインの場合:IoT Platform は更新情報を即座にプッシュします。

      • ジョブ作成時にデバイスがオフラインの場合:IoT Platform は、デバイスがオンラインになった時点で更新情報をプッシュします。

    • デバイスが更新パッケージ情報をプルします。デバイスがトピックにリクエストをパブリッシュすると、IoT Platform は応答トピックで更新パッケージ情報を返します。トピックとメッセージフォーマット:本トピック末尾の「メッセージフォーマット」を参照してください。

    • HTTPS および MQTT ダウンロードのメッセージフォーマット:本トピック末尾の「メッセージフォーマット」を参照してください。

  2. デバイスは、HTTPS または MQTT プロトコルを使用して更新パッケージをダウンロードします。

  3. 更新の進捗の報告。トピックとメッセージフォーマット:本トピック末尾の「メッセージフォーマット」を参照してください。

    重要

    デバイスが 3 秒よりも頻繁に進捗を報告する場合、コンソールの[バッチ詳細]タブに一部の進捗エントリが表示されない場合があります。

  4. 新しいバージョン番号を報告します。更新後すぐにデバイスを再起動してください。オンラインになってから 2 秒以内に新しいバージョンを報告してください。

    重要

    IoT プラットフォームは、報告されたバージョンがターゲットバージョンと一致した場合にのみ、更新が成功したとみなします。報告された進捗が 100% に達しても、[デバイス更新のタイムアウト] 期間が満了する前に新しいバージョン番号が報告されない場合、更新は失敗します。

    • トピック: /ota/device/inform/${YourProductKey}/${YourDeviceName}

    • メッセージフォーマット

      {
        "id": 1,
        "params": {
          "version": "2.0.0"
        }
      }

ステップ4:更新結果の表示

  1. 更新ステータスの表示:対象デバイスの更新ステータス、更新パッケージ情報などを表示します。

  2. 更新パッケージバージョンと成功率の表示:更新後のバージョン分布と成功率の統計を表示します。OTA アップデート失敗の原因を分析して、成功率を向上させます。

関連ドキュメント

メッセージフォーマット

バージョン番号の報告

  • トピック:/ota/device/inform/${YourProductKey}/${YourDeviceName}

  • メッセージフォーマット

    {
      "id": 1,
      "params": {
        "version": "1.0.0",
        "module": "mcu"      // ファームウェアモジュール。デフォルトモジュールの場合は空文字列 "" を指定します。
      }
    }

    パラメーター

    タイプ

    説明

    id

    文字列 / 長整数

    メッセージ ID。文字列または長整数を指定できます。値の範囲:0~4294967295。デバイスごとに一意である必要があります。

    version

    文字列

    OTA モジュールのバージョン。

    module

    文字列

    OTA モジュール名。デフォルトモジュールのバージョンを報告する場合は、このパラメーターを空のままにします。デフォルトモジュールは、デバイスファームウェア全体を表します。

更新パッケージの能動的なプル

  1. デバイスは、トピック /sys/{productKey}/{deviceName}/thing/ota/firmware/get にメッセージをパブリッシュします。

    • メッセージフォーマット

      {
          "id": "123",
          "version": "1.0",
          "params": {
              "module": "MCU"
          },
          "method": "thing.ota.firmware.get"
      }
    • パラメーターの説明

      パラメーター

      タイプ

      説明

      id

      文字列

      メッセージ ID。値は 0~4294967295 の数値を含む文字列であり、現在のデバイスで一意である必要があります。

      version

      文字列

      プロトコルバージョン。値は 1.0 に固定されています。

      params

      オブジェクト

      リクエストパラメーター。

      module

      文字列

      アップデートパッケージが属するモジュールの名前。このパラメーターを指定しない場合、デフォルトモジュールのアップデートパッケージ情報がリクエストされます。

      method

      文字列

      リクエストメソッド。値は thing.ota.firmware.get です。

  2. IoT Platform がリクエストを受信すると、レスポンストピック /sys/{productKey}/{deviceName}/thing/ota/firmware/get_reply でアップデートパッケージ情報をデバイスに返します。

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\":\"基盤となるカメラドライバーを更新して、ビデオ画像がぼやける問題を解決します。\"}"
        }
    }
}

マルチファイルパッケージのダウンロード

{
    "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"
}

パラメーター

タイプ

説明

id

Long

メッセージ ID です。ID は現在のデバイスで一意である必要があります。

message

文字列

結果情報です。

code

文字列

ステータスコードです。

version

文字列

デバイスのアップデートパッケージのバージョンです。

size

Long

アップデートパッケージファイルのサイズ (バイト) です。

このパラメーターは、OTA アップデートパッケージに単一のファイルが含まれる場合にのみ含まれます。

url

文字列

Object Storage Service (OSS) 上のアップデートパッケージの保存先アドレスです。

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

dProtocol

文字列

アップデートパッケージをダウンロードするためのプロトコルです。

このパラメーターは、アップデートパッケージが MQTT 経由でダウンロードされる場合にのみ含まれます。

streamId

Long

MQTT 経由で OTA アップデートパッケージをダウンロードするための一意の識別子です。

このパラメーターは、アップデートパッケージが MQTT 経由でダウンロードされる場合にのみ含まれます。

streamFileId

Integer

単一のアップデートパッケージファイルの一意の識別子です。

このパラメーターは、アップデートパッケージが MQTT 経由でダウンロードされる場合にのみ含まれます。

isDiff

Long

このパラメーターは、アップデートパッケージがデルタパッケージの場合にのみ含まれます。

値が 1 の場合、パッケージには新しいバージョンと以前のバージョンの差分のみが含まれ、デバイスはデルタリストアを実行する必要があります。

digestsign

文字列

セキュアな更新用の OTA アップデートパッケージファイルの署名です。セキュアな更新が有効になっている場合にのみ含まれます。この機能は、更新パッケージの追加で有効にします。

sign

文字列

OTA アップデートパッケージファイルの署名です。

このパラメーターは、OTA アップデートパッケージに単一のファイルが含まれる場合にのみ含まれます。

signMethod

文字列

署名方法です。有効な値:

  • SHA256

  • MD5

Android のデルタアップデートパッケージでは、MD5 署名方法のみがサポートされています。

md5

文字列

署名方法が MD5 の場合、sign パラメーターと md5 パラメーターの両方に値が設定されます。

このパラメーターは、OTA アップデートパッケージに単一のファイルが含まれる場合にのみ含まれます。

module

文字列

アップデートパッケージが属するモジュールの名前です。モジュール名がデフォルトの場合、IoT Platform は module パラメーターを送信しません。

extData

オブジェクト

更新バッチタグのリストと、デバイスにプッシュされるカスタム情報です。

_package_udi フィールドはカスタム情報を示します。

単一タグの書式は "key": "value" です。

files

配列

複数のアップデートパッケージファイルに関する情報のリストです。

このパラメーターは、OTA アップデートパッケージに複数のファイルが含まれる場合に含まれます。各ファイルの情報は次のとおりです:

  • fileSize:アップデートパッケージファイルのサイズ (バイト) です。

  • fileName:アップデートパッケージファイルの名前です。

  • fileUrlfileMd5、および fileSign:これらのパラメーターは、urlmd5、および sign と同じです。

MQTT プロトコルによるダウンロード

MQTT 経由でアップデートパッケージをダウンロードする場合、単一ファイルパッケージのみに対応しています。デバイスが OTA アップデートパッケージ情報を取得した後、[フルダウンロード] または [分割ダウンロード] を選択できます。

  1. [フルダウンロード]

    • メッセージフォーマット

      {
          "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"
              }
          }
      }
    • パラメータの説明

      パラメータ

      タイプ

      説明

      id

      Long

      メッセージ ID。ID は、現在のデバイスで一意である必要があります。

      message

      String

      結果情報。

      code

      Integer

      ステータスコード。

      version

      String

      デバイスアップデートパッケージのバージョン。

      size

      Long

      アップデートパッケージファイルのサイズ (バイト単位)。

      このパラメータは、OTA アップデートパッケージに単一のファイルが含まれている場合にのみ含まれます。

      url

      String

      Object Storage Service (OSS) 内のアップデートパッケージのストレージアドレス。

      このパラメータは、OTA アップデートパッケージに単一のファイルが含まれており、HTTPS 経由でダウンロードされる場合にのみ含まれます。

      dProtocol

      String

      アップデートパッケージをダウンロードするためのプロトコル。

      このパラメータは、アップデートパッケージが MQTT 経由でダウンロードされる場合にのみ含まれます。

      streamId

      Long

      MQTT 経由で OTA アップデートパッケージをダウンロードするための一意の識別子。

      このパラメータは、アップデートパッケージが MQTT 経由でダウンロードされる場合にのみ含まれます。

      streamFileId

      Integer

      単一のアップデートパッケージファイルの一意の識別子。

      このパラメータは、アップデートパッケージが MQTT 経由でダウンロードされる場合にのみ含まれます。

      isDiff

      Long

      このパラメータは、アップデートパッケージが差分パッケージである場合にのみ含まれます。

      値が 1 の場合は、パッケージに新しいバージョンと以前のバージョンの差分のみが含まれていることを示し、デバイスは差分復元を実行する必要があります。

      digestsign

      String

      セキュアアップデートのための OTA アップデートパッケージファイル署名。セキュアアップデートが有効になっている場合にのみ含まれます。「アップデートパッケージの追加」でこの機能を有効にします。

      sign

      String

      OTA アップデートパッケージファイルの署名。

      このパラメータは、OTA アップデートパッケージに単一のファイルが含まれている場合にのみ含まれます。

      signMethod

      String

      署名方式。有効な値:

      • SHA256

      • MD5

      Android の差分アップデートパッケージでは、MD5 署名方式のみがサポートされています。

      md5

      String

      署名方式が MD5 の場合、sign パラメータと md5 パラメータの両方に値が割り当てられます。

      このパラメータは、OTA アップデートパッケージに単一のファイルが含まれている場合にのみ含まれます。

      module

      String

      アップデートパッケージが属するモジュールの名前。モジュール名がデフォルトの場合、IoT Platform は module パラメータを送信しません。

      extData

      Object

      更新バッチタグのリストと、デバイスにプッシュされるカスタム情報。

      _package_udi フィールドはカスタム情報を示します。

      単一のタグの形式は "key":"value" です。

      files

      Array

      複数のアップデートパッケージファイルに関する情報のリスト。

      このパラメータは、OTA アップデートパッケージに複数のファイルが含まれている場合に含まれます。各ファイルの情報は次のとおりです:

      • fileSize:アップデートパッケージファイルのサイズ。

      • fileName:アップデートパッケージファイルの名前。

      • fileUrlfileMd5fileSign:これらのパラメータは、urlmd5sign と同様です。

  2. [オプション: 分割ダウンロード]。前述のアップデートパッケージ情報を取得した後、デバイスは次のトピックを使用して OTA アップデートパッケージファイルを分割ダウンロードします。

    • リクエストトピック: /sys/${productKey}/${deviceName}/thing/file/download

    • レスポンストピック: /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
       }
       }
      }
    • リクエストメッセージのパラメータの説明

      パラメータ

      タイプ

      説明

      id

      String

      メッセージ ID。値は 0~4294967295 の数値を含む文字列で、現在のデバイスで一意である必要があります。

      version

      String

      プロトコルバージョン。値は 1.0 に固定されています。

      params

      Object

      リクエストパラメータ。

      fileToken

      String

      ファイルの一意のトークン。このパラメータは必須ではありません。数字、文字、アンダースコア (_)、ピリオド (.) をサポートします。値の長さは最大 16 文字です。

      使用上の注意:

      • このパラメータを指定すると、IoT Platform はデバイスリクエストへのレスポンスでそれを返します。これにより、マルチファイルダウンロードシナリオで、レスポンスメッセージ内の対応するダウンロード済みファイルを確認できます。

      • 現在のファイルのリクエストとレスポンスのサイクル中に、デバイスが他のファイルのダウンロードリクエストを開始する必要がない場合は、このパラメータを空のままにすることができます。

      fileInfo

      Object

      OTA アップデートパッケージファイル情報。

      streamId

      Long

      MQTT 経由で OTA アップデートパッケージをダウンロードするための一意の識別子。

      fileId

      Integer

      単一のアップデートパッケージファイルの一意の識別子。

      fileBlock

      Object

      ファイルチャンク情報。

      size

      Integer

      ダウンロードするファイルチャンクのサイズ (バイト単位)。値の範囲は 256~131072 です。最後のファイルチャンクの場合、値の範囲は 1~131072 です。

      offset

      Integer

      ファイルチャンクに対応するバイトの開始アドレス。値の範囲は 0~16777216 です。

    • レスポンスメッセージの構造

      image

      構造項目

      説明

      JSON バイト長

      レスポンスデータ内の JSON 文字列に対応するバイト配列の長さ。長さは 2 バイトで、上位バイトが先頭になります (ビッグエンディアン)。

      たとえば、レスポンスの JSON 文字列を UTF-8 エンコーディングを使用して変換したバイト配列の長さが 10 進数で 87 (16 進数で 57) の場合、上位バイトは 0x00、下位バイトは 0x57 となります。

      JSON 文字列バイト

      レスポンスデータ内の JSON 文字列の UTF-8 バイト配列。フォーマットの詳細は、後述の「レスポンスメッセージフォーマット」をご参照ください。

      ファイルブロックバイト

      現在のファイルチャンクのバイト配列。バイトはファイルヘッダーからのオフセットの昇順に配置されます。

      CRC16/IBM

      ファイルチャンクのチェックサム。CRC16/IBM のみがサポートされています。長さは 2 バイトで、下位バイトが先頭になります (リトルエンディアン)。

      たとえば、ファイルチャンクのチェックサムが 0x0809 の場合、下位バイトは 0x09、上位バイトは 0x08 となります。

    • レスポンスメッセージフォーマット

      {
       "id": "123456",
       "code":200,
       "msg":"file size has exceeded the limit 16 MB",
       "data": {
       "fileToken":"1bb8***",
       "fileLength":1238848,
       "bSize":1491,
       "bOffset":2
       }
      }
    • レスポンスメッセージのパラメータの説明

      パラメータ

      タイプ

      説明

      id

      String

      メッセージ ID。値は 0~4294967295 の数値を含む文字列で、現在のデバイスで一意である必要があります。

      デバイスリクエストのメッセージ ID が返されます。これは、リクエストトピック /sys/${productKey}/${deviceName}/thing/file/download のデータに含まれる id です。

      code

      Integer

      ステータスコード。値が 200 の場合は成功を示します。

      msg

      String

      リクエストが失敗した場合に返されるエラーメッセージ。

      data

      Object

      デバイスに返されるデータ。

      fileToken

      String

      ファイルの一意のトークン。このパラメータは、リクエストパラメータで fileToken が指定された場合に返されます。

      fileLength

      Integer

      ファイルの合計サイズ (バイト単位)。

      bSize

      Integer

      現在のファイルチャンクのサイズ (バイト単位)。

      bOffset

      Integer

      現在のファイルチャンクに対応するバイトの開始アドレス。この値は、リクエストデータ内の offset の値と同じです。単位はバイトです。

更新の進捗報告

  • デバイスは、トピック /ota/device/progress/${YourProductKey}/${YourDeviceName} にメッセージをパブリッシュします。

  • メッセージフォーマット

    {
        "id": "123",
        "params": {
            "step": "-1",
            "desc": "OTA アップデートが失敗しました。アップデートパッケージ情報のリクエストに失敗しました。",
            "module": "MCU"
        }
    }
  • フォーマット

    パラメーター

    タイプ

    説明

    id

    文字列

    メッセージ ID。値は 0~4294967295 の数値を表す文字列であり、現在のデバイスにおいて一意である必要があります。

    step

    文字列

    OTA アップデートの進捗。アップデートシナリオに基づいて、進捗値と説明を設定します。デバイス側の設定:サンプルコード

    • 1~100 の整数: アップデートの進捗率。

    • -1: アップデート失敗

    • -2: ダウンロード失敗

    • -3: 検証失敗

    • -4: 書き込み失敗

    desc

    文字列

    現在のステップの説明。値の長さは最大 128 文字です。例外が発生した場合、このフィールドにエラーメッセージを含めることができます。

    module

    文字列

    OTA アップデートパッケージのモジュール名。モジュールの詳細:アップデートパッケージの追加

    デフォルトモジュールの OTA アップデートの進捗を報告する場合、 module パラメーターは空にすることができます。