View a markdown version of this page

AWS IoT Fehlerbehebung bei Befehlen - 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 Fehlerbehebung bei Befehlen

Dies ist der Abschnitt zur Fehlerbehebung für AWS IoT Device Management Befehle.

Probleme bei der Befehlsausführung

Die Befehlsausführung bleibt im Status CREATED

Wenn die Befehlsausführung im CREATED Status verbleibt 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 zur Befehlsanfrage abonniert hat.

  • Vergewissern Sie sich, dass die Geräterichtlinie dies zulässt, iot:Subscribe und zwar im iot:Receive Thema Befehlsanfrage und im iot:Publish Thema Befehlsantwort.

  • Wenn das Gerät offline ist und persistente MQTT-Sitzungen verwendet, wartet der Befehl bei AWS IoT Core. Wenn das Gerät vor Ablauf des persistenten Sitzungstimeouts und des Ausführungstimeouts erneut eine Verbindung herstellt, kann es den Befehl verarbeiten. Wenn das Ausführungstimeout abläuft, wechselt die Ausführung zu. TIMED_OUT

DataConflict Fehler bei UpdateCommandExecution

Ein DataConflict Fehler tritt auf, wenn mehrere UpdateCommandExecution Anfragen parallel oder innerhalb eines kurzen Zeitraums 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, um zu überprüfen, ob jede Statusmeldung verarbeitet wurde, bevor Sie die nächste senden.

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

Befehlsausführungen wechseln unerwartet in den Terminalstatus TIMED_OUT

Wenn die Ausführung eines Befehls zu einem Zeitpunkt übergeht, TIMED_OUT bevor das Gerät ihn 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 beim Senden des Befehls offline war, vergewissern Sie sich, dass das Gerät erneut eine Verbindung hergestellt und die Ausführungsanforderung erhalten hat, bevor das Timeout abgelaufen ist.

  • Ein von der 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 vom Gerät initiiertes Gerät TIMED_OUT ist ein Terminalstatus, und es können keine weiteren Aktualisierungen an dieser Befehlsausführung vorgenommen werden.

Wie kann ich Fehler in CloudWatch Protokollen anzeigen?

Fehler aus der UpdateCommandExecution MQTT-Anfrage 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-Anfrage fehlschlägt, veröffentlicht der Dienst eine Fehlerantwort zu dem /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 zu IN_PROGRESS oder die Aktualisierung 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 der Fall sein, wenn Statusaktualisierungen schnell hintereinander gesendet werden. Abonnieren Sie die Themen /accepted und /rejected Antworten, um zu überprüfen, ob jede Statusmeldung verarbeitet wurde, bevor Sie die nächste versenden. Weitere Informationen finden Sie unter DataConflict Fehler am UpdateCommandExecution.
InternalError Ja Es ist ein interner Serverfehler aufgetreten. Wiederholen Sie die Anfrage mit exponentiellem Backoff.

Im Folgenden finden Sie ein Beispiel für eine zu diesem Thema veröffentlichte Fehlerantwort: /rejected

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