

# Planen und Ausführen des Firmware-Updates mithilfe einer Aufgabendefinition
<a name="lorawan-schedule-firmware-update"></a>

Sie können eine Aufgabendefinition verwenden, um Details zum Firmware-Update aufzunehmen und das Update zu definieren. AWS IoT Core für LoRaWAN stellt ein Firmware-Update bereit, das auf Informationen aus den folgenden drei Feldern basiert, die dem Gateway zugeordnet sind.
+ 

**Station**  
Die Version und die Erstellungszeit der Basics Station-Software. Um diese Informationen zu identifizieren, können Sie sie auch mithilfe der Basics Station-Software generieren, die von Ihrem Gateway ausgeführt wird (z. B. `2.0.5(rpi/std) 2021-03-09 03:45:09`).
+ 

**Version des Pakets**  
Die Firmware-Version, angegeben durch die Datei `version.txt` im Gateway. Diese Informationen sind zwar möglicherweise nicht im Gateway vorhanden, wir empfehlen sie jedoch, um Ihre Firmware-Version zu definieren (z. B. `1.0.0`).
+ 

**Modell**  
Die Plattform oder das Modell, das vom Gateway verwendet wird (z. B. Linux).

Dieser Vorgang dauert etwa 20 Minuten.

**Topics**
+ [Lassen Sie die aktuelle Version auf Ihrem Gateway laufen](#lorawan-gateway-current-version)
+ [Erstellen einer WLAN-Gateway-Aufgabendefinition](#lorawan-create-task-definition)
+ [Führen Sie die Aufgabe zum Firmware-Update aus und verfolgen Sie den Fortschritt](#lorawan-run-fwupdate-task)

## Lassen Sie die aktuelle Version auf Ihrem Gateway laufen
<a name="lorawan-gateway-current-version"></a>

Um festzustellen, ob Ihr Gateway für ein Firmware-Update in Frage kommt, überprüft der CUPS-Server alle drei Felder (`Station`, `PackageVersion` und `Model`) auf eine Übereinstimmung, wenn das Gateway sie während einer CUPS-Anfrage anzeigt. Wenn Sie eine Aufgabendefinition verwenden, werden diese Felder als Teil des `CurrentVersion`-Felds gespeichert.

Sie können die AWS IoT Core für LoRaWAN-API verwenden oder AWS CLI, um die `CurrentVersion` für Ihr Gateway abzurufen. Die folgenden Befehle zeigen, wie Sie diese Informationen mit der CLI abrufen können.

1. Wenn Sie bereits ein Gateway bereitgestellt haben, können Sie mit dem Befehl [get-wireless-gateway](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-wireless-gateway.html) Informationen über das Gateway abrufen.

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

   Das folgende Beispiel zeigt einen Teil der Beispielausgabe für diesen Befehl.

   ```
   {
       "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. Mithilfe der vom Befehl gemeldeten Wireless-Gateway-ID können Sie mit dem `get-wireless-gateway`-Befehl [get-wireless-gateway-firmware-information ](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-wireless-gateway-firmware-information.html) die `CurrentVersion` abrufen. 

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

   Im Folgenden finden Sie eine Beispielausgabe für den Befehl mit Informationen aus allen drei Feldern, die von der `CurrentVersion` angezeigt werden. 

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

## Erstellen einer WLAN-Gateway-Aufgabendefinition
<a name="lorawan-create-task-definition"></a>

Wenn Sie die Aufgabendefinition erstellen, empfehlen wir, die automatische Erstellung von Aufgaben mithilfe des AutoCreateTasks-Parameters anzugeben. `AutoCreateTasks` gilt für jedes Gateway, das eine Übereinstimmung mit allen drei zuvor genannten Parametern aufweist. Wenn dieser Parameter deaktiviert ist, müssen die Parameter dem Gateway manuell zugewiesen werden.

Sie können die Aufgabendefinition für das WLAN-Gateway mithilfe der AWS IoT Core für LoRaWAN API oder AWS CLI erstellen. Die folgenden Befehle zeigen, wie die Aufgabendefinition mithilfe der Befehlszeilenschnittstelle erstellt wird.

1. Erstellen Sie eine `input.json`-Datei, die die Informationen enthält, die an die `CreateWirelessGatewayTaskDefinition` API übergeben werden sollen. Geben Sie in der `input.json`-Datei die folgenden Informationen an, die Sie zuvor erhalten haben:
   + 

**UpdateDataSource**  
Geben Sie den Link zu Ihrem Objekt an, das die Firmware-Aktualisierungsdatei enthält, die Sie in den S3-Bucket hochgeladen haben (z. B. `s3://iotwirelessfwupdate/fwstation`).
   + 

**UpdateDataRole**  
Geben Sie den Link zum Rollen-ARN für die von Ihnen erstellte IAM-Rolle an, die Berechtigungen zum Lesen des S3-Buckets bereitstellt (z. B. `arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole`).
   + 

**SigKeyCRC und UpdateSignature**  
Diese Informationen werden möglicherweise von Ihrem Gateway-Hersteller bereitgestellt. Wenn Sie jedoch das unter [Generieren der Firmware-Aktualisierungsdatei und Signatur](lorawan-script-fwupdate-sigkey.md) beschriebene Verfahren befolgt haben, finden Sie diese Informationen bei der Generierung der Signatur.
   + 

**CurrentVersion**  
Stellen Sie die `CurrentVersion`-Ausgabe bereit, die Sie zuvor durch Ausführen des `get-wireless-gateway-firmware-information `-Befehls erhalten haben.

     ```
     cat input.json
     ```

     Im Folgenden werden die Inhalte der `input.json`-Datei angezeigt.

     ```
     {
         "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. Übergeben Sie die `input.json`-Datei an den Befehl [create-wireless-gateway-task-definition](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-wireless-gateway-task-definition.html), um die Aufgabendefinition zu erstellen. 

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

   Das folgende Beispiel veranschaulicht die Ausgabe des Befehls.

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

## Führen Sie die Aufgabe zum Firmware-Update aus und verfolgen Sie den Fortschritt
<a name="lorawan-run-fwupdate-task"></a>

Das Gateway ist bereit, das Firmware-Update zu empfangen, und stellt nach dem Einschalten eine Verbindung zum CUPS-Server her. Wenn der CUPS-Server eine Übereinstimmung in der Version des Gateways findet, plant er ein Firmware-Update.

Eine Aufgabe ist eine Aufgabendefinition, die in Bearbeitung ist. Da Sie die automatische Aufgabenerstellung mit der Einstellung `AutoCreateTasks` auf `True` angegeben haben, wird die Firmware-Aktualisierungsaufgabe gestartet, sobald ein passendes Gateway gefunden wird.

Sie können den Fortschritt der Aufgabe mithilfe der `GetWirelessGatewayTask` API verfolgen. Wenn Sie den Befehl [get-wireless-gateway-task](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-wireless-gateway-task.html) zum ersten Mal ausführen, wird der Aufgabenstatus als `IN_PROGRESS` angezeigt.

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

Das folgende Beispiel veranschaulicht die Ausgabe des Befehls.

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

Wenn Sie den Befehl das nächste Mal ausführen und das Firmware-Update wirksam wird, werden die aktualisierten Felder `Package`, `Version` und `Model` angezeigt und der Aufgabenstatus ändert sich in `COMPLETED`.

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

Das folgende Beispiel veranschaulicht die Ausgabe des Befehls.

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

In diesem Beispiel haben wir Ihnen das Firmware-Update mit dem Raspberry Pi-basierten RAKWireless-Gateway gezeigt. Das Firmware-Aktualisierungsskript stoppt die laufende BasicStation, um die aktualisierten Felder `Package`, `Version` und `Model` zu speichern, sodass BasicStation neu gestartet werden muss.

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

Wenn das Firmware-Update fehlschlägt, wird der Status von `FIRST_RETRY` vom CUPS-Server angezeigt und das Gateway sendet dieselbe Anfrage. Wenn der CUPS-Server nach einer `SECOND_RETRY` keine Verbindung zum Gateway herstellen kann, wird der Status `FAILED` angezeigt.

Nachdem die vorherige Aufgabe `COMPLETED` oder `FAILED` war, löschen Sie die alte Aufgabe mit dem Befehl [delete-wireless-gateway-task](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-wireless-gateway-task.html), bevor Sie eine neue starten.

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