View a markdown version of this page

AWS IoT Comandi e risoluzione dei problemi - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

AWS IoT Comandi e risoluzione dei problemi

Questa è la sezione relativa alla risoluzione dei problemi relativi ai AWS IoT Device Management comandi.

Problemi relativi all'esecuzione dei comandi

L'esecuzione del comando rimane nello stato CREATED

Quando l'esecuzione di un comando rimane nello CREATED stato e non procede verso IN_PROGRESS un altro stato, considera quanto segue:

  • Verifica che il dispositivo sia connesso a AWS IoT Core e sia iscritto all'argomento relativo alla richiesta dei comandi.

  • Verifica che la politica del dispositivo lo iot:Receive consenta iot:Subscribe e nell'argomento della richiesta dei iot:Publish comandi e nell'argomento della risposta ai comandi.

  • Se il dispositivo è offline e utilizza sessioni permanenti MQTT, il comando attende in Core. AWS IoT Quando il dispositivo si riconnette prima del timeout persistente della sessione e del timeout di esecuzione, può elaborare il comando. Se il timeout di esecuzione scade, l'esecuzione passa a. TIMED_OUT

DataConflict errore attivo UpdateCommandExecution

Si verifica un DataConflict errore quando vengono effettuate più UpdateCommandExecution richieste al servizio in parallelo o in un breve lasso di tempo (ad esempio, IN_PROGRESS seguite immediatamente daSUCCEEDED).

Per risolvere il problema:

  • Iscriviti agli argomenti /accepted e alle /rejected risposte per confermare che ogni aggiornamento di stato è stato elaborato prima di inviare quello successivo.

  • Implementa la logica dei tentativi con backoff esponenziale in caso di ricezione di errori. DataConflict

Le esecuzioni dei comandi passano allo stato del terminale TIMED_OUT in modo imprevisto

Quando l'esecuzione di un comando passa a prima che il dispositivo possa elaborarloTIMED_OUT:

  • Rivedi il valore di timeout configurato per l'esecuzione del comando. Il timeout predefinito potrebbe essere troppo breve per il tuo caso d'uso.

  • Se il dispositivo era offline al momento dell'invio del comando, verifica che il dispositivo si sia ricollegato e abbia ricevuto la richiesta di esecuzione prima della scadenza del timeout.

  • Un sistema avviato dal cloud non è un terminaleTIMED_OUT. Il dispositivo può comunque aggiornare l'esecuzione allo stato di terminale (SUCCEEDED,FAILED, REJECTED o). TIMED_OUT

Nota

Uno stato avviato dal dispositivo TIMED_OUT è uno stato del terminale e non è possibile apportare ulteriori aggiornamenti all'esecuzione di questo comando.

Come posso visualizzare gli errori nei log? CloudWatch

Gli errori derivanti dalla richiesta UpdateCommandExecution MQTT vengono registrati nel gruppo di AWSIoTLogsV2 log di Amazon. CloudWatch Per abilitare la registrazione e visualizzare i log, consulta. Configura AWS IoT logging

UpdateCommandExecution codici di errore

Quando la richiesta UpdateCommandExecution MQTT fallisce, il servizio pubblica una risposta di errore sull'argomento. /rejected La risposta all'errore contiene un codice e un messaggio di errore. La tabella seguente elenca i codici di errore che possono essere restituiti.

Codice di errore Non irreversibile Description
InvalidStateTransition No La transizione di stato richiesta non è consentita. Ad esempio, la transizione da SUCCEEDED aIN_PROGRESS, l'aggiornamento di un'esecuzione avviata dal dispositivoTIMED_OUT.
TerminalStateReached No L'esecuzione del comando ha già raggiunto lo stato terminale e non può essere aggiornata.
ResourceNotFound No L'esecuzione del comando specificata non esiste.
DataConflict Sì L'esecuzione del comando è stata modificata contemporaneamente. Ciò può verificarsi quando gli aggiornamenti di stato vengono inviati in rapida successione. Iscriviti agli argomenti /accepted e alle /rejected risposte per confermare che ogni aggiornamento di stato è stato elaborato prima di inviare quello successivo. Per maggiori dettagli, vedi DataConflict error on UpdateCommandExecution.
InternalError Sì Si è verificato un errore interno del server. Riprova la richiesta con un backoff esponenziale.

Di seguito è riportato un esempio di risposta di errore pubblicata sull'argomento: /rejected

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