Planen und Ausführen des Firmware-Updates mithilfe einer Aufgabendefinition - AWS IoT Wireless

Planen und Ausführen des Firmware-Updates mithilfe einer Aufgabendefinition

Sie können eine Aufgabendefinition verwenden, um Details zum Firmware-Update aufzunehmen und das Update zu definieren. AWS IoT Core for 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.

Lassen Sie die aktuelle Version auf Ihrem Gateway laufen

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 for 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 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" }
  2. Mithilfe der vom Befehl gemeldeten Wireless-Gateway-ID können Sie mit dem get-wireless-gateway-Befehl get-wireless-gateway-firmware-information 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

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 for 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 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" } } } }
  2. Übergeben Sie die input.json-Datei an den Befehl create-wireless-gateway-task-definition, 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

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 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, bevor Sie eine neue starten.

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