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

IoT Platform:デバイスの OTA アップデート

最終更新日:Mar 22, 2025

このトピックでは、IOta インターフェイスを使用してデバイスで無線 (OTA) を実行する方法について説明します。

Android 用 Link SDK のダウンロードリンク

IoT Platform が提供する Android 用 Link SDK のデモパッケージ をダウンロードできます。

重要

デモをダウンロードすることにより、ソフトウェアライセンス契約 に同意したことになります。

OTA アップデートのプロセス

  1. デバイスはファームウェアのバージョン番号を送信します。

  2. デバイスは OTA アップデートに関するトピックをサブスクライブします。

  3. IoT Platform コンソールの [ OTA アップデート] ページで OTA アップデートタスクを構成する必要があります。ファームウェアをアップデートするデバイスを識別するために、複数の条件を指定できます。

  4. デバイスが OTA アップデートに関するトピックを正常にサブスクライブした場合、構成した OTA アップデートタスクでデバイスを見つけることができます。この場合、デバイスは次の情報を含む通知を受信します。

    • デバイスファームウェアをアップデートできるバージョン。

    • OTA アップデートパッケージのダウンロードアドレス、サイズ、およびメッセージダイジェストアルゴリズム ( MD5 ) 署名。

  5. デバイスは OTA アップデートパッケージをダウンロードし、ファームウェアのアップデートが開始されます。デバイスはアップデートの進捗状況を IoT Platform に送信します。

  6. アップデートが完了すると、デバイスは新しいファームウェアバージョンを自動的に送信します。

Link SDK の API

Android 用 Link SDK で OTA アップデートを実行するために使用される API については、「IOta」をご参照ください。

Link SDK を使用した OTA アップデートの構成

サンプルコードについては、デモパッケージの OTAActivity.java ファイルを参照してください。

  1. IoT Platform コンソールで OTA アップデートタスクを構成して、OTA インスタンスを取得します。

           mOta = LinkKit.getInstance().getOta()              
  2. OTA アップデートタスクを準備します。tryStartOta 関数を呼び出して、現在のバージョンを送信し、トピックをサブスクライブし、OTA アップデートがプッシュされた場合に IOta.STEP_RCVD_OTA コールバックから通知を受信します。

    説明
    • OTA アップデートタスクを使用して、複数のモジュールをアップデートできます。デフォルトでは、OTA アップデートタスクのモジュール名は default または空です。ビジネス要件に基づいてカスタムモジュールを追加できます。

    • tryStartOta 関数は、デフォルトモジュールのファームウェアバージョン番号を送信するために呼び出されます。OTA アップデートタスクの初期化時にカスタムモジュールのファームウェアバージョン番号を送信する場合は、カスタムモジュールごとに reportModuleVersion 関数を呼び出してファームウェアバージョン番号を送信できます。

    • IOta.STEP_RCVD_OTA コールバックを呼び出して、OTA アップデートタスクのモジュール名とファームウェアバージョン番号を表示できます。これにより、OTA アップデートタスクで複数のカスタムモジュールをアップデートする場合に、tryStartOta 関数を繰り返し呼び出す必要がなくなります。

    • IOta.STEP_RCVD_OTA コールバックに true の値を返すと、OTA アップデートタスクが受け入れられ、開始されます。コールバックに false の値を返すと、OTA アップデートタスクは拒否されます。デバイスが IoT Platform から切断されて再接続された場合、またはデバイスが OTA アップデートをリクエストした場合、OTA アップデートタスクは再起動されます。

    mOta.tryStartOta(mConfig, new OtaListener(){
        public boolean onOtaProgress(int step, IOta.OtaResult otaResult) {
    
            // アップデートステータスを示すエラーコード。
            int code = otaResult.getErrorCode();
            if (code != IOta.NO_ERROR) {
                AppLog.e(TAG, "onOtaProgress error:" + code);
                // ユーザーへのヒントを表示します。
                return false;
            }
    
            Object data = otaResult.getData();
            switch (step) {
                case IOta.STEP_REPORT_VERSION:
                    // デバイスがファームウェアバージョン番号を IoT Platform に送信したという通知を受信できます。
                    break;
                case IOta.STEP_SUBSCRIBE:
                    // デバイスが IoT Platform からの OTA アップデートに関するメッセージをサブスクライブしたという通知を受信できます。
                    break;
                case IOta.STEP_RCVD_OTA:
                    // ターゲットファームウェアバージョン番号、モジュール情報、および OTA アップデートタスクの MD5 署名を含む通知を受信できます。OTA アップデートを開始する場合は true を返します。OTA アップデートを拒否する場合は false を返します。デバイスが IoT Platform から切断されて再接続された場合、またはデバイスが OTA アップデートをリクエストした場合、OTA アップデートタスクは再起動されます。
                    AppLog.d(TAG, "STEP_RCVD_OTA");
                    otaInfo = (OtaInfo) otaResult.getData();
                    AppLog.d(TAG, "STEP_RCVD_OTA,module:"+ otaInfo.module);
                    AppLog.d(TAG, "STEP_RCVD_OTA,ext:"+ otaInfo.extData);
                    break;
                case IOta.STEP_DOWNLOAD:
                    // デバイスが OTA アップデートパッケージのダウンロードを開始した後、OTA アップデートパッケージのダウンロードの進捗状況をパーセントで取得できます。詳細については、SDK のデモパッケージを参照してください。
                    break;
            }
            return true;
        }
    });                  
  3. デバイスがプッシュされた OTA アップデートパッケージを受信し、true を返すと、デバイスは OTA アップデートパッケージを自動的にダウンロードします。ダウンロードの進捗状況は、IOta.STEP_DOWNLOAD コールバックによって返されます。

    説明
    • reportProgress 関数を呼び出して、デフォルトモジュールのアップデートの進捗状況を送信できます。

    • reportModuleProgress 関数を呼び出して、カスタムモジュールのアップデートの進捗状況を送信できます。

  4. OTA アップデートパッケージがダウンロードされると、デバイスメーカーはカスタム OTA ベースのアップデートメソッドを使用してデバイスをアップデートできます。

  5. OTA アップデートが完了した後、デバイスは新しいファームウェアバージョン番号を IoT Platform に送信する必要があります。IoT Platform が受信したバージョン番号がターゲットファームウェアバージョン番号と同じであれば、OTA アップデートは成功です。デバイスは、次のいずれかの方法を使用してファームウェアバージョン番号を送信できます。

    • デバイスは reportVersion 関数を呼び出して、現在のファームウェアバージョン番号を送信できます。OTA アップデートタスクがモジュールに適用される場合、デバイスは reportModuleVersion 関数を呼び出して現在のファームウェアバージョン番号を送信できます。

    • デバイスは tryStartOta 関数を呼び出して、OTA アップデートサービスを再構成し、ファームウェアバージョン番号を送信できます。tryStartOta 関数の最初のパラメーターには、デバイスの現在のファームウェアバージョン番号を指定する必要があります。関数が実行されると、SDK を使用してデバイスの現在のファームウェアバージョン番号が IoT Platform に送信されます。

      説明

      tryStartOta 関数を呼び出してモジュールのバージョン番号を送信することはできません。

  6. OTA アップデートサービスを終了し、OTA アップデートに関するメッセージのリスニングを停止する場合は、tryStopOta 関数を呼び出します。

    手順 2 を実行し、LinkKit.getInstance().deinit() 関数を呼び出して IoT Platform の使用を停止する場合は、tryStopOta 関数を呼び出して OTA アップデートサービスが終了していることを確認する必要があります。

重要

Android 用 Link SDK を使用すると、OTA アップデートパッケージの管理、プッシュ、およびダウンロードができます。OTA アップデートの進捗状況を定義する場合は、reportProgress() 関数を呼び出すことができます。SDK の reportVersion() 関数を呼び出して、ファームウェアバージョン番号を送信できます。

再開可能なアップロード

デフォルトでは、SDK で再開可能なアップロード機能は無効になっています。次のサンプルコードは、この機能を有効にする方法の例を示しています。

説明

停電後に OTA アップデートパッケージのダウンロードが再開された場合、次のシナリオが発生します。

  • 再開可能なアップロードはサポートされていません。

  • OTA アップデートパッケージのダウンロードが再開された場合、パッケージはファイルヘッダーからダウンロードされます。

// enableContinuousDownload パラメーターを true に設定すると、システムは再開可能なアップロード機能を有効にします。デフォルト値: false。
mOta.enableContinuousDownload(true);

// ダウンロード操作が予期せず終了した場合、システムは 60 秒間隔で 1,440 回の再試行を実行します。setRetryParams パラメーターを構成して、ビジネス要件に基づいて再試行回数と間隔を変更できます。
mOta.setRetryParams(24*60, 60);

OTA アップデートパッケージのダウンロード

デフォルトでは、Android 用 Link SDK は IoT Platform から OTA アップデートメッセージを受信します。デバイスの Android 用 Link SDK を構成して、IoT Platform コンソールで OTA アップデートに関する情報をクエリできます。

説明

デバイスは、OTA アップデートの構成が完了した後でのみ、OTA アップデートパッケージのダウンロードをリクエストできます。OTA アップデートタスクの構成方法の詳細については、このトピックの Link SDK を使用した OTA アップデートの構成 セクションを参照してください。

// デバイスは IoT Platform コンソールで OTA アップデートメッセージをクエリします。tryGetOtaFirmware パラメーターを default に設定すると、デフォルトモジュールの OTA アップデートメッセージがクエリされます。カスタムモジュール名を指定することもできます。
mOta.tryGetOtaFirmware("default");