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
CREATEDStatus 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:Subscribeund zwar imiot:ReceiveThema Befehlsanfrage und imiot:PublishThema 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
DataConflictFehler tritt auf, wenn mehrereUpdateCommandExecutionAnfragen parallel oder innerhalb eines kurzen Zeitraums an den Dienst gestellt werden (z. B. unmittelbarIN_PROGRESSgefolgt vonSUCCEEDED).So beheben Sie dieses Problem
-
Abonnieren Sie die Themen
/acceptedund/rejectedAntworten, 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_OUTbevor 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_OUTist 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_OUTist 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
UpdateCommandExecutionMQTT-Anfrage werden in derAWSIoTLogsV2Protokollgruppe 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" }