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.txtno 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 GatewayEuiConfira 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
CurrentVersionque você obteve anteriormente executando o comandoget-wireless-gateway-firmware-information.cat input.jsonO 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.jsonpara 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.jsonConfira 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