Programe y ejecute la actualización del firmware con una definición de tarea - AWS IoT Wireless

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.

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.

  1. 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" }
  2. 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 la CurrentVersion.

    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.

  1. Cree un archivo, input.json, que contenga la información para pasarla a la API de CreateWirelessGatewayTaskDefinition. En el archivo input.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 comando get-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" } } } }
  2. 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