View a markdown version of this page

AWS IoT Dépannage des commandes - AWS IoT Core

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

AWS IoT Dépannage des commandes

Il s'agit de la section de résolution des problèmes pour AWS IoT Device Management les commandes.

Problèmes d'exécution des commandes

L'exécution de la commande reste à l'état CREATED

Lorsqu'une exécution de commande conserve CREATED son statut et ne passe pas à IN_PROGRESS un autre état, prenez en compte les points suivants :

  • Vérifiez que l'appareil est connecté à AWS IoT Core et qu'il est abonné à la rubrique de demande de commandes.

  • Vérifiez que la politique de l'appareil le permet iot:Subscribe et iot:Receive sur la rubrique Demande de commandes et iot:Publish sur la rubrique Réponse aux commandes.

  • Si l'appareil est hors ligne et utilise des sessions persistantes MQTT, la commande est en attente sur AWS IoT Core. Lorsque l'appareil se reconnecte avant l'expiration persistante de la session et le délai d'exécution, il peut traiter la commande. Si le délai d'exécution expire, l'exécution passe àTIMED_OUT.

DataConflict erreur sur UpdateCommandExecution

Une DataConflict erreur se produit lorsque plusieurs UpdateCommandExecution demandes sont adressées au service en parallèle ou dans un court laps de temps (par exempleIN_PROGRESS, immédiatementSUCCEEDED).

Pour résoudre ce problème :

  • Abonnez-vous aux rubriques /accepted et /rejected répondez pour confirmer que chaque mise à jour de statut a été traitée avant d'envoyer la suivante.

  • Implémentez une logique de nouvelle tentative avec un retard exponentiel lors de la réception d'erreurs. DataConflict

Les exécutions de commandes passent à l'état de terminal TIMED_OUT de manière inattendue

Lorsqu'une commande est exécutée TIMED_OUT avant que le périphérique ne puisse la traiter :

  • Vérifiez la valeur du délai d'attente configurée pour l'exécution de la commande. Le délai d'expiration par défaut est peut-être trop court pour votre cas d'utilisation.

  • Si l'appareil était hors ligne au moment de l'envoi de la commande, vérifiez qu'il s'est reconnecté et qu'il a reçu la demande d'exécution avant l'expiration du délai imparti.

  • Un objet initié par le cloud TIMED_OUT n'est pas un terminal. L'appareil peut toujours mettre à jour l'exécution vers un statut de terminal (SUCCEEDEDFAILED,REJECTED, ouTIMED_OUT).

Note

Un appareil lancé TIMED_OUT est un état de terminal et aucune autre mise à jour ne peut être apportée à cette exécution de commande.

Comment puis-je consulter les erreurs dans les CloudWatch journaux ?

Les erreurs provenant de la requête UpdateCommandExecution MQTT sont enregistrées dans le groupe de AWSIoTLogsV2 journaux d'Amazon CloudWatch. Pour activer la journalisation et consulter les journaux, consultezConfigurer AWS IoT journalisation.

UpdateCommandExecution codes d'erreur

Lorsque la requête UpdateCommandExecution MQTT échoue, le service publie une réponse d'erreur à la /rejected rubrique. La réponse d'erreur contient un code et un message d'erreur. Le tableau suivant répertorie les codes d'erreur qui peuvent être renvoyés.

Code d’erreur Récupérable Description
InvalidStateTransition Non La transition de statut demandée n'est pas autorisée. Par exemple, passer de à, mettre SUCCEEDED à jour une IN_PROGRESS exécution initiée par l'appareil. TIMED_OUT
TerminalStateReached Non L'exécution de la commande a déjà atteint un état terminal et ne peut pas être mise à jour.
ResourceNotFound Non L'exécution de la commande spécifiée n'existe pas.
DataConflict Oui L'exécution de la commande a été modifiée simultanément. Cela peut se produire lorsque des mises à jour de statut sont envoyées en succession rapide. Abonnez-vous aux rubriques /accepted et /rejected répondez pour confirmer que chaque mise à jour de statut a été traitée avant d'envoyer la suivante. Pour plus de détails, consultez la section DataConflict erreur sur UpdateCommandExecution.
InternalError Oui Une erreur interne du serveur s’est produite. Réessayez la demande avec un délai d'attente exponentiel.

Voici un exemple de réponse d'erreur publiée sur la /rejected rubrique :

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