Programe y ejecute la actualización del firmware con una definición de tarea
Puede utilizar una definición de tarea para incluir detalles sobre la actualización del firmware y definir la actualización. AWS IoT Core para LoRaWAN proporciona una actualización del firmware basada en la información de los tres campos siguientes asociados a la puerta de enlace.
-
Station
La versión y el tiempo de construcción del software Basics Station. Para identificar esta información, también puede generarla mediante el software Basics Station que ejecuta su puerta de enlace (por ejemplo,
2.0.5(rpi/std) 2021-03-09 03:45:09
). -
PackageVersion
La versión del firmware, especificada en el archivo
version.txt
de la puerta de enlace. Si bien es posible que esta información no esté presente en la puerta de enlace, la recomendamos como forma de definir la versión de firmware (por ejemplo,1.0.0
). -
Model
La plataforma o el modelo que utiliza la puerta de enlace (por ejemplo, Linux).
Este proceso tarda alrededor de 20 minutos en completarse.
Para completar este procedimiento:
Haga que la versión actual se ejecute en su puerta de enlace
Para determinar si su puerta de enlace es apta para una actualización del firmware, el servidor CUPS comprueba los tres campos Station
PackageVersion
y Model
, y si coinciden cuando la puerta de enlace los presenta durante una solicitud de CUPS. Cuando se utiliza una definición de tarea, estos campos se almacenan como parte del campo CurrentVersion
.
Puede usar la API de AWS IoT Core para LoRaWAN o AWS CLI para conseguir la CurrentVersion
de la puerta de enlace. Los siguientes comandos muestran cómo obtener esta información mediante la CLI.
-
Si ya ha aprovisionado una puerta de enlace, puede obtener información sobre ella mediante el comando get-wireless-puerta de enlace.
aws iotwireless get-wireless-gateway \ --identifier 5a11b0a85a11b0a8 \ --identifier-type GatewayEui
A continuación, se muestra una parte del resultado de ejemplo de este 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" }
-
Con el ID de puerta de enlace inalámbrica indicado por el comando
get-wireless-gateway
, puede utilizar el comando get-wireless-puerta de enlace-firmware-information para obtener laCurrentVersion
.aws iotwireless get-wireless-gateway-firmware-information \ --id "3039b406-5cc9-4307-925b-9948c63da25b"
A continuación se muestra un ejemplo del resultado del comando, con información de los tres campos que se muestran en
CurrentVersion
.{ "LoRaWAN": { "CurrentVersion": { "PackageVersion": "1.0.0", "Model": "rpi", "Station": "2.0.5(rpi/std) 2021-03-09 03:45:09" } } }
Cree una definición de la tarea de puerta de enlace inalámbrica
Al crear la definición de la tarea, se recomienda especificar la creación automática de tareas mediante el parámetro AutoCreateTasks. AutoCreateTasks
se aplica a cualquier puerta de enlace que coincida con los tres parámetros mencionados anteriormente. Si este parámetro está deshabilitado, los parámetros se deben asignar manualmente a la puerta de enlace.
Puede crear la definición de tareas de la puerta de enlace inalámbrica mediante la API de AWS IoT Core para LoRaWAN o la AWS CLI. Los siguientes comandos muestran cómo crear la definición de tarea mediante la CLI.
-
Cree un archivo,
input.json
, que contenga la información para pasarla a la API deCreateWirelessGatewayTaskDefinition
. En el archivoinput.json
, proporcione la siguiente información que obtuvo anteriormente:-
UpdateDataSource
Proporcione el enlace al objeto que contiene el archivo de actualización del firmware que subió en el bucket de S3 (por ejemplo,
s3://iotwirelessfwupdate/fwstation
). -
UpdateDataRole
Proporcione el enlace al ARN del rol para el rol de IAM que creó, que proporciona permisos para leer el bucket de S3 (por ejemplo,
arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole
). -
SigKeyCRC y UpdateSignature
Esta información puede ser proporcionada por el fabricante de la puerta de enlace, pero si ha seguido el procedimiento descrito en Genere el archivo de actualización del firmware y la firma, la encontrará al generar la firma.
-
CurrentVersion
Proporcione el resultado de
CurrentVersion
que obtuvo anteriormente al ejecutar el comandoget-wireless-gateway-firmware-information
.cat input.json
A continuación se muestra el contenido del archivo
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" } } } }
-
-
Pase el archivo
input.json
al comando create-wireless-puerta de enlace-task-definition para crear la definición de la tarea.aws iotwireless create-wireless-gateway-task-definition \ --cli-input-json file://input.json
El siguiente ejemplo muestra el resultado del comando.
{ "Id": "4ac46ff4-efc5-44fd-9def-e8517077bb12", "Arn": "arn:aws:iotwireless:us-east-1:231894231068:WirelessGatewayTaskDefinition/4ac46ff4-efc5-44fd-9def-e8517077bb12" }
Ejecute la tarea de actualización del firmware y realice un seguimiento del progreso
La puerta de enlace está lista para recibir la actualización del firmware y, una vez encendida, se conecta al servidor CUPS. Cuando el servidor CUPS encuentra una versión coincidente en la versión de la puerta de enlace, programa una actualización del firmware.
Una tarea es una definición de tarea en proceso. Como especificó la creación automática de tareas configurándola AutoCreateTasks
como True
, la tarea de actualización del firmware se iniciará tan pronto como se encuentre una puerta de enlace coincidente.
Puede realizar un seguimiento del progreso de la tarea con la API de GetWirelessGatewayTask
. Cuando ejecute el comando get-wireless-puerta de enlace-task por primera vez, mostrará el estado de la tarea como IN_PROGRESS
.
aws iotwireless get-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57
El siguiente ejemplo muestra el resultado 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" }
La próxima vez que ejecute el comando, si se produce la actualización del firmware, se mostrarán los campos actualizados, Package
Version
y Model
, y el estado de la tarea cambiará a COMPLETED
.
aws iotwireless get-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57
El siguiente ejemplo muestra el resultado 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" }
En este ejemplo, le mostramos la actualización del firmware mediante la puerta de enlace RAKWireless basada en Raspberry Pi. El script de actualización del firmware detiene BasicStation en ejecución para almacenar los campos Package
, Version
y Model
actualizados, por lo que se deberá reiniciar 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
Si se produce un error en la actualización del firmware, verá el estado de FIRST_RETRY
del servidor CUPS y la puerta de enlace enviará la misma solicitud. Si el servidor CUPS no puede conectarse a la puerta de enlace después de un SECOND_RETRY
, mostrará un estado de FAILED
.
Después de que la tarea anterior fuera COMPLETED
o FAILED
, elimine la tarea antigua mediante el comando delete-wireless-puerta de enlace-task antes de iniciar una nueva.
aws iotwireless delete-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57