View a markdown version of this page

AWS IoT Befehle zur Problembehandlung - 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.

AWS IoT Befehle zur Problembehandlung

Dies ist der Abschnitt zur Problembehandlung bei AWS IoT Device Management Befehlen.

Probleme bei der Befehlsausführung

Die Befehlsausführung bleibt im Status CREATED

Wenn eine Befehlsausführung weiterhin CREATED den Status hat und nicht in einen anderen Status übergeht, sollten Sie Folgendes beachten: IN_PROGRESS

  • Stellen Sie sicher, dass das Gerät mit AWS IoT Core verbunden ist und das Thema für die Befehlsanforderung abonniert hat.

  • Stellen Sie sicher, dass die Geräterichtlinie dies zulässt, iot:Subscribe und überprüfen Sie, ob das iot:Receive Thema für die Befehlsanforderung und das iot:Publish Thema für die Befehlsantwort dies zulässt.

  • Wenn das Gerät offline ist und persistente MQTT-Sitzungen verwendet, wartet der Befehl bei AWS IoT Core. Wenn das Gerät vor dem dauerhaften Sitzungs-Timeout und dem Ausführungs-Timeout wieder eine Verbindung herstellt, kann es den Befehl verarbeiten. Wenn das Ausführungs-Timeout abläuft, wechselt die Ausführung zu. TIMED_OUT

DataConflict Fehler am UpdateCommandExecution

Ein DataConflict Fehler tritt auf, wenn mehrere UpdateCommandExecution Anfragen parallel oder innerhalb eines kurzen Zeitrahmens an den Dienst gestellt werden (z. B. unmittelbar IN_PROGRESS gefolgt vonSUCCEEDED).

So beheben Sie dieses Problem

  • Abonnieren Sie die Themen /accepted und /rejected antworten Sie, um zu bestätigen, dass jede Statusaktualisierung verarbeitet wurde, bevor Sie die nächste senden.

  • Implementieren Sie eine Wiederholungslogik mit exponentiellem Backoff beim Empfang von Fehlern. DataConflict

Befehlsausführungen nehmen unerwartet den Terminalstatus TIMED_OUT an

Wenn eine Befehlsausführung in den Zustand übergeht, TIMED_OUT bevor das Gerät sie verarbeiten kann:

  • Überprüfen Sie den für die Befehlsausführung konfigurierten Timeout-Wert. Das Standard-Timeout ist möglicherweise zu kurz für Ihren Anwendungsfall.

  • Wenn das Gerät offline war, als der Befehl gesendet wurde, stellen Sie sicher, dass das Gerät die Verbindung wieder hergestellt und die Ausführungsanforderung erhalten hat, bevor das Timeout abgelaufen ist.

  • Ein Cloud-initiierter Vorgang TIMED_OUT ist kein Terminal. Das Gerät kann die Ausführung trotzdem auf einen Terminalstatus (SUCCEEDED, FAILEDREJECTED, oderTIMED_OUT) aktualisieren.

Anmerkung

Ein Gerät initiiert TIMED_OUT ist ein Terminalstatus, und an dieser Befehlsausführung können keine weiteren Aktualisierungen vorgenommen werden.

Wie kann ich Fehler in CloudWatch Protokollen anzeigen?

Fehler aus der UpdateCommandExecution MQTT-Anforderung werden in der AWSIoTLogsV2 Protokollgruppe in Amazon CloudWatch protokolliert. Informationen zum Aktivieren der Protokollierung und zum Anzeigen der Protokolle finden Sie unterKonfiguration AWS IoT Protokollierung.

UpdateCommandExecution Fehlercodes

Wenn die UpdateCommandExecution MQTT-Anforderung fehlschlägt, veröffentlicht der Dienst eine Fehlerantwort auf das /rejected Thema. Die Fehlerantwort enthält einen Fehlercode und eine Meldung. In der folgenden Tabelle sind die Fehlercodes aufgeführt, die zurückgegeben werden können.

Fehlercode Wiederholbar Description
InvalidStateTransition Nein Der angeforderte Statusübergang ist nicht zulässig. Zum Beispiel der Übergang von SUCCEEDED zuIN_PROGRESS, das Aktualisieren einer vom Gerät initiierten Ausführung. TIMED_OUT
TerminalStateReached Nein Die Befehlsausführung hat bereits einen Terminalstatus erreicht und kann nicht aktualisiert werden.
ResourceNotFound Nein Die angegebene Befehlsausführung ist nicht vorhanden.
DataConflict Ja Die Befehlsausführung wurde gleichzeitig geändert. Dies kann auftreten, wenn Statusaktualisierungen in schneller Folge gesendet werden. Abonnieren Sie die Themen /accepted und beantworten /rejected Sie sie, um zu bestätigen, dass jede Statusaktualisierung verarbeitet wurde, bevor Sie die nächste senden. Weitere Informationen finden Sie unter DataConflict Fehler am UpdateCommandExecution.
InternalError Ja Es ist ein interner Serverfehler aufgetreten. Versuchen Sie die Anfrage mit exponentiellem Backoff erneut.

Das Folgende ist ein Beispiel für eine Fehlerantwort, die zum Thema veröffentlicht wurde: /rejected

{ "clientToken": "client-token-1", "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554", "error": "DataConflict", "errorMessage": "The command execution was modified concurrently" }