Planifiez et exécutez la mise à jour du micrologiciel à l’aide d’une définition de tâche - AWS IoT Wireless

Planifiez et exécutez la mise à jour du micrologiciel à l’aide d’une définition de tâche

Vous pouvez utiliser une définition de tâche pour inclure des détails sur la mise à jour du micrologiciel et définir la mise à jour. AWS IoT Core for LoRaWAN fournit une mise à jour du micrologiciel basée sur les informations des trois champs suivants associés à la passerelle.

  • Station

    Version et date de création du logiciel Basics Station. Pour identifier ces informations, vous pouvez également les générer à l’aide du logiciel Basics Station qui est exécuté par votre passerelle (par exemple,2.0.5(rpi/std) 2021-03-09 03:45:09).

  • Version du package

    Version du micrologiciel, spécifiée par le fichier version.txt dans la passerelle. Bien que ces informations ne soient pas présentes dans la passerelle, nous vous recommandons de les utiliser pour définir la version de votre micrologiciel (par exemple,1.0.0).

  • Modèle

    Plate-forme ou modèle utilisé par la passerelle (par exemple, Linux).

Cette procédure prend environ 20 minutes.

Exécutez la version actuelle sur votre passerelle

Pour déterminer l’éligibilité de votre passerelle à une mise à jour du micrologiciel, le serveur CUPS vérifie les trois champs Station, PackageVersion et Model, s’ils correspondent lorsque la passerelle les présente lors d’une demande CUPS. Lorsque vous utilisez une définition de tâche, ces champs sont stockés en tant que partie intégrante du CurrentVersion champ.

Vous pouvez utiliser l’API AWS IoT Core for LoRaWAN ou AWS CLI pour obtenir l’API CurrentVersion pour votre passerelle. Les commandes suivantes montrent comment obtenir ces informations à l’aide de la CLI.

  1. Si vous avez déjà configuré une passerelle, vous pouvez obtenir des informations sur celle-ci à l’aide de la commande get-wireless-gateway.

    aws iotwireless get-wireless-gateway \ --identifier 5a11b0a85a11b0a8 \ --identifier-type GatewayEui

    Voici un exemple de sortie de la commande.

    { "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. À l’aide de l’ID de passerelle sans fil indiqué par la commande get-wireless-gateway, vous pouvez utiliser la commande get-wireless-gateway-firmware-information pour obtenir le CurrentVersion.

    aws iotwireless get-wireless-gateway-firmware-information \ --id "3039b406-5cc9-4307-925b-9948c63da25b"

    Vous trouverez ci-dessous un exemple de sortie pour la commande, avec les informations des trois champs affichées par le CurrentVersion.

    { "LoRaWAN": { "CurrentVersion": { "PackageVersion": "1.0.0", "Model": "rpi", "Station": "2.0.5(rpi/std) 2021-03-09 03:45:09" } } }

Créer une définition de tâche de passerelle sans fil

Lorsque vous créez la définition des tâches, nous vous recommandons de spécifier la création automatique des tâches à l’aide du paramètre AutoCreateTasks. AutoCreateTasks s’applique à toute passerelle qui correspond aux trois paramètres mentionnés précédemment. Si ce paramètre est désactivé, les paramètres doivent être assignés manuellement à la passerelle.

Vous pouvez créer la définition de tâche de passerelle sans fil à l’aide de l’API AWS IoT Core for LoRaWAN ou AWS CLI. Les commandes suivantes montrent comment créer la définition de tâche à l’aide de la CLI.

  1. Créez un fichier, input.json, qui contiendra les informations à transmettre à l’API CreateWirelessGatewayTaskDefinition. Dans le fichier input.json, fournissez les informations suivantes que vous avez obtenues précédemment :

    • UpdateDataSource

      Fournissez le lien vers votre objet contenant le fichier de mise à jour du micrologiciel que vous avez chargé dans le compartiment S3. (par exemple, s3://iotwirelessfwupdate/fwstation.

    • Mettre à jour le rôle des données

      Fournissez le lien vers l’ARN du rôle IAM que vous avez créé, qui fournit les autorisations nécessaires pour lire le compartiment S3. (par exemple, arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole.

    • SigKeyCRC et UpdateSignature

      Ces informations peuvent être fournies par le fabricant de votre passerelle, mais si vous avez suivi la procédure décrite dans Génération du fichier de mise à jour du micrologiciel et de la signature, vous les trouverez lors de la génération de la signature.

    • CurrentVersion

      Fournissez la sortie CurrentVersion que vous avez obtenue précédemment en exécutant la commande get-wireless-gateway-firmware-information .

      cat input.json

      L’exemple suivant affiche le contenu du fichier 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. Transmettez le fichier input.json à la commande create-wireless-gateway-task-definition pour créer la définition de tâche.

    aws iotwireless create-wireless-gateway-task-definition \ --cli-input-json file://input.json

    La sortie de la commande est illustrée ci-dessous.

    { "Id": "4ac46ff4-efc5-44fd-9def-e8517077bb12", "Arn": "arn:aws:iotwireless:us-east-1:231894231068:WirelessGatewayTaskDefinition/4ac46ff4-efc5-44fd-9def-e8517077bb12" }

Exécutez la tâche de mise à jour du micrologiciel et suivez les progrès

La passerelle est prête à recevoir la mise à jour du micrologiciel et, une fois allumée, elle se connecte au serveur CUPS. Lorsque le serveur CUPS trouve une correspondance dans la version de la passerelle, il planifie une mise à jour du micrologiciel.

Une tâche est une définition de tâche en cours de traitement. Comme vous avez spécifié la création automatique des tâches en réglant AutoCreateTaskssur True, la tâche de mise à jour du micrologiciel démarre dès qu’une passerelle correspondante est trouvée.

Vous pouvez suivre la progression de la tâche à l’aide de l’API GetWirelessGatewayTask. Lorsque vous exécutez la commande get-wireless-gateway-task pour la première fois, l’état de la tâche s’affiche sous la forme IN_PROGRESS.

aws iotwireless get-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57

La sortie de la commande est illustrée ci-dessous.

{ "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" }

Lorsque vous exécuterez la commande la prochaine fois, si la mise à jour du micrologiciel prend effet, les champs mis à jourPackage, Version, et Model et le statut de la tâche passe à COMPLETED.

aws iotwireless get-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57

La sortie de la commande est illustrée ci-dessous.

{ "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" }

Dans cet exemple, nous vous avons montré la mise à jour du micrologiciel à l’aide de la passerelle RAKWireless basée sur le Raspberry Pi. Le script de mise à jour du micrologiciel arrête la BasicStation en cours d’exécution pour enregistrer les mises à jour des champs Package, Version, et Model, de sorte que BasicStation devra être redémarrée.

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 la mise à jour du micrologiciel échoue, l’état FIRST_RETRY du serveur CUPS s’affiche, et la passerelle envoie la même demande. Si le serveur CUPS ne parvient pas à se connecter à la passerelle après unSECOND_RETRY, il affichera un statut de FAILED.

Une fois que la tâche précédente était COMPLETED ou FAILED, supprimez l’ancienne tâche à l’aide de la commande delete-wireless-gateway-task avant d’en démarrer une nouvelle.

aws iotwireless delete-wireless-gateway-task \ --id 1352172b-0602-4b40-896f-54da9ed16b57