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 dans le statut CREATED

Lorsqu'une exécution de commande conserve le CREATED statut et ne passe pas à IN_PROGRESS un autre état, tenez compte des 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 le sujet des demandes de commandes et iot:Publish sur le sujet des réponses aux commandes.

  • Si l'appareil est hors ligne et utilise des sessions persistantes MQTT, la commande attend dans AWS IoT Core. Lorsque l'appareil se reconnecte avant le délai d'expiration de la session persistante 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 exemple, IN_PROGRESS suivies immédiatement parSUCCEEDED).

Pour résoudre ce problème :

  • Abonnez-vous aux rubriques /accepted et /rejected aux réponses 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 en cas d'erreur. DataConflict

Les exécutions de commandes passent inopinément au statut de terminal TIMED_OUT

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 lorsque la commande a été envoyée, 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 système initié par le cloud TIMED_OUT n'est pas un terminal. L'appareil peut toujours mettre à jour l'exécution à l'état du terminal (SUCCEEDEDFAILED,REJECTED, ouTIMED_OUT).

Note

Une commande initiée par un appareil TIMED_OUT est un statut de terminal et aucune autre mise à jour ne peut être apportée à l'exécution de cette commande.

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

Les erreurs liées à la demande UpdateCommandExecution MQTT sont enregistrées dans le groupe de AWSIoTLogsV2 journaux d'Amazon CloudWatch. Pour activer la journalisation et consulter les journaux, consultezConfiguration de la AWS IoT journalisation.

UpdateCommandExecution codes d'erreur

Lorsque la demande UpdateCommandExecution MQTT échoue, le service publie une réponse d'erreur à la /rejected rubrique. La réponse d'erreur contient un code d'erreur et un message. 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 le périphérique. 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 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 aux réponses 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 retard exponentiel.

Voici un exemple de réponse d'erreur publiée dans le /rejected sujet :

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