View a markdown version of this page

AWS IoT Risoluzione dei problemi dei comandi - 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 Risoluzione dei problemi dei comandi

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

Problemi di esecuzione dei comandi

L'esecuzione del comando rimane nello stato CREATED

Quando l'esecuzione di un comando rimane nello CREATED stato e non passa a IN_PROGRESS uno stato diverso, considera quanto segue:

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

  • Verifica che la politica del dispositivo lo consenta iot:Subscribe e iot:Receive sull'argomento relativo alla richiesta dei comandi e all'argomento iot:Publish relativo alla risposta ai comandi.

  • Se il dispositivo è offline e utilizza sessioni permanenti MQTT, il comando attende in AWS IoT Core. 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 su UpdateCommandExecution

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

Per risolvere il problema:

  • Iscriviti agli argomenti /accepted e /rejected rispondi 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 di 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 file avviato dal cloud TIMED_OUT non è terminale. Il dispositivo può comunque aggiornare l'esecuzione allo stato di un terminale (SUCCEEDED,,FAILED, REJECTED o). TIMED_OUT

Nota

Un dispositivo avviato 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 della richiesta UpdateCommandExecution MQTT vengono registrati nel gruppo di AWSIoTLogsV2 log in Amazon. CloudWatch Per abilitare la registrazione e visualizzare i log, consulta. Configurare la registrazione AWS IoT

UpdateCommandExecution codici di errore

Quando la richiesta UpdateCommandExecution MQTT ha esito negativo, il servizio pubblica una risposta di errore all'/rejectedargomento. La risposta di 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 specificato non esiste.
DataConflict 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 /rejected rispondi per confermare che ogni aggiornamento allo stato è stato elaborato prima di inviare quello successivo. Per maggiori dettagli, vedi DataConflict error on UpdateCommandExecution.
InternalError 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" }