Agende e execute a atualização do firmware usando uma definição de tarefa
Você pode usar uma definição de tarefa para incluir detalhes sobre a atualização do firmware e definir a atualização. AWS IoT Core for LoRaWAN oferece uma atualização de firmware com base nas informações dos três campos a seguir associados ao gateway.
-
Estação
A versão e o tempo de compilação do software Basics Station. Para identificar essas informações, você também pode gerá-las usando o software Basics Station que está sendo executado pelo gateway (por exemplo,
2.0.5(rpi/std) 2021-03-09 03:45:09
). -
PackageVersion
A versão do firmware, especificada pelo arquivo
version.txt
no gateway. Embora essas informações possam não estar presentes no gateway, recomendamos que elas sejam uma forma de definir a versão do firmware (por exemplo,1.0.0
). -
Modelo
A plataforma ou o modelo que está sendo usado pelo gateway (por exemplo, Linux).
Esse procedimento leva 20 minutos para ser concluído.
Para concluir este procedimento:
Obtenha a versão atual em execução no gateway
Para determinar a elegibilidade do gateway para uma atualização de firmware, o servidor CUPS verifica todos os três campos, Station
, PackageVersion
e Model
, em busca de uma correspondência quando o gateway os apresenta durante uma solicitação do CUPS. Quando você usa uma definição de tarefa, esses campos são armazenados como parte do campo CurrentVersion
.
Você pode usar a API AWS IoT Core for LoRaWAN ou a AWS CLI para obter CurrentVersion
para o gateway. Os comandos a seguir mostram como obter essas informações usando a CLI.
-
Se você já tiver provisionado um gateway, poderá obter informações sobre ele usando o comando get-wireless-gateway.
aws iotwireless get-wireless-gateway \ --identifier 5a11b0a85a11b0a8 \ --identifier-type GatewayEui
Confira a seguir um exemplo de saída para o 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" }
-
Usando o ID do gateway sem fio informado pelo comando
get-wireless-gateway
, você pode usar o comando get-wireless-gateway-firmware-information para obterCurrentVersion
.aws iotwireless get-wireless-gateway-firmware-information \ --id "3039b406-5cc9-4307-925b-9948c63da25b"
A seguir, confira um exemplo de saída para o comando, com informações de todos os três campos exibidos pela
CurrentVersion
.{ "LoRaWAN": { "CurrentVersion": { "PackageVersion": "1.0.0", "Model": "rpi", "Station": "2.0.5(rpi/std) 2021-03-09 03:45:09" } } }
Criar uma definição de tarefa de gateway sem fio
Ao criar a definição da tarefa, é recomendável especificar a criação automática de tarefas utilizando o parâmetro AutoCreateTasks. O AutoCreateTasks
aplica-se a qualquer gateway que corresponda aos três parâmetros mencionados anteriormente. Se esse parâmetro estiver desativado, os parâmetros deverão ser atribuídos manualmente ao gateway.
Você pode criar a definição da tarefa do gateway sem fio usando a API AWS IoT Core for LoRaWAN ou a AWS CLI. Os comandos a seguir mostram como criar a definição da tarefa usando a CLI.
-
Crie um arquivo,
input.json
, que conterá as informações a serem passadas para a APICreateWirelessGatewayTaskDefinition
. No arquivoinput.json
, dê as seguintes informações que você obteve anteriormente:-
UpdateDataSource
Forneça o link para seu objeto contendo o arquivo de atualização do firmware que você carregou no bucket do S3 (por exemplo,
s3://iotwirelessfwupdate/fwstation
). -
UpdateDataRole
Forneça o link para o ARN do perfil do IAM criado, que dá permissões para ler o bucket do S3 (por exemplo,
arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole
). -
SigKeyCRC e UpdateSignature
Essas informações podem ser fornecidas pelo fabricante do gateway, mas se seguiu o procedimento descrito em Gere o arquivo e a assinatura de atualização de firmware, você as encontrará ao gerar a assinatura.
-
CurrentVersion
Apresente a saída
CurrentVersion
que você obteve anteriormente executando o comandoget-wireless-gateway-firmware-information
.cat input.json
O exemplo a seguir mostra o conteúdo do arquivo
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" } } } }
-
-
Passe o arquivo
input.json
para o comando create-wireless-gateway-task-definition para criar a definição da tarefa.aws iotwireless create-wireless-gateway-task-definition \ --cli-input-json file://input.json
Confira a seguir a saída do comando.
{ "Id": "4ac46ff4-efc5-44fd-9def-e8517077bb12", "Arn": "arn:aws:iotwireless:us-east-1:231894231068:WirelessGatewayTaskDefinition/4ac46ff4-efc5-44fd-9def-e8517077bb12" }
Execute a tarefa de atualização do firmware e acompanhe o progresso
O gateway está pronto para receber a atualização do firmware e, uma vez ligado, ele se conecta ao servidor CUPS. Quando o servidor CUPS encontra uma correspondência na versão do gateway, ele agenda uma atualização de firmware.
Uma tarefa é uma definição de tarefa em andamento. Como você especificou a criação automática de tarefas definindo AutoCreateTasks
como True
, a tarefa de atualização do firmware começará assim que um gateway correspondente for encontrado.
É possível acompanhar o andamento da tarefa usando a API GetWirelessGatewayTask
. Quando você executa o comando get-wireless-gateway-task pela primeira vez, ele mostra o status da tarefa como IN_PROGRESS
.
aws iotwireless get-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57
Confira a seguir a saída do 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 você executar o comando da próxima vez, se a atualização do firmware entrar em vigor, ela mostrará os campos atualizados, Package
, Version
e Model
e o status da tarefa será alterado para COMPLETED
.
aws iotwireless get-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57
Confira a seguir a saída do 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" }
Neste exemplo, mostramos a atualização do firmware usando o RAKWireless Gateway baseado em Raspberry Pi. O script de atualização do firmware interrompe a execução do BasicStation para armazenar os campos Package
, Version
e Model
atualizados, portanto, BasicStation precisará ser reiniciado.
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 a atualização do firmware falhar, você verá um status de FIRST_RETRY
do servidor CUPS e o gateway enviará a mesma solicitação. Se o servidor CUPS não conseguir se conectar ao gateway após um SECOND_RETRY
, ele mostrará um status de FAILED
.
Depois que a tarefa anterior for COMPLETED
ou FAILED
, exclua a tarefa antiga usando o comando delete-wireless-gateway-task antes de iniciar uma nova.
aws iotwireless delete-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57