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.
Per completare questa procedura:
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.
-
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" }
-
Utilizzando l'ID del gateway wireless riportato dal comando
get-wireless-gateway
, puoi utilizzare il comando get-wireless-gateway-firmware-informazioni per ottenereCurrentVersion
.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.
-
Crea un file,
input.json
, che conterrà le informazioni da passare all’APICreateWirelessGatewayTaskDefinition
. Nel fileinput.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 comandoget-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" } } } }
-
-
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