작업 정의를 사용하여 펌웨어 업데이트 예약 및 실행 - AWS IoT Wireless

작업 정의를 사용하여 펌웨어 업데이트 예약 및 실행

작업 정의를 사용하여 펌웨어 업데이트에 대한 세부 정보를 포함하고 업데이트를 정의할 수 있습니다. AWS IoT Core for LoRaWAN은 게이트웨이와 관련된 다음 세 필드의 정보를 기반으로 펌웨어 업데이트를 제공합니다.

  • 스테이션

    Basic Station 소프트웨어의 버전 및 빌드 시간입니다. 이 정보를 식별하기 위해, 게이트웨이에 의해 실행되는 Basic 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 정보를 제시할 때 해당 정보가 일치하는지 확인합니다. 작업 정의를 사용할 때 이러한 필드는 CurrentVersion 필드의 일부로 저장됩니다.

AWS IoT Core for LoRaWAN API 또는 AWS CLI를 사용하여 게이트웨이를 위한 CurrentVersion을 얻습니다. 다음 명령은 CLI를 사용하여 이 정보를 가져오는 방법을 보여줍니다.

  1. 게이트웨이를 이미 프로비저닝한 경우 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" }
  2. get-wireless-gateway 명령에 의해 보고된 무선 게이트웨이 ID를 사용하여 get-wireless-gateway-firmware-information 명령을 통해 CurrentVersion를 가져올 수 있습니다.

    aws iotwireless get-wireless-gateway-firmware-information \ --id "3039b406-5cc9-4307-925b-9948c63da25b"

    다음은 명령에 대한 샘플 출력이며, CurrentVersion에 의해 표시되는 세 필드 정보를 보여줍니다.

    { "LoRaWAN": { "CurrentVersion": { "PackageVersion": "1.0.0", "Model": "rpi", "Station": "2.0.5(rpi/std) 2021-03-09 03:45:09" } } }

무선 게이트웨이 작업 정의 생성

작업 정의를 만들 때 AutoCreateTasks 파라미터를 사용하여 작업의 자동 생성을 지정하는 것이 좋습니다. AutoCreateTasks는 앞에서 언급한 세 파라미터 모두와 일치하는 게이트웨이에 적용됩니다. 이 파라미터를 비활성화하면 파라미터를 게이트웨이에 수동으로 할당해야 합니다.

AWS IoT Core for LoRaWAN API 또는 AWS CLI를 사용하여 무선 게이트웨이 작업 정의를 생성할 수 있습니다. 다음 명령은 CLI를 사용하여 작업 정의를 만드는 방법을 보여줍니다.

  1. CreateWirelessGatewayTaskDefinition API에 전달할 정보가 포함될 input.json 파일을 생성합니다. 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" } } } }
  2. 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, VersionModel이 표시되고 작업 상태가 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 게이트웨이를 사용하여 펌웨어 업데이트를 보여 주었습니다. 펌웨어 업데이트 스크립트는 실행 중인 BasicStation을 중지하여 업데이트된 Package, VersionModel 필드를 저장하므로 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가 표시되고 게이트웨이가 동일한 요청을 보냅니다. CUPS 서버가 SECOND_RETRY 이후에 게이트웨이에 연결할 수 없으면 FAILED 상태를 표시합니다.

이전 작업이 COMPLETED 또는 FAILED였으면 새 작업을 시작하기 전에 delete-wireless-gateway-task 명령을 사용하여 이전 작업을 삭제합니다.

aws iotwireless delete-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57