タスク定義を使用してファームウェア更新をスケジュールし、実行する
タスク定義を使用して、ファームウェア更新に関する詳細を含めたり、更新を定義できます。AWS IoT Core for LoRaWAN では、ゲートウェイに関連付けられた次の 3 つのフィールドからの情報に基づいてファームウェアの更新が提供されます。
-
ステーション
Basics Station ソフトウェアのバージョンとビルド時間。この情報を特定するために、ゲートウェイによって実行されている Basics Station ソフトウェアを使用して生成することもできます (例:
2.0.5(rpi/std) 2021-03-09 03:45:09
)。 -
PackageVersion (パッケージバージョン)
ゲートウェイの
version.txt
ファイルによって指定されたファームウェアのバージョン。この情報はゲートウェイに存在しない可能性がありますが、ファームウェアのバージョンを定義する方法として推奨しています (例:1.0.0
)。 -
モデル
ゲートウェイで使用されているプラットフォームまたはモデル (例: Linux)。
この手順の完了には 20 分かかります。
この手順を完了するには、以下を行います。
ゲートウェイで現在実行されているバージョンを取得する
ゲートウェイがファームウェア更新の対象であるかどうかを判断するために、CUPS サーバーは、CUPS 要求時にゲートウェイが Station
、PackageVersion
、Model
のフィールドを提示したときに、これら 3 つのフィールドすべてについて、一致を確認します。タスク定義を使用する場合、これらのフィールドは CurrentVersion
フィールドの一部として格納されています。
AWS IoT Core for LoRaWAN API または AWS CLI を使用して、ゲートウェイの CurrentVersion
を取得できます。次のコマンドは、CLI を使用してこの情報を取得する方法を示しています。
-
ゲートウェイを既にプロビジョニングしている場合は、get-wireless-gateway コマンドを使用して、ゲートウェイに関する情報を取得できます。
aws iotwireless get-wireless-gateway \ --identifier 5a11b0a85a11b0a8 \ --identifier-type GatewayEui
以下は、このコマンドの出力例です。
{ "Name": "Raspberry pi", "Id": "1352172b-0602-4b40-896f-54da9ed16b57", "Description": "Raspberry pi", "LoRaWAN": { "GatewayEui": "5a11b0a85a11b0a8", "RfRegion": "US915" }, "Arn": "arn:aws:iotwireless:us-east-1:231894231068:WirelessGateway/1352172b-0602-4b40-896f-54da9ed16b57" }
-
get-wireless-gateway
コマンドによって報告されたワイヤレスゲートウェイ ID を使用して、get-wireless-gateway-firmware-information コマンドによってCurrentVersion
を取得できます。aws iotwireless get-wireless-gateway-firmware-information \ --id "3039b406-5cc9-4307-925b-9948c63da25b"
以下は、このコマンドの出力例で、3 つのフィールドすべての情報が
CurrentVersion
によって表示されています。{ "LoRaWAN": { "CurrentVersion": { "PackageVersion": "1.0.0", "Model": "rpi", "Station": "2.0.5(rpi/std) 2021-03-09 03:45:09" } } }
ワイヤレスゲートウェイタスク定義を作成する
タスク定義を作成するときは、AutoCreateTasks パラメータを使用してタスクの自動作成を指定することをお勧めします。AutoCreateTasks
は、前述の 3 つのパラメータすべてに一致するゲートウェイに適用されます。このパラメータが無効になっている場合は、パラメータを手動でゲートウェイに割り当てる必要があります。
AWS IoT Core for LoRaWAN API または AWS CLI を使用してワイヤレスゲートウェイのタスク定義を作成できます。以下のコマンドは、CLI を使用してタスク定義を作成する方法を示します。
-
input.json
ファイルを作成します。このファイルには、CreateWirelessGatewayTaskDefinition
API に渡す情報が含まれます。input.json
ファイルで、前に取得した次の情報を指定します。-
UpdateDataSource
S3 バケットにアップロードしたファームウェア更新ファイルを含むオブジェクトへのリンクを指定します (例えば、
s3://iotwirelessfwupdate/fwstation
)。 -
UpdateDataRole
S3 バケットを読み取る許可を提供する、作成した IAM ロールのロール ARN へのリンクを指定します (例えば、
arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole
)。 -
SigKeyCRC と UpdateSignature
この情報はゲートウェイの製造元から提供されている可能性がありますが、「ファームウェア更新ファイルと署名を生成する」で説明されている手順に従った場合は、署名の生成時にこの情報を見つけることができます。
-
CurrentVersion
先ほど
get-wireless-gateway-firmware-information
コマンドを実行して取得したCurrentVersion
出力を指定します。cat input.json
以下は、
input.json
ファイルの内容を示しています。{ "AutoCreateTasks": true, "Name": "FirmwareUpdate", "Update": { "UpdateDataSource" : "s3://iotwirelessfwupdate/fwstation", "UpdateDataRole" : "arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole", "LoRaWAN" : { "SigKeyCrc": 3434210794, "UpdateSignature": "MEQCIDPY/p2ssgXIPNCOgZr+NzeTLpX+WfBo5tYWbh5pQWN3AiBROen+XlIdMScvAsfVfU/ZScJCalkVNZh4esyS8mNIgA==", "CurrentVersion" : { "PackageVersion": "1.0.0", "Model": "rpi", "Station": "2.0.5(rpi/std) 2021-03-09 03:45:09" } } } }
-
-
input.json
ファイルを create-wireless-gateway-task-definition コマンドに渡して、タスク定義を作成します。aws iotwireless create-wireless-gateway-task-definition \ --cli-input-json file://input.json
以下は、このコマンドの出力を示しています。
{ "Id": "4ac46ff4-efc5-44fd-9def-e8517077bb12", "Arn": "arn:aws:iotwireless:us-east-1:231894231068:WirelessGatewayTaskDefinition/4ac46ff4-efc5-44fd-9def-e8517077bb12" }
ファームウェア更新タスクを実行し、進捗状況を追跡する
ゲートウェイはファームウェア更新を受信する準備ができており、電源が入ると CUPS サーバーに接続します。CUPS サーバーは、ゲートウェイのバージョンで一致するものを検出すると、ファームウェア更新をスケジュールします。
タスクとは、処理中のタスク定義です。AutoCreateTasks
を True
に設定して自動タスク作成を指定したので、一致するゲートウェイが見つかるとすぐにファームウェア更新タスクが開始されます。
GetWirelessGatewayTask
API を使用してタスクの進行状況を追跡できます。get-wireless-gateway-task コマンドを初めて実行すると、タスクのステータスが IN_PROGRESS
として表示されます。
aws iotwireless get-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57
以下は、このコマンドの出力を示しています。
{ "WirelessGatewayId": "1352172b-0602-4b40-896f-54da9ed16b57", "WirelessGatewayTaskDefinitionId": "ec11f9e7-b037-4fcc-aa60-a43b839f5de3", "LastUplinkReceivedAt": "2021-03-12T09:56:12.047Z", "TaskCreatedAt": "2021-03-12T09:56:12.047Z", "Status": "IN_PROGRESS" }
次回にこのコマンドを実行した場合、ファームウェアの更新が有効になると、更新されたフィールド Package
、Version
、Model
が表示され、タスクのステータスが COMPLETED
に変わります。
aws iotwireless get-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57
以下は、このコマンドの出力を示しています。
{ "WirelessGatewayId": "1352172b-0602-4b40-896f-54da9ed16b57", "WirelessGatewayTaskDefinitionId": "ec11f9e7-b037-4fcc-aa60-a43b839f5de3", "LastUplinkReceivedAt": "2021-03-12T09:56:12.047Z", "TaskCreatedAt": "2021-03-12T09:56:12.047Z", "Status": "COMPLETED" }
この例では、Raspberry Pi ベースの RAKWireless ゲートウェイを使用したファームウェア更新を紹介しました。更新された Package
、Version
、および Model
フィールドを保存するために、ファームウェア更新スクリプトによって、実行中の BasicStation が停止します。そのため、BasicStation を再起動する必要があります。
2021-03-12 09:56:13.108 [CUP:INFO] CUPS provided update.bin 2021-03-12 09:56:13.108 [CUP:INFO] CUPS provided signature len=70 keycrc=37316C36 2021-03-12 09:56:13.148 [CUP:INFO] ECDSA key#0 -> VERIFIED 2021-03-12 09:56:13.148 [CUP:INFO] Running update.bin as background process 2021-03-12 09:56:13.149 [SYS:VERB] /tmp/update.bin: Forked, waiting... 2021-03-12 09:56:13.151 [SYS:INFO] Process /tmp/update.bin (pid=6873) completed 2021-03-12 09:56:13.152 [CUP:INFO] Interaction with CUPS done - next regular check in 10s
ファームウェアのアップデートが失敗すると、CUPS サーバーからの FIRST_RETRY
のステータスが表示され、ゲートウェイは同じ要求を送信します。SECOND_RETRY
の後に CUPS サーバーがゲートウェイに接続できない場合、FAILED
のステータスが表示されます。
前のタスクが COMPLETED
または FAILED
になったら、新しいタスクを開始する前に、delete-wireless-gateway-task コマンドを実行して古いタスクを削除します。
aws iotwireless delete-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57