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
CREATEDden 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:Subscribeund überprüfen Sie, ob dasiot:ReceiveThema für die Befehlsanforderung und dasiot:PublishThema 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
DataConflictFehler tritt auf, wenn mehrereUpdateCommandExecutionAnfragen parallel oder innerhalb eines kurzen Zeitrahmens an den Dienst gestellt werden (z. B. unmittelbarIN_PROGRESSgefolgt vonSUCCEEDED).So beheben Sie dieses Problem
-
Abonnieren Sie die Themen
/acceptedund/rejectedantworten 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_OUTbevor 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_OUTist kein Terminal. Das Gerät kann die Ausführung trotzdem auf einen Terminalstatus (SUCCEEDED,FAILEDREJECTED, oderTIMED_OUT) aktualisieren.
Anmerkung
Ein Gerät initiiert
TIMED_OUTist 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
UpdateCommandExecutionMQTT-Anforderung 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-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" }