Arbeitsablauf für Aufträge - AWS IoT Core

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Arbeitsablauf für Aufträge

Im Folgenden werden die verschiedenen Schritte des Auftragsworkflows vom Starten eines neuen Auftrags bis hin zur Meldung des Abschlussstatus einer Auftragsausführung dargestellt.

Starten Sie einen neuen Auftrag

Wenn ein neuer Auftrag erstellt wird, veröffentlicht AWS IoT Jobs eine Nachricht zum $aws/things/thing-name/jobs/notify Thema für jedes Zielgerät.

Die Nachricht enthält die folgenden Informationen:

{ "timestamp":1476214217017, "jobs":{ "QUEUED":[{ "jobId":"0001", "queuedAt":1476214216981, "lastUpdatedAt":1476214216981, "versionNumber" : 1 }] } }

Das Gerät erhält diese Nachricht auf dem '$aws/things/thingName/jobs/notify'-Thema, wenn die Auftragsausführung in die Warteschlange gesetzt wird.

Anmerkung

Bei Aufträgen mit dem optionalen SchedulingConfig behält der Auftrag den ursprünglichen SCHEDULED-Status bei. Wenn der Auftrag den ausgewählten startTime erreicht, passiert Folgendes:

  • Der Status des Auftragsstatus wird auf IN_PROGRESS aktualisiert.

  • Der Auftrag beginnt mit dem Rollout des Auftragsdokuments auf alle Geräte der Zielgruppe.

Auftragsinformationen abrufen

Um weitere Informationen zu einer Auftragsausführung abzurufen, ruft das Gerät die DescribeJobExecution-MQTT-API mit dem Wert true in dem Feld includeJobDocument ab (Standard).

Wenn die Anforderung erfolgreich ist, veröffentlicht der AWS IoT Jobs-Service eine Nachricht zum $aws/things/MyThing/jobs/0023/get/accepted Thema:

{ "clientToken" : "client-001", "timestamp" : 1489097434407, "execution" : { "approximateSecondsBeforeTimedOut": number, "jobId" : "023", "status" : "QUEUED", "queuedAt" : 1489097374841, "lastUpdatedAt" : 1489097374841, "versionNumber" : 1, "jobDocument" : { < contents of job document > } } }

Wenn die Anforderung fehlschlägt, veröffentlicht der AWS IoT Jobs-Service eine Nachricht zum $aws/things/MyThing/jobs/0023/get/rejected Thema.

Das Gerät verfügt jetzt über das Auftragsdokument, das es verwenden kann, um die Remoteoperationen für den Auftrag durchzuführen. Wenn das Auftragsdokument eine vorsignierte Amazon S3-URL enthält, kann das Gerät diese URL zum Download aller für den Auftrag erforderlicher Dateien verwenden.

Melden des Status der Auftragsausführung

Wenn das Gerät den Auftrag ausführt, kann es die UpdateJobExecution-MQTT-API aufrufen, um den Status der Auftragsausführung zu aktualisieren.

Beispielsweise kann ein Gerät den Status der Auftragsausführung zu IN_PROGRESS aktualisieren, indem es die folgende Nachricht auf dem Thema $aws/things/MyThing/jobs/0023/update veröffentlicht:

{ "status":"IN_PROGRESS", "statusDetails": { "progress":"50%" }, "expectedVersion":"1", "clientToken":"client001" }

Jobs reagiert mit der Veröffentlichung einer Nachricht auf das Thema $aws/things/MyThing/jobs/0023/update/accepted oder $aws/things/MyThing/jobs/0023/update/rejected:

{ "clientToken":"client001", "timestamp":1476289222841 }

Das Gerät kann die beiden vorherigen Anforderungen durch den Aufruf von StartNextPendingJobExecution kombinieren. Dadurch wird die nächste ausstehende Auftragsausführung abgerufen und gestartet, und das Gerät kann den Auftragsausführungsstatus aktualisieren. Diese Anforderung gibt auch das Auftragsdokument aus, wenn eine Auftragsausführung aussteht.

Wenn der Auftrag eine enthältTimeoutConfig, wird der Timer in Bearbeitung ausgeführt. Sie können auch einen Schritt-Timer für eine Auftragsausführung festlegen, indem Sie einen Wert für festlegenstepTimeoutInMinutes, wenn Sie aufrufenUpdateJobExecution. Der Schritt Timer gilt nur für die Auftragsausführung, die Sie aktualisieren. Sie können einen neuen Wert für diesen Timer bei jeder Aktualisierung einer Auftragsausführung einrichten. Sie können auch einen Schritt-Timer erstellen, wenn Sie aufrufenStartNextPendingJobExecution. Falls die Auftragsausführung länger als das Schritt-Timer-Intervall im Status IN_PROGRESS bleibt, schlägt sie fehl und wechselt in den terminalen Status TIMED_OUT. Der Schritt-Timer hat keine Auswirkungen auf den Timer „In Bearbeitung“, den Sie beim Erstellen eines Auftrags festlegen.

Das Feld status kann auf IN_PROGRESS, SUCCEEDED oder FAILED gesetzt werden. Der Status einer bereits im Status „Terminal“ befindlichen Auftragsausführung kann nicht aktualisiert werden.

Meldung des Abschlusses der Ausführung

Wenn das Gerät die Ausführung des Auftrags abgeschlossen hat, ruft es die UpdateJobExecution-MQTT-API ab. Wenn der Auftrag erfolgreich war, setzen Sie status auf SUCCEEDED, und fügen Sie in statusDetails in der Nachrichtnutzlast weitere Informationen zu dem Auftrag als Name/Wert-Paare hinzu. Die Timer „In Bearbeitung“ und „Schritt“ enden, wenn die Auftragsausführung abgeschlossen ist.

Beispielsweise:

{ "status":"SUCCEEDED", "statusDetails": { "progress":"100%" }, "expectedVersion":"2", "clientToken":"client-001" }

Wenn der Auftrag nicht erfolgreich war, setzen Sie status auf FAILED, und fügen Sie in statusDetailsInformationen zu dem aufgetretenen Fehler hinzu:

{ "status":"FAILED", "statusDetails": { "errorCode":"101", "errorMsg":"Unable to install update" }, "expectedVersion":"2", "clientToken":"client-001" }
Anmerkung

Das Attribut statusDetails kann eine beliebige Zahl von Name/Wert-Paaren enthalten.

Wenn der AWS IoT Jobs-Service diese Aktualisierung erhält, veröffentlicht er eine Nachricht zum $aws/things/MyThing/jobs/notify Thema, um anzuzeigen, dass die Auftragsausführung abgeschlossen ist:

{ "timestamp":1476290692776, "jobs":{} }

Zusätzliche Aufträge

Wenn für das Gerät weitere Auftragsausführungen ausstehen, sind diese in der Nachricht enthalten, die für $aws/things/MyThing/jobs/notify veröffentlicht wurde.

Beispielsweise:

{ "timestamp":1476290692776, "jobs":{ "QUEUED":[{ "jobId":"0002", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }], "IN_PROGRESS":[{ "jobId":"0003", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }] } }