Pianifica ed esegui l'aggiornamento del firmware utilizzando una definizione di processo - Wireless AWS IoT

Pianifica ed esegui l'aggiornamento del firmware utilizzando una definizione di processo

È possibile utilizzare una definizione di processo per includere dettagli sull'aggiornamento del firmware e definire l'aggiornamento. AWS IoT Core per LoRaWAN fornisce un aggiornamento del firmware basato sulle informazioni dei seguenti tre campi associati al gateway.

  • Station

    La versione e il tempo di compilazione del software Basics Station. Per identificare queste informazioni, è inoltre possibile generarle utilizzando il software Basics Station che viene eseguito dal gateway (ad esempio, 2.0.5(rpi/std) 2021-03-09 03:45:09).

  • PackageVersion

    La versione del firmware, specificata dal file version.txt nel gateway. Anche se queste informazioni potrebbero non essere presenti nel gateway, è consigliabile utilizzarle come metodo per definire la versione del firmware (ad esempio, 1.0.0).

  • Modello

    La piattaforma o il modello utilizzato dal gateway (ad esempio, Linux).

Questa procedura richiede 20 minuti.

Scarica la versione corrente in esecuzione sul tuo gateway

Per determinare l'idoneità del gateway per un aggiornamento del firmware, il server CUPS controlla tutti e tre i campi Station, PackageVersion e Model, per una corrispondenza quando il gateway li presenta durante una richiesta CUPS. Quando si utilizza una definizione di attività, questi campi vengono memorizzati come parte del campo CurrentVersion.

Puoi utilizzare l'API AWS IoT Core per LoRaWAN o AWS CLI per ottenere il CurrentVersion per il gateway. I comandi seguenti mostrano come ottenere queste informazioni utilizzando la CLI.

  1. Se è già stato eseguito il provisioning di un gateway, è possibile ottenere informazioni sul gateway utilizzando il comando get-wireless-gateway.

    aws iotwireless get-wireless-gateway \ --identifier 5a11b0a85a11b0a8 \ --identifier-type GatewayEui

    L'esempio seguente mostra un output di esempio per questo comando.

    { "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. Utilizzando l'ID del gateway wireless riportato dal comando get-wireless-gateway, puoi utilizzare il comando get-wireless-gateway-firmware-informazioni per ottenere CurrentVersion.

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

    Di seguito viene mostrato un output di esempio per il comando, con le informazioni provenienti da tutti e tre i campi visualizzati dal CurrentVersion.

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

Creare una definizione di attività Wireless gateway

Quando si crea la definizione dell'attività, si consiglia di specificare la creazione automatica delle attività utilizzando il parametro AutoCreateTasks. AutoCreateTasks si applica a qualsiasi gateway che abbia una corrispondenza per tutti e tre i parametri menzionati in precedenza. Se questo parametro è disabilitato, i parametri devono essere assegnati manualmente al gateway.

È possibile creare la definizione del processo del gateway wireless utilizzando l'API AWS IoT Core per LoRaWAN o AWS CLI. I comandi seguenti mostrano come creare la definizione di processo utilizzando la CLI.

  1. Crea un file, input.json, che conterrà le informazioni da passare all’API CreateWirelessGatewayTaskDefinition. Nel file input.json, fornisci le informazioni riportate di seguito:

    • UpdateDataSource

      Fornisci il collegamento all'oggetto contenente il file di aggiornamento del firmware caricato nel bucket S3. (ad esempio, s3://iotwirelessfwupdate/fwstation).

    • UpdateDataRole

      Fornisci il collegamento al ruolo ARN del ruolo IAM creato, che fornisce le autorizzazioni per leggere il bucket S3. (ad esempio, arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole).

    • SigKeyCRC e UpdateSignature

      Queste informazioni potrebbero essere fornite dal produttore del gateway, ma se è stata eseguita la procedura descritta in Genera il file di aggiornamento del firmware e la firma, queste informazioni si trovano quando si genera la firma.

    • CurrentVersion

      Fornisci il CurrentVersion che è stato ottenuto in precedenza eseguendo il comando get-wireless-gateway-firmware-information .

      cat input.json

      Di seguito viene mostrato il contenuto del file 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. Passa il file input.json nel comando create-wireless-gateway-task-definition per creare la definizione dell'attività.

    aws iotwireless create-wireless-gateway-task-definition \ --cli-input-json file://input.json

    Di seguito viene mostrato l'output del comando.

    { "Id": "4ac46ff4-efc5-44fd-9def-e8517077bb12", "Arn": "arn:aws:iotwireless:us-east-1:231894231068:WirelessGatewayTaskDefinition/4ac46ff4-efc5-44fd-9def-e8517077bb12" }

Esegui il processo di aggiornamento del firmware e monitora l'avanzamento

Il gateway è pronto per ricevere l'aggiornamento del firmware e, una volta acceso, si connette al server CUPS. Quando il server CUPS trova una corrispondenza nella versione del gateway, pianifica un aggiornamento del firmware.

Un processo è una definizione di processo in corso. Una volta specificata la creazione automatica delle attività impostando AutoCreateTasks a True, l'attività di aggiornamento del firmware viene avviata non appena viene trovato un gateway corrispondente.

È possibile tenere traccia dello stato di avanzamento dell'attività utilizzando l’API GetWirelessGatewayTask. Quando si esegue il comando get-wireless-gateway-task per la prima volta, mostrerà lo stato dell'attività come IN_PROGRESS.

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

Di seguito viene mostrato l'output del comando.

{ "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" }

Quando si esegue il comando la volta successiva, se l'aggiornamento del firmware ha effetto, mostrerà i campi aggiornati Package, Version e Model e lo stato dell'attività cambia in COMPLETED.

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

Di seguito viene mostrato l'output del comando.

{ "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" }

In questo esempio, abbiamo mostrato l'aggiornamento del firmware utilizzando il gateway RAKWireless basato su Raspberry Pi. Lo script di aggiornamento del firmware interrompe la BasicStation in esecuzione per archiviare l'aggiornamento Package, Version e i campi Model in modo che BasicStation debba essere riavviato.

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

Se l'aggiornamento del firmware non riesce, viene visualizzato lo stato FIRST_RETRY dal server CUPS e il gateway invia la stessa richiesta. Se il server CUPS non è in grado di connettersi al gateway dopo un SECOND_RETRY, mostrerà uno stato di FAILED.

Dopo l'attività precedente è stata COMPLETED o FAILED, elimina la vecchia attività utilizzando il comando delete-wireless-gateway-task prima di avviarne uno nuovo.

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