IoT Platformは、無線 (OTA) 機能をサポートしています。 OTA機能を使用してデバイスを更新できます。 このトピックでは、MQTT (Message Queuing Telemetry Transport) を使用してデバイスをIoT Platformに接続する場合に、OTA機能を使用してデバイスを更新する方法について説明します。 このトピックでは、OTAアップデートでデータ転送中に使用されるトピックとデータ形式についても説明します。
処理中
次の図は、MQTT上でOTA更新を実行するプロセスを示しています。
注
- 差分更新を実行するには、デバイスはOTAモジュールのバージョン番号を送信する必要があります。 完全な更新を実行するために、デバイスはOTAモジュールのバージョン番号を送信する必要はありません。 バージョン番号が送信されない場合、バッチ更新を構成するときにソースバージョンを指定することはできません。 詳細については、「バッチ更新の開始」をご参照ください。
デバイスは、最初の更新前の起動中に1回だけバージョン番号を送信する必要があります。 アップデートがデバイスにインストールされた後、デバイスはすぐに現在のバージョン番号を送信する必要があります。
- IoT Platformコンソールで複数のデバイスの更新を開始すると、各デバイスは更新待ち状態になります。
IoT Platformがデバイスによって送信された更新の進行状況を受信すると、デバイスのステータスは [更新中] に変わります。
説明 デバイスがIoT Platformから更新通知を受信すると、デバイスは更新パッケージをダウンロードして、すぐに、またはオフピークの営業時間中に更新を実行できます。 - IoT Platformは、デバイスによって送信されたバージョン番号に基づいて、OTAの更新が成功したかどうかを確認します。
- オフラインデバイスは、IoT Platformから更新通知を受信できません。
デバイスがオンラインになった後、IoT Platformはデバイスを更新する必要があるかどうかを確認します。 更新が必要な場合、IoT Platformはデバイスに更新通知を送信します。 そうでない場合、通知は送信されない。
メッセージ形式
言語固有のSDKを使用してデバイスにOTAアップデートを実装する方法の詳細については、 Link SDKドキュメント。
以下のステップは、OTA更新を実行するプロセスを説明する。
- オプションです。 デバイスをIoT PlatformのOTAサービスに接続し、バージョン番号を送信します。
バージョン番号は、MQTTを介して次のトピック
/ota/device/inform/${productKey}/${deviceName}
にプッシュされます。 サンプルメッセージ:{ "id": "123", "params": { "version": "1.0.1" 、 "モジュール": "MCU" } }
表1. パラメーター パラメーター データ型 説明 id String メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 バージョン String OTAモジュールのバージョン。 モジュール String OTAモジュールの名前。 説明- デバイスがデフォルトモジュールのバージョンを送信する場合、moduleパラメーターはオプションです。
- デフォルトモジュールのバージョンは、デバイスファームウェアのバージョンを示す。
- IoT Platformコンソールで、更新パッケージを追加し、更新パッケージを確認してから、バッチ更新を開始します。
詳細については、「概要」をご参照ください。
- 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" } } }
- HTTPS経由でOTAアップデートパッケージをダウンロードします:
- 複数のファイルを含む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. パラメーター パラメーター データ型 説明 id Long メッセージの ID 。 各メッセージIDは、デバイスに対して一意である。 メッセージ String 応答メッセージ。 コード String HTTP ステータスコード バージョン String OTAアップデートパッケージのバージョン。 サイズ Long 更新パッケージのサイズ。 単位:バイト このパラメーターは、OTA更新パッケージに単一のファイルが含まれている場合に使用できます。
url String OTA更新パッケージのObject Storage Service (OSS) URL。 このパラメーターは、OTAアップデートパッケージに単一のファイルが含まれ、ダウンロードプロトコルがHTTPSの場合に使用できます。
dProtocol String OTA更新パッケージのダウンロードに使用されるプロトコル。 このパラメーターは、ダウンロードプロトコルがMQTTの場合に使用できます。
streamId Long MQTT経由でOTA更新パッケージをダウンロードするときに生成される一意のID。 このパラメーターは、ダウンロードプロトコルがMQTTの場合に使用できます。
streamFileId Integer 単一のファイルを含むOTA更新パッケージの一意のID。 このパラメーターは、ダウンロードプロトコルがMQTTの場合に使用できます。
isDiff Long このパラメーターは、更新パッケージがデルタ更新パッケージの場合に使用できます。 値を1に設定します。 この値は、更新パッケージに新しいバージョンと以前のバージョンの違いのみが含まれることを示します。 この場合、デルタ更新が実行される。
digestsign String セキュアな更新後のOTA更新パッケージの署名が実行される。 このパラメータは、安全な更新機能がOTA更新パッケージで有効になっている場合に使用できます。 安全な更新機能を有効にする方法の詳細については、「更新パッケージの追加」をご参照ください。 サイン String OTA更新パッケージの署名。 このパラメーターは、OTA更新パッケージに単一のファイルが含まれている場合に使用できます。
signMethod String 署名アルゴリズム。 有効な値: SHA256
MD5
md5 String 署名アルゴリズムがMD5の場合、IoT Platformはsignおよびmd5パラメーターの値を指定します。 このパラメーターは、OTA更新パッケージに単一のファイルが含まれている場合に使用できます。
モジュール String OTA更新パッケージが適用されるモジュールの名前。 説明 OTA更新パッケージがデフォルトモジュールに適用されている場合、IoT Platformはmoduleパラメーターを送信しません。extData オブジェクト 更新バッチのタグと、IoT Platformでデバイスにプッシュするカスタム情報。 _package_udiはカスタム情報を指定します。
各タグの形式:
"key":"value"
ファイル 配列 更新パッケージ内のファイルに関する情報。 このパラメーターは、OTA更新パッケージに複数のファイルが含まれている場合に使用できます。 単一のファイルに関する情報:
- fileSize: ファイルのサイズ。
- fileName: ファイルの名前。
- fileUrl、fileMd5、およびfileSign: これらのパラメーターは、このテーブルのurl、md5、およびsignパラメーターに対応します。
- 単一のファイルを含むOTAアップデートパッケージに関するサンプル情報:
- オプションです。 デバイス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. パラメーター パラメーター データ型 説明 id String メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 バージョン String プロトコルのバージョン。 値を 1.0 に設定します。 params オブジェクト リクエストのパラメーター モジュール String OTA更新パッケージが適用されるモジュールの名前。 説明 このパラメーターを設定しない場合、デフォルトモジュールの更新パッケージ情報が要求されます。メソッド 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" } } }
- HTTPS経由でOTAアップデートパッケージをダウンロードします:
- 複数のファイルを含む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. 次の表にパラメーターを示します。 パラメーター データ型 説明 id String メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 応答のメッセージIDは、要求のメッセージIDと同じです。 /sys/${productKey}/${deviceName}/thing/ota/firmware/getトピックに送信されたデータで
id
パラメーターを表示できます。コード Integer ステータスコード。 値が200の場合、リクエストが成功したことを示します。 データ String 更新パッケージに関する情報。 詳細については、「OTAアップデートパッケージ情報をデバイスにプッシュする」をご参照ください。 - 単一のファイルを含むOTAアップデートパッケージに関するサンプル情報:
- 更新パッケージ情報が存在しない場合、IoT Platformは応答を送信します。 サンプル応答:
{ "id": "123", "code": 200, "data": { } }
- IoT Platformは、最新の更新パッケージに関する情報をデバイスに送信します。 レスポンス例:
- デバイスSDKが更新パッケージのURLを受信した後、デバイスはSDK内のAPI操作を呼び出して更新パッケージをダウンロードします。 詳細については、「概要」をご参照ください。 説明 デバイスは、更新パッケージを自動的にダウンロードできません。 更新パッケージをダウンロードするには、SDKで必要な操作を呼び出す必要があります。 デバイスが24時間以内にURLから更新パッケージをダウンロードできない場合、URLは期限切れになります。
更新パッケージのダウンロード時に生成されるログの詳細については、次のトピックを参照してください。
- 更新中、デバイスは更新の進行状況を
/ota/device/progress/${productKey}/${deviceName}
のトピックに送信します。説明 進捗レポートの頻度は、最大3秒に1回に設定することを推奨します。 実際の頻度が制限を超えると、IoT PlatformコンソールのOTA更新パッケージの [バッチ詳細] ページですべての進行状況情報を表示できない場合があります。サンプルメッセージ:
{ "id": "123", "params": { "step": "-1", "desc": "アップデートパッケージ情報が見つからないため、OTAアップデートに失敗しました。" "モジュール": "MCU" } }
表3. パラメーター パラメーター データ型 説明 id String メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 ステップ String OTAアップデートの進行状況。
有効な値:- 1から100までの整数: 更新の進行状況を表すパーセンテージを示します。
-1
: 更新が失敗したことを示します。-2
: ダウンロードが失敗したことを示します。-3
: 検証が失敗したことを示します。-4
: ファームウェアのフラッシュが失敗したことを示します。
OTA更新の進捗値と説明は、実際の要件に基づいてデバイスで設定できます。 デバイスでOTA更新機能を開発する方法の詳細については、「サンプルコード」をご参照ください。
desc String 現在のステップの説明。 説明の長さは128文字を超えることはできません。 例外が発生した場合、このパラメーターにはエラーメッセージが含まれます。 モジュール String OTA更新パッケージが適用されるモジュールの名前。 詳細については、「アップデートパッケージの追加」をご参照ください。 説明 デバイスがデフォルトモジュールの更新進行状況を送信する場合、moduleパラメーターはオプションです。 - デバイスの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が無効または変更されている場合、このエラーが発生します。
- アクセスは拒否されました。 URLの有効期限が切れたため、エラーが発生しました。 各URLは24時間有効です。