

# Planifiez et exécutez la mise à jour du micrologiciel à l’aide d’une définition de tâche
<a name="lorawan-schedule-firmware-update"></a>

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.

**Topics**
+ [Exécutez la version actuelle sur votre passerelle](#lorawan-gateway-current-version)
+ [Créer une définition de tâche de passerelle sans fil](#lorawan-create-task-definition)
+ [Exécutez la tâche de mise à jour du micrologiciel et suivez les progrès](#lorawan-run-fwupdate-task)

## Exécutez la version actuelle sur votre passerelle
<a name="lorawan-gateway-current-version"></a>

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](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-wireless-gateway.html).

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

1. À 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](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-wireless-gateway-firmware-information.html) 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
<a name="lorawan-create-task-definition"></a>

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](lorawan-script-fwupdate-sigkey.md), 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"
                 }
             }
         }
     }
     ```

1. Transmettez le fichier `input.json` à la commande [create-wireless-gateway-task-definition](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-wireless-gateway-task-definition.html) 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
<a name="lorawan-run-fwupdate-task"></a>

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 `AutoCreateTasks`sur `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](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-wireless-gateway-task.html) 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 à jour`Package`, `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 un`SECOND_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](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-wireless-gateway-task.html) avant d’en démarrer une nouvelle.

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