IoT Platformは、無線 (OTA) 更新および管理機能を提供します。 このトピックでは、OTA更新中にメッセージを送信するために使用されるトピックとデータ形式について説明します。 メッセージは、デバイスがOTAモジュールバージョンを送信し、IoT Platformが更新パッケージをデバイスにプッシュし、デバイスが更新の進行状況を送信し、デバイスが最新の更新パッケージに関する情報を要求するときに送信されます。
OTA更新の実行方法の詳細については、「プロセス」をご参照ください。
OTAモジュールのバージョンをIoT Platformに送信する
次のトピックは、デバイスがIoT Platformにデータを送信するときに使用されます。
トピック: /ota/device/inform/${productKey}/${deviceName}
デバイスは、OTAモジュールのバージョンをこのトピックに送信します。
リクエストの例
{
"id": "123",
"params": {
"version": "1.0.1" 、
"モジュール": "MCU"
}
}
パラメーター | データ型 | 説明 |
id | String | メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 |
バージョン | String | OTAモジュールのバージョン。 |
モジュール | String | OTAモジュールの名前。 説明
|
OTAアップデートパッケージに関する情報をデバイスにプッシュする
次のトピックは、IoT Platformがデバイスにデータを送信するときに使用されます。
トピック: /ota/device/upgrade/${productKey}/${deviceName}
IoT Platformは、OTA更新パッケージに関する情報を上記のトピックに送信します。 デバイスは、情報を取得するためにトピックをサブスクライブすることができる。
- 単一のファイルを含むOTAアップデートパッケージに関するサンプル情報:
- HTTPS経由でOTAアップデートパッケージをダウンロードします:
{ "code": "1000", "data": { "size": 432945, "version": "2.0.0", "isDiff": 1、 "url": "https:// ***/nop *** .tar.gz?Expires=1502955804&OSSAccessKeyId=***&Signature=XfgJu7P6DW *** qAKU % 3D&security-token=*** Tz2IHtIf3 ***" 、 "md5": "93230c3bde425a9d ***" 、 "digestsign":"A4WOP *** SYHJ6DDDJD9 ***" 、 "sign": "93230c3bde425a9d ***" 、 "signMethod": "MD5" 、 "モジュール": "MCU" 、 "extData":{ "key1":"value1" 、 "key2":"value2" 、 "_package_udi":"{\" ota_notice\":\" カメラドライバーを更新して、ビデオがぼやけないようにします。 \"}" } }, "id": 1626969597470、 "メッセージ": "成功" }
- MQTT経由でOTAアップデートパッケージをダウンロードします:
{ "code":"1000" 、 "data":{ "サイズ":432945、 "version":"2.0.0" 、 "isDiff":1、 "signMethod":"MD5" 、 "dProtocol":"mqtt" 、 "streamId":1397345、 "streamFileId":1、 "md5":"93230c3bde425 ***" 、 "digestsign":"A4WOP *** SYHJ6DDDJD9 ***" 、 "sign":"93230c3bde425 ***" 、 "モジュール":"MCU" 、 "extData":{ "key1":"value1" 、 "key2":"value2" } }, "id":1507707025、 "メッセージ":"成功" }
- HTTPS経由でOTAアップデートパッケージをダウンロードします:
- 複数のファイルを含むOTA更新パッケージは、HTTP経由でのみダウンロードできます。 サンプル情報:
{ "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 ****" } ], "モジュール": "MCU" 、 "extData":{ "key1":"value1" 、 "key2":"value2" 、 "_package_udi":"{\" ota_notice\":\" カメラドライバーを更新して、ビデオがぼやけないようにします。 \"}" } }, "id": 1626969597470、 "メッセージ": "成功" }
パラメーター | データ型 | 説明 |
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 | 署名アルゴリズム。 有効な値:
|
md5 | String | 署名アルゴリズムがMD5の場合、IoT Platformはsignおよびmd5パラメーターの値を指定します。 このパラメーターは、OTA更新パッケージに単一のファイルが含まれている場合に使用できます。 |
モジュール | String | OTA更新パッケージが適用されるモジュールの名前。 説明 OTA更新パッケージがデフォルトモジュールに適用されている場合、IoT Platformはmoduleパラメーターを送信しません。 |
extData | オブジェクト | 更新バッチのタグと、IoT Platformでデバイスにプッシュするカスタム情報。 _package_udiはカスタム情報を指定します。 各タグの形式: |
ファイル | 配列 | 更新パッケージ内のファイルに関する情報。 このパラメーターは、OTA更新パッケージに複数のファイルが含まれている場合に使用できます。 単一のファイルに関する情報:
|
更新の進行状況をIoT Platformに送信する
次のトピックは、デバイスがIoT Platformにデータを送信するときに使用されます。
トピック: /ota/device/progress/${productKey}/${deviceName}
OTA更新中に、デバイスは前のトピックに対するパーセンテージとして更新の進行状況を送信します。
リクエストの例
{
"id": "123",
"params": {
"step": "-1",
"desc": "アップデートパッケージ情報が見つからないため、OTAアップデートに失敗しました。"
"モジュール": "MCU"
}
}
パラメーター | データ型 | 説明 |
id | String | メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 |
ステップ | String | OTAアップデートの進行状況。 有効な値:
OTA更新の進捗値と説明は、実際の要件に基づいてデバイスで設定できます。 デバイスでOTA更新機能を開発する方法の詳細については、「サンプルコード」をご参照ください。 |
desc | String | 現在のステップの説明。 説明の長さは128文字を超えることはできません。 例外が発生した場合、このパラメーターにはエラーメッセージが含まれます。 |
モジュール | String | OTA更新パッケージが適用されるモジュールの名前。 詳細については、「アップデートパッケージの追加」をご参照ください。 説明 デバイスがデフォルトモジュールの更新進行状況を送信する場合、moduleパラメーターはオプションです。 |
OTA更新パッケージに関する情報を要求する
次のトピックは、デバイスがIoT Platformにデータを送信するときに使用されます。
リクエストトピック: /sys/${productKey}/${deviceName}/thing/ota/firmware/get
レスポンストピック: /sys/${productKey}/${deviceName}/thing/ota/firmware/get_reply
リクエストの例
{
"id": "123",
"version": "1.0"、
"params": {
"モジュール": "MCU"
},
"method": "thing.ota.firmware.get"
}
パラメーター | データ型 | 説明 |
id | String | メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 |
バージョン | String | プロトコルのバージョン。 値を 1.0 に設定します。 |
params | オブジェクト | リクエストのパラメーター |
モジュール | String | OTA更新パッケージが適用されるモジュールの名前。 説明 このパラメーターを設定しない場合、デフォルトモジュールの更新パッケージ情報が要求されます。 |
メソッド | String | リクエスト方式。 値をthing.ota.firmware.getに設定します。 |
IoT Platformがデバイスからリクエストを受信すると、IoT Platformはレスポンスを送信します。
- 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\":\" カメラドライバーを更新して、ビデオがぼやけないようにします。 \"}" } } }
表5. パラメーター パラメーター データ型 説明 id String メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 応答のメッセージIDは、要求のメッセージIDと同じです。 /sys/${productKey}/${deviceName}/thing/ota/firmware/getトピックに送信されたデータで
id
パラメーターを表示できます。コード Integer ステータスコード。 値が200の場合、リクエストが成功したことを示します。 データ オブジェクト OTA更新パッケージに関する情報。 詳細については、「OTAアップデートパッケージに関する情報をデバイスにプッシュする」をご参照ください。 - 単一のファイルを含むOTAアップデートパッケージに関するサンプル情報:
- 更新パッケージ情報が存在しない場合、IoT Platformは応答を送信します。 サンプル応答:
{ "id": "123", "code": 200, "data": { } }
パッケージセグメントのダウンロード要求の開始
OTAアップデートパッケージのダウンロードプロトコルがMQTTである場合、デバイスは、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":{
"サイズ":256、
"オフセット":2
}
}
}
パラメーター | データ型 | 説明 |
id | String | メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 |
バージョン | String | プロトコルのバージョン。 値を 1.0 に設定します。 |
params | オブジェクト | リクエストのパラメーター |
fileToken | String | オプションです。 更新パッケージを識別するために使用される一意のトークン。 値の長さは最大16文字で、数字、文字、アンダースコア (_) 、およびピリオド (.) を使用できます。 使用法のノート:
|
fileInfo | オブジェクト | OTA更新パッケージに関する情報。 |
streamId | Long | MQTT経由でOTA更新パッケージをダウンロードするときに生成される一意のID。 |
fileId | Integer | OTA更新パッケージの一意のID。 |
fileBlock | オブジェクト | 各セグメントに関する情報。 |
サイズ | Integer | ダウンロードする各セグメントのサイズ。 単位:バイト 有効な値: 256〜131072。 最後のセグメントでは、値は1から131072の範囲です。 |
オフセット | Integer | セグメントごとにダウンロードされる更新パッケージの最後のセグメントの開始位置。 単位:バイト 有効な値: 0 ~ 16777216 |
レスポンス例:
- レスポンスのデータ構造を次の図に示します。
フィールド 説明 JSONバイト長 レスポンスのJSON文字列から変換されるバイト配列の長さを指定します。 バイト配列の長さは2バイトである必要があります。 第1のバイトは上位バイトであり、第2のバイトは下位バイトである。 たとえば、レスポンスのUTF-8-encoded JSON文字列はバイト配列に変換されます。 バイト配列の長さは10進数字87であり、これは16進数字57に対応する。 上位バイトは0x00であり、下位バイトは0x57である。
JSON文字列バイト レスポンス内のJSON文字列から変換されるバイト配列を指定します。 エンコード形式はUTF-8です。 詳細については、このトピックの「JSONレスポンスのサンプル」を参照してください。 ファイルブロックバイト セグメントのバイト配列を指定します。 バイトは、各バイトとパッケージヘッダとの間のオフセットに基づいて昇順にソートされる。 CRC16/IBM セグメントのチェック値を指定します。 チェック値の長さは2バイトである必要があります。 CRC-16-IBMのみサポートされています。 第1のバイトは上位バイトであり、第2のバイトは下位バイトである。 たとえば、セグメントのチェック値が0x0809の場合、上位バイトは0x08、下位バイトは0x09です。
- JSONレスポンスのサンプル:
{ "id": "123456" 、 "code":200, "msg":"ファイルサイズが制限を超えました16 MB" 、 "data": { "fileToken":"1bb8 ***" 、 "fileLength":1238848、 "bSize":1491、 "bOffset":2 } }
パラメーター | データ型 | 説明 |
id | String | メッセージの ID 。 有効な値: 0 ~ 4294967295 各メッセージIDは、デバイスに対して一意である必要があります。 応答のメッセージIDは、要求のメッセージIDと同じです。 |
コード | Integer | ステータスコード。 値200は、成功したリクエストを示します。 |
msg | String | 呼び出しが失敗した場合に返されるエラーメッセージ。 |
データ | オブジェクト | デバイスに返されたデータ。 |
fileToken | String | 更新パッケージの一意のトークン。 fileTokenパラメーターに値を指定した場合、このパラメーターが返されます。 |
fileLength | Integer | 更新パッケージの合計サイズ。 単位:バイト |
bSize | Integer | 現在のセグメントのサイズ。 単位:バイト |
bOffset | Integer | 更新パッケージ上の現在のセグメントの開始位置。 この値は、offset requestパラメーターの値と同じです。 単位:バイト |
参考資料
エラーコードとトラブルシューティング方法の詳細については、「デバイスのエラーコード」をご参照ください。