このトピックでは、IOta インターフェイスを使用してデバイスで無線 (OTA) を実行する方法について説明します。
Android 用 Link SDK のダウンロードリンク
IoT Platform が提供する Android 用 Link SDK のデモパッケージ をダウンロードできます。
デモをダウンロードすることにより、ソフトウェアライセンス契約 に同意したことになります。
OTA アップデートのプロセス
デバイスはファームウェアのバージョン番号を送信します。
デバイスは OTA アップデートに関するトピックをサブスクライブします。
IoT Platform コンソールの [ OTA アップデート] ページで OTA アップデートタスクを構成する必要があります。ファームウェアをアップデートするデバイスを識別するために、複数の条件を指定できます。
デバイスが OTA アップデートに関するトピックを正常にサブスクライブした場合、構成した OTA アップデートタスクでデバイスを見つけることができます。この場合、デバイスは次の情報を含む通知を受信します。
デバイスファームウェアをアップデートできるバージョン。
OTA アップデートパッケージのダウンロードアドレス、サイズ、およびメッセージダイジェストアルゴリズム ( MD5 ) 署名。
デバイスは OTA アップデートパッケージをダウンロードし、ファームウェアのアップデートが開始されます。デバイスはアップデートの進捗状況を IoT Platform に送信します。
アップデートが完了すると、デバイスは新しいファームウェアバージョンを自動的に送信します。
Link SDK の API
Android 用 Link SDK で OTA アップデートを実行するために使用される API については、「IOta」をご参照ください。
Link SDK を使用した OTA アップデートの構成
サンプルコードについては、デモパッケージの OTAActivity.java ファイルを参照してください。
IoT Platform コンソールで OTA アップデートタスクを構成して、OTA インスタンスを取得します。
mOta = LinkKit.getInstance().getOta()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; } });デバイスがプッシュされた OTA アップデートパッケージを受信し、true を返すと、デバイスは OTA アップデートパッケージを自動的にダウンロードします。ダウンロードの進捗状況は、
IOta.STEP_DOWNLOADコールバックによって返されます。説明reportProgress関数を呼び出して、デフォルトモジュールのアップデートの進捗状況を送信できます。reportModuleProgress関数を呼び出して、カスタムモジュールのアップデートの進捗状況を送信できます。
OTA アップデートパッケージがダウンロードされると、デバイスメーカーはカスタム OTA ベースのアップデートメソッドを使用してデバイスをアップデートできます。
OTA アップデートが完了した後、デバイスは新しいファームウェアバージョン番号を IoT Platform に送信する必要があります。IoT Platform が受信したバージョン番号がターゲットファームウェアバージョン番号と同じであれば、OTA アップデートは成功です。デバイスは、次のいずれかの方法を使用してファームウェアバージョン番号を送信できます。
デバイスは
reportVersion関数を呼び出して、現在のファームウェアバージョン番号を送信できます。OTA アップデートタスクがモジュールに適用される場合、デバイスはreportModuleVersion関数を呼び出して現在のファームウェアバージョン番号を送信できます。デバイスは
tryStartOta関数を呼び出して、OTA アップデートサービスを再構成し、ファームウェアバージョン番号を送信できます。tryStartOta 関数の最初のパラメーターには、デバイスの現在のファームウェアバージョン番号を指定する必要があります。関数が実行されると、SDK を使用してデバイスの現在のファームウェアバージョン番号が IoT Platform に送信されます。説明tryStartOta関数を呼び出してモジュールのバージョン番号を送信することはできません。
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");