

# Mettre à jour le micrologiciel de la passerelle à l’aide du service CUPS AWS IoT Core for LoRaWAN
<a name="lorawan-update-firmware"></a>

Le logiciel [LoRa Basics Station](https://doc.sm.tc/station) qui s’exécute sur votre passerelle fournit une interface de gestion des informations d’identification et de mise à jour du micrologiciel à l’aide du protocole CUPS (Serveur de configuration et de mise à jour). Le protocole CUPS fournit des mises à jour sécurisées du micrologiciel avec des signatures ECDSA.

Vous devrez fréquemment mettre à jour le micrologiciel de votre passerelle. Vous pouvez utiliser le service CUPS AWS IoT Core for LoRaWAN pour fournir des mises à jour du micrologiciel à la passerelle où les mises à jour peuvent également être signées. Pour mettre à jour le micrologiciel de la passerelle, vous pouvez utiliser le SDK ou la CLI, mais pas la console. 

Le processus prend environ 45 minutes. Cela peut prendre plus de temps si vous configurez votre passerelle pour la première fois pour vous connecter à AWS IoT Core for LoRaWAN. Les fabricants de passerelles fournissent généralement leurs propres fichiers de mise à jour du micrologiciel et leurs propres signatures. Vous pouvez donc les utiliser à la place et passer à [Téléchargement du fichier du micrologiciel vers un compartiment S3 et ajout d’un rôle IAM](lorawan-upload-firmware-s3bucket.md).

Si vous ne disposez pas des fichiers de mise à jour du micrologiciel, consultez [Génération du fichier de mise à jour du micrologiciel et de la signature](lorawan-script-fwupdate-sigkey.md) comme exemple que vous pouvez utiliser pour l’adapter à votre application.

**Topics**
+ [

# Génération du fichier de mise à jour du micrologiciel et de la signature
](lorawan-script-fwupdate-sigkey.md)
+ [

# Téléchargement du fichier du micrologiciel vers un compartiment S3 et ajout d’un rôle IAM
](lorawan-upload-firmware-s3bucket.md)
+ [

# Planifiez et exécutez la mise à jour du micrologiciel à l’aide d’une définition de tâche
](lorawan-schedule-firmware-update.md)

# Génération du fichier de mise à jour du micrologiciel et de la signature
<a name="lorawan-script-fwupdate-sigkey"></a>

Les étapes de cette procédure sont facultatives et dépendent de la passerelle que vous utilisez. Les fabricants de passerelles fournissent leur propre mise à jour du micrologiciel sous la forme d’un fichier de mise à jour ou d’un script et Basics Station exécute ce script en arrière-plan. Dans ce cas, vous trouverez probablement le fichier de mise à jour du micrologiciel dans les notes de version de la passerelle que vous utilisez. Vous pouvez ensuite utiliser ce fichier ou script de mise à jour à la place et passer à [Téléchargement du fichier du micrologiciel vers un compartiment S3 et ajout d’un rôle IAM](lorawan-upload-firmware-s3bucket.md).

Si vous ne disposez pas de ce script, voici les commandes à exécuter pour générer le fichier de mise à jour du micrologiciel. Les mises à jour peuvent également être signées pour garantir que le code n’a pas été modifié ou corrompu et que les appareils exécutent du code publié uniquement par des auteurs fiables.

**Topics**
+ [

## Générer le fichier de mise à jour du micrologiciel
](#lorawan-firmware-update-script)
+ [

## Générer une signature pour la mise à jour du micrologiciel
](#lorawan-generate-signature-fwupdate)
+ [

## Passer en revue les étapes suivantes
](#lorawan-fwupdate-sigkey-next-steps)

## Générer le fichier de mise à jour du micrologiciel
<a name="lorawan-firmware-update-script"></a>

Le logiciel LoRa Basics Station exécuté sur la passerelle est capable de recevoir des mises à jour du micrologiciel dans la réponse CUPS. Si vous n’avez pas de script fourni par le fabricant, reportez-vous au script de mise à jour du micrologiciel suivant, écrit pour la passerelle sans fil RAKWireless basée sur le Raspberry Pi. Nous avons un script de base et le nouveau binaire de la station, le fichier de version, et `station.conf` sont attachés à celui-ci.

**Note**  
Le script est spécifique à la passerelle RAKWireless, vous devrez donc l’adapter à votre application en fonction de la passerelle que vous utilisez.

**Script de base**  
Vous trouverez ci-dessous un exemple de script de base pour la passerelle sans fil RAKWireless basée sur le Raspberry Pi. Vous pouvez enregistrer les commandes suivantes dans un fichier `base.sh`, puis exécuter le script dans le terminal sur le navigateur Web du Raspberry Pi.

```
*#!/bin/bash*
execution_folder=/home/pi/Documents/basicstation/examples/aws_lorawan
station_path="$execution_folder/station"
version_path="$execution_folder/version.txt"
station_conf_path="$execution_folder/station_conf"

# Function to find the Basics Station binary at the end of this script 
# and store it in the station path
function prepare_station()
{
 match=$(grep --text --line-number '^STATION:$' $0 | cut -d ':' -f 1) 
 payload_start=$((match + 1)) 
 match_end=$(grep --text --line-number '^END_STATION:$' $0 | cut -d ':' -f 1) 
 payload_end=$((match_end - 1)) 
 lines=$(($payload_end-$payload_start+1)) 
 head -n $payload_end $0 | tail -n $lines  > $station_path
}

# Function to find the version.txt at the end of this script 
# and store it in the location for version.txt
function prepare_version()
{
  match=$(grep --text --line-number '^VERSION:$' $0 | cut -d ':' -f 1) 
  payload_start=$((match + 1))        
  match_end=$(grep --text --line-number '^END_VERSION:$' $0 | cut -d ':' -f 1) 
  payload_end=$((match_end - 1)) 
  lines=$(($payload_end-$payload_start+1)) 
  head -n $payload_end $0 | tail -n $lines  > $version_path
}

# Function to find the version.txt at the end of this script 
# and store it in the location for version.txt
function prepare_station_conf()
{
 match=$(grep --text --line-number '^CONF:$' $0 | cut -d ':' -f 1) 
 payload_start=$((match + 1)) 
 match_end=$(grep --text --line-number '^END_CONF:$' $0 | cut -d ':' -f 1) 
 payload_end=$((match_end - 1)) 
 lines=$(($payload_end-$payload_start+1)) 
 head -n $payload_end $0 | tail -n $lines  > $station_conf_path
}

# Stop the currently running Basics station so that it can be overwritten
# by the new one
killall station

# Store the different files
prepare_station
prepare_versionp
prepare_station_conf

# Provide execute permission for Basics station binary
chmod +x $station_path

# Remove update.bin so that it is not read again next time Basics station starts
rm -f /tmp/update.bin

# Exit so that rest of this script which has binaries attached does not get executed
exit 0
```

**Ajouter un script de charge utile**  
Au script de base, nous ajoutons le binaire Basics Station, le fichier version.txt qui identifie la version à mettre à jour, et `station.conf` dans un script appelé `addpayload.sh`. Exécutez ensuite ce script.

```
*#!/bin/bash
*
base.sh > fwstation

# Add station
echo "STATION:" >> fwstation
cat $1 >> fwstation
echo "" >> fwstation
echo "END_STATION:" >> fwstation

# Add version.txt
echo "VERSION:" >> fwstation
cat $2 >> fwstation
echo "" >> fwstation
echo "END_VERSION:" >> fwstation

# Add station.conf
echo "CONF:" >> fwstation
cat $3 >> fwstation
echo "END_CONF:" >> fwstation

# executable
chmod +x fwstation
```

Après avoir exécuté ces scripts, vous pouvez exécuter la commande suivante dans le terminal pour générer le fichier de mise à jour du micrologiciel, `fwstation`.

```
$ ./addpayload.sh station version.txt station.conf
```

## Générer une signature pour la mise à jour du micrologiciel
<a name="lorawan-generate-signature-fwupdate"></a>

Le logiciel LoRa Basics Station fournit des mises à jour du micrologiciel signées avec des signatures ECDSA. Pour prendre en charge les mises à jour signées, vous avez besoin des éléments suivants :
+ Signature qui doit être générée par une clé privée ECDSA et inférieure à 128 octets. 
+ La clé privée qui est utilisée pour la signature et doit être stockée dans la passerelle avec le nom de fichier au format `sig-%d.key`. Nous vous recommandons d’utiliser le nom du fichier `sig-0.key`.
+ Un CRC 32 bits sur la clé privée.

La signature et le CRC seront transmis aux API AWS IoT Core for LoRaWAN. Pour générer les fichiers précédents, vous pouvez utiliser le script `gen.sh` suivant, inspiré de l’exemple de [basicstation](https://github.com/lorabasics/basicstation/blob/master/examples/cups/prep.sh) du référentiel GitHub.

```
*#!/bin/bash

*function ecdsaKey() {
    # Key not password protected for simplicity    
    openssl ecparam -name prime256v1 -genkey | openssl ec -out $1
}

# Generate ECDSA key
ecdsaKey sig-0.prime256v1.pem

# Generate public key
openssl ec -in sig-0.prime256v1.pem -pubout -out sig-0.prime256v1.pub

# Generate signature private key
openssl ec -in sig-0.prime256v1.pub -inform PEM -outform DER -pubin | tail -c 64 > sig-0.key

# Generate signature
openssl dgst -sha512 -sign sig-0.prime256v1.pem $1 > sig-0.signature

# Convert signature to base64
openssl enc -base64 -in sig-0.signature -out sig-0.signature.base64

# Print the crc
crc_res=$(crc32 sig-0.key)printf "The crc for the private key=%d\n" $((16#$crc_res))

# Remove the generated files which won't be needed later
rm -rf sig-0.prime256v1.pem sig-0.signature sig-0.prime256v1.pub
```

La clé privée générée par le script doit être enregistrée dans la passerelle. Le fichier clé est au format binaire.

```
./gen_sig.sh fwstation 
read EC key
writing EC key
read EC key
writing EC key
read EC key
writing EC key
The crc for the private key=3434210794

$ cat sig-0.signature.base64 
MEQCIDPY/p2ssgXIPNCOgZr+NzeTLpX+WfBo5tYWbh5pQWN3AiBROen+XlIdMScv
AsfVfU/ZScJCalkVNZh4esyS8mNIgA==

$ ls sig-0.key
sig-0.key

$ scp sig-0.key pi@192.168.1.11:/home/pi/Documents/basicstation/examples/iotwireless
```

## Passer en revue les étapes suivantes
<a name="lorawan-fwupdate-sigkey-next-steps"></a>

Maintenant que vous avez généré le micrologiciel et la signature, passez à la rubrique suivante pour télécharger le fichier du micrologiciel dans un compartiment Amazon S3 `fwstation`. Le compartiment est un conteneur qui stockera le fichier de mise à jour du micrologiciel sous forme d’objet. Vous pouvez ajouter un rôle IAM qui autorisera le serveur CUPS à lire le fichier de mise à jour du micrologiciel dans le compartiment S3. 

# Téléchargement du fichier du micrologiciel vers un compartiment S3 et ajout d’un rôle IAM
<a name="lorawan-upload-firmware-s3bucket"></a>

Vous pouvez utiliser Amazon S3 pour créer un *compartiment*, c’est-à-dire un conteneur qui peut stocker votre fichier de mise à jour du micrologiciel. Vous pouvez télécharger votre fichier dans le compartiment S3 et ajouter un rôle IAM qui permet au serveur CUPS de lire votre fichier de mise à jour depuis le compartiment. Pour de plus amples informations sur Amazon S3, veuillez consulter [Commencer avec Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html). 

Le fichier de mise à jour du micrologiciel que vous souhaitez télécharger dépend de la passerelle que vous utilisez. Si vous avez suivi une procédure similaire à celle décrite dans [Génération du fichier de mise à jour du micrologiciel et de la signature](lorawan-script-fwupdate-sigkey.md), vous téléchargerez le fichier `fwstation` généré en exécutant les scripts.

Ce processus prend environ 20 minutes.

**Topics**
+ [

## Création d’un compartiment Amazon S3 et chargement du fichier de mise à jour
](#lorawan-create-s3-bucket)
+ [

## Créez un rôle IAM avec des autorisations pour lire le compartiment S3
](#lorawan-s3-iam-permissions)
+ [

## Passer en revue les étapes suivantes
](#lorawan-s3iam-next-steps)

## Création d’un compartiment Amazon S3 et chargement du fichier de mise à jour
<a name="lorawan-create-s3-bucket"></a>

Vous allez créer un compartiment Amazon S3 à l’aide de AWS Management Console, puis vous y téléchargerez le fichier de mise à jour de votre micrologiciel.

**Création d’un compartiment S3**  
Pour créer un compartiment S3, ouvrez [console Amazon S3](https://console.aws.amazon.com/s3/home#). Connectez-vous si vous ne l’avez pas déjà fait, puis effectuez les étapes suivantes :

1. Choisissez **Créer un compartiment**.

1. Entrez un nom unique et significatif pour le **nom du compartiment** (par exemple,`iotwirelessfwupdate`). Pour connaître la convention de dénomination recommandée pour votre compartiment, consultez[https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).

1. Assurez-vous que vous avez sélectionné le Région AWS que vous avez utilisé pour créer votre passerelle et votre appareil LoRaWAN, et que le paramètre **Bloquer tout accès public** est sélectionné afin que votre compartiment utilise les autorisations par défaut.

1. Choisissez **Activer** la **gestion des versions des compartiments**, ce qui vous permettra de conserver plusieurs versions du fichier de mise à jour du micrologiciel dans le même compartiment.

1. Vérifiez que le **cryptage côté serveur** est défini sur **Désactiver** et choisissez **Créer un compartiment**.

**Téléchargez le fichier de mise à jour du micrologiciel**  
Vous pouvez désormais voir votre compartiment dans la liste des compartiments affichée dans le AWS Management Console. Choisissez votre compartiment et suivez les étapes ci-dessous pour télécharger votre fichier.

1. Choisissez votre compartiment, puis **Télécharger**. 

1. Choisissez **Ajouter un fichier**, puis téléchargez le fichier de mise à jour du micrologiciel. 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 téléchargerez le fichier `fwstation`, sinon vous téléchargerez le fichier fourni par le fabricant de votre passerelle.

1. Assurez-vous que tous les paramètres sont définis par défaut. Assurez-vous que les **ACL prédéfinies** sont définies sur **privé** et choisissez **Télécharger** pour télécharger votre fichier.

1. Copiez l’URI S3 du fichier que vous avez chargé. Choisissez votre compartiment et le fichier que vous avez chargé s’affichera dans la liste des **objets**. Choisissez votre fichier, puis choisissez **Copier l’URI S3**. L’URI sera quelque chose comme : `s3://iotwirelessfwupdate/fwstation` si vous avez nommé votre compartiment de la même manière que dans l’exemple décrit précédemment (`fwstation`). Vous utiliserez l’URI S3 lors de la création du rôle IAM.

## Créez un rôle IAM avec des autorisations pour lire le compartiment S3
<a name="lorawan-s3-iam-permissions"></a>

Vous allez maintenant créer un rôle et une politique IAM qui donneront à CUPS l’autorisation de lire le fichier de mise à jour du micrologiciel depuis le compartiment S3.

**Créez une politique IAM pour votre tâche.**  
Pour créer une politique IAM pour votre rôle de AWS IoT Core for LoRaWAN destination, ouvrez le [Centre des politiques de la console IAM](https://console.aws.amazon.com/iam/home#/policies), puis effectuez les étapes suivantes :

1. Sélectionnez **Créer une politique**, puis l’onglet **JSON**.

1. Supprimez tout contenu de l’éditeur et collez ce document de politique. La politique fournit des autorisations pour accéder au `iotwireless` compartiment et au fichier de mise à jour du micrologiciel`fwstation`, stockés dans un objet.

   ```
   {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucketVersions",
                   "s3:ListBucket",
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::iotwirelessfwupdate/fwstation",
                   "arn:aws:s3:::iotwirelessfwupdate"
               ]
           }
       ]
   }
   ```

1. Choisissez **Réviser la politique**, puis dans l’onglet **Nom**, entrez un nom pour la politique (par exemple, `IoTWirelessFwUpdatePolicy`). Vous avez besoin de ce nom pour l’utiliser dans la procédure suivante.

1. Choisissez **Créer une politique**.

**Créer un rôle IAM avec la politique jointe**  
Vous allez maintenant créer un rôle IAM et joindre la politique créée précédemment pour accéder au compartiment S3. Ouvrez le [Centre de rôles de la console IAM](https://console.aws.amazon.com/iam/home#/roles) et effectuez les étapes suivantes :

1. Sélectionnez **Créer un rôle**.

1. Dans l’onglet **Sélectionner le type d’entité d’approbation**, choisissez **AutreCompte AWS**.

1. Dans **ID de compte**, entrez votre Compte AWS identifiant, puis choisissez **Suivant : Autorisations**.

1. Dans le champ de recherche, entrez le nom de la politique IAM que vous avez créée dans la procédure précédente. Vérifiez la politique IAM (par exemple`IoTWirelessFwUpdatePolicy`) que vous avez créée précédemment dans les résultats de recherche et choisissez-la.

1. Sélectionnez **Suivant : Balises**, puis **Suivant : Vérification)**.

1. Dans l’onglet **Nom du rôle**, saisissez un nom pour votre rôle (par exemple `IoTWirelessFwUpdateRole`), puis sélectionnez **Créer un rôle**.

**Modifiez la relation d’approbation du rôle IAM .**  
Dans le message de confirmation affiché après avoir exécuté l’étape précédente, choisissez le nom du rôle que vous avez créé pour le modifier. Vous modifierez le rôle pour ajouter la relation d’approbation suivante.

1. Dans la section **Récapitulatif** du rôle que vous avez créé, choisissez l’onglet **Relations d’approbation**, puis choisissez **Modifier la relation d’approbation**.

1. Dans l’onglet **Document de politique**, modifiez la `Principal` propriété pour qu’elle ressemble à cet exemple.

   ```
   "Principal": { 
       "Service": "iotwireless.amazonaws.com" 
   },
   ```

   Après avoir modifié la `Principal` propriété, le document de politique complet doit ressembler à cet exemple.

   ```
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "iotwireless.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {}
       }
     ]
   }
   ```

1. Pour enregistrer vos modifications et quittez, sélectionnez **Mettre à jour la politique d’approbation**.

1. Obtenez l’ARN correspondant à votre rôle. Choisissez votre rôle IAM et dans la section Récapitulatif, vous verrez un **ARN de rôle**, tel que `arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole`. Copiez cet **ARN de rôle**.

## Passer en revue les étapes suivantes
<a name="lorawan-s3iam-next-steps"></a>

Maintenant que vous avez créé le compartiment S3 et un rôle IAM qui permet au serveur CUPS de lire le compartiment S3, passez à la rubrique suivante pour planifier et exécuter la mise à jour du micrologiciel. Conservez l’**URI S3** et l’**ARN du rôle** que vous avez copiés précédemment afin de pouvoir les saisir pour créer une définition de tâche qui sera exécutée pour effectuer la mise à jour du micrologiciel.

# 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
```