View a markdown version of this page

Démarrage et surveillance des exécutions de 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.

Démarrage et surveillance des exécutions de commandes

Après avoir créé une commande, lancez une exécution sur le périphérique cible. L'appareil met à jour les résultats et publie le statut dans les rubriques réservées au MQTT. Récupérez et surveillez l'état d'exécution depuis votre compte.

Démarrez et surveillez les commandes à l'aide de AWS IoT la console ou AWS CLI.

Lancer l'exécution d'une commande

Important

Vous êtes seul responsable du déploiement des commandes d'une manière sûre et conforme aux lois applicables.

Avant de commencer une exécution, assurez-vous que :

  • Vous avez créé une commande dans l'espace de AWS IoT noms avec des informations de charge utile. Au démarrage de l'exécution, l'appareil traite les instructions de charge utile et exécute les actions spécifiées. Voir Création d'une ressource de commande pour la création de commandes.

  • Votre appareil s'est abonné aux rubriques réservées aux commandes du MQTT. Au démarrage de l'exécution, les informations de charge utile sont publiées sur cette requête MQTT réservée. Rubrique :

    <devices>peuvent être des clients Things ou MQTT. <DeviceID>est le nom de l'objet ou l'ID client. <PayloadFormat>Valeurs prises en charge : JSON et CBOR. Pour de plus amples informations, veuillez consulter Rubriques relatives aux commandes.

    $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>

    Pour les applications autres que JSON/CBOR<PayloadFormat>, utilisez ce format de rubrique de commandes :

    $aws/commands/<devices>/<DeviceID>/executions/+/request

Spécifiez le périphérique cible qui recevra et exécutera la commande. Utilisez un nom d'objet pour les appareils enregistrés ou un identifiant client pour les appareils non enregistrés. Après avoir reçu la charge utile, l'appareil exécute la commande et exécute les actions spécifiées.

AWS IoT chose

Les appareils cibles peuvent être des objets enregistrés dans le AWS IoT registre. Cela simplifie la recherche et la gestion des appareils.

Enregistrez les appareils en tant qu'objets depuis la page Connect device ou en utilisant CreateThing. Trouvez des objets existants depuis Thing Hub ou en utilisant DescribeThing. Voir Gérer les choses avec le registre pour les détails de l'enregistrement.

ID de client

Pour les appareils non enregistrés, utilisez l'ID client.

L'ID client est un identifiant unique que vous attribuez aux appareils. Défini dans le protocole MQTT, il contient des caractères alphanumériques, des traits de soulignement ou des tirets. Chaque appareil connecté AWS IoT a besoin d'un identifiant client unique.

Note
  • Pour les objets enregistrés, l'ID client peut correspondre au nom de l'objet.

  • Lorsque vous ciblez un ID client spécifique, les appareils doivent se connecter à AWS IoT l'aide de cet ID client pour recevoir la charge utile.

L'ID client est l'ID client MQTT que les appareils utilisent pour se connecter à AWS IoT Core. AWS IoT utilise cet identifiant pour identifier les appareils et gérer les connexions et les abonnements.

Le délai d'expiration indique la durée (en secondes) pendant laquelle les appareils fournissent les résultats d'exécution.

Après avoir créé une exécution, un chronomètre démarre. Si l'appareil se déconnecte ou ne communique pas les résultats dans le délai imparti, le délai d'exécution expire avec le statutTIMED_OUT.

Par défaut : 10 secondes. Maximum : 12 heures

Valeur du délai d'expiration et statut TIMED_OUT d'exécution

Le cloud et l'appareil peuvent signaler un délai d'expiration.

Après avoir envoyé la commande, un chronomètre démarre. Si aucune réponse de l'appareil n'arrive dans le délai imparti, le cloud définit le statut d'exécution sur TIMED_OUT avec le code $NO_RESPONSE_FROM_DEVICE de raison.

Cela se produit lorsque :

  • L'appareil s'est déconnecté pendant l'exécution.

  • Le périphérique n'a pas réussi à terminer l'exécution dans le délai imparti.

  • L'appareil n'a pas pu signaler l'état dans le délai imparti.

Dans ce cas, lorsque l'état d'exécution de TIMED_OUT est signalé depuis le cloud, l'exécution de la commande n'est pas terminale. Votre appareil peut publier une réponse qui remplace le statut par l'un des états du terminal :SUCCEEDED,FAILED, ou. REJECTED L'exécution de la commande devient alors un terminal et n'accepte aucune autre mise à jour.

Votre appareil peut également mettre à jour un TIMED_OUT état initié par le cloud en signalant qu'un délai d'attente s'est produit lors de l'exécution de la commande. Dans ce cas, l'état d'exécution de la commande reste TIMED_OUT activé, mais l'statusReasonobjet est mis à jour en fonction des informations communiquées par le périphérique. L'exécution de la commande devient alors terminale et aucune autre mise à jour n'est acceptée.

Utilisation de sessions persistantes MQTT

Vous pouvez configurer des sessions persistantes MQTT à utiliser avec la fonction de AWS IoT Device Management commandes. Cette fonctionnalité est particulièrement utile lorsque votre appareil est hors ligne et que vous voulez vous assurer que l'appareil reçoit toujours la commande lorsqu'il revient en ligne avant le délai d'expiration, et qu'il exécute les instructions spécifiées.

Par défaut, l’expiration de la session persistante MQTT est définie sur 60 minutes. Si le délai d'exécution de vos commandes est configuré sur une valeur supérieure à cette durée, les exécutions de commandes de plus de 60 minutes peuvent être rejetées par le courtier de messages et échouer. Pour exécuter des commandes d’une durée supérieure à 60 minutes, vous pouvez demander une augmentation de la durée d’expiration de la session persistante.

Note

Pour vous assurer que vous utilisez correctement la fonctionnalité de sessions persistantes MQTT, réglez l'indicateur Clean Start sur zéro. Pour plus d’informations, consultez Sessions persistantes MQTT.

Pour commencer à exécuter la commande depuis la console, rendez-vous sur la page Command Hub de la AWS IoT console et effectuez les étapes suivantes.

  1. Pour exécuter la commande que vous avez créée, choisissez Exécuter la commande.

  2. Passez en revue les informations relatives à la commande que vous avez créée, y compris les rubriques réservées au MQTT et les paramètres, le cas échéant.

    Pour les commandes dynamiques, entrez les valeurs des paramètres ou conservez-les par défaut. Pour les paramètres qui n'ont pas de valeur par défaut, vous devez fournir une valeur à envoyer dans le cadre de cette exécution.

  3. Spécifiez le périphérique cible qui recevra et exécutera la commande. L'appareil peut être spécifié comme n'importe AWS IoT quel objet s'il a été enregistré AWS IoT, ou en utilisant l'ID client si votre appareil n'a pas encore été enregistré. Pour de plus amples informations, consultez Considérations relatives à l'appareil cible.

  4. (Facultatif) Configurez une valeur de délai d'expiration pour la commande qui détermine la durée pendant laquelle vous souhaitez que la commande s'exécute avant son expiration. Si votre commande doit s'exécuter pendant plus de 60 minutes, vous devrez peut-être augmenter le délai d'expiration des sessions persistantes MQTT. Pour de plus amples informations, veuillez consulter Considérations relatives au délai d'exécution des commandes.

  5. Sélectionnez Run Command (Exécuter la commande).

Utilisez l'opération d'API du plan de données StartCommandExecutionHTTP pour démarrer l'exécution d'une commande. La demande et la réponse de l'API sont corrélées par l'ID d'exécution de la commande. Une fois que l'appareil a terminé d'exécuter la commande, il peut signaler l'état et le résultat de l'exécution au cloud en publiant un message dans la rubrique de réponse aux commandes. Pour un code de réponse personnalisé, les codes d'application que vous possédez peuvent traiter le message de réponse et publier le résultat sur AWS IoT.

Si vos appareils se sont abonnés à la rubrique de demande de commandes, l'StartCommandExecutionAPI publiera le message de charge utile dans cette rubrique. La charge utile peut utiliser n'importe quel format de votre choix. Pour de plus amples informations, veuillez consulter Charge utile de commande.

$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>

Si le format de charge utile n'est pas JSON ou CBOR, le tableau suivant indique le format de la rubrique de demande de commandes.

$aws/commands/<devices>/<DeviceID>/executions/+/request

Exemple de politique IAM

Avant d'utiliser cette opération d'API, assurez-vous que votre politique IAM vous autorise à effectuer cette action sur l'appareil. L'exemple suivant montre une politique IAM qui autorise l'utilisateur à effectuer l'StartCommandExecutionaction.

Dans cet exemple, remplacez :

  • regionavec votre Région AWS, par exempleus-east-1.

  • account-idavec votre Compte AWS numéro, par exemple123456789012.

  • command-idavec un identifiant unique pour votre AWS IoT commande, tel queLockDoor. Si vous souhaitez envoyer plusieurs commandes, vous pouvez les spécifier dans la politique IAM.

  • devicesavec l'un thing ou l'autre ou client selon que vos appareils ont été enregistrés en tant qu' AWS IoT objets ou sont spécifiés en tant que clients MQTT.

  • device-idavec votre AWS IoT thing-name orclient-id.

{ "Effect": "Allow", "Action": [ "iot:StartCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

Pour consulter la liste des clés de condition prises en chargeStartCommandExecution, consultez la section Clés de condition pour AWS IoT dans le guide de l'utilisateur IAM.

Obtenir le point de terminaison du plan de données spécifique au compte

Avant d'exécuter la commande API, vous devez obtenir l'URL du point de terminaison spécifique au compte pour le point de terminaison. Si vous utilisez des points de terminaison à double pile (IPv4et IPv6), utilisez le. iot:Data-ATS Le iot:Jobs point de terminaison est destiné IPv4 uniquement. Par exemple, si vous exécutez la commande suivante :

aws iot describe-endpoint --endpoint-type iot:Data-ATS

Il renvoie l'URL du point de terminaison spécifique au compte, comme indiqué dans l'exemple de réponse ci-dessous.

{ "endpointAddress": "<account-specific-prefix>-ats.iot.<region>.api.com" }

Démarrer un exemple d'exécution de commande (AWS CLI)

L'exemple suivant montre comment démarrer l'exécution d'une commande à l'aide de cette start-command-execution AWS CLI commande.

Dans cet exemple, remplacez :

  • <command-arn>avec l'ARN de la commande que vous souhaitez exécuter. Vous pouvez obtenir ces informations à partir de la réponse de la commande create-command CLI. Par exemple, si vous exécutez la commande pour changer le mode volant, utilisezarn:aws:iot:region:account-id:command/SetComfortSteeringMode.

  • <target-arn>avec le Thing ARN de l'appareil cible, qui peut être un objet IoT ou un client MQTT, pour lequel vous souhaitez exécuter la commande. Par exemple, si vous exécutez la commande pour le périphérique ciblemyRegisteredThing, utilisezarn:aws:iot:region:account-id:thing/myRegisteredThing.

  • <endpoint-url>avec le point de terminaison spécifique au compte dans lequel vous l'avez obtenuObtenir le point de terminaison du plan de données spécifique au compte, préfixé par. https:// Par exemple, https://123456789012abcd.jobs.iot.us-east-1.amazonaws.com.

  • (Facultatif) Vous pouvez également spécifier un paramètre supplémentaire lors de l'exécution de l'opération StartCommandExecution d'API. executionTimeoutSeconds Ce champ facultatif indique le délai en secondes pendant lequel le périphérique doit terminer l'exécution de la commande. Par défaut, la valeur est de 10 secondes. Lorsque le statut d'exécution de la commande est CREATED défini, un temporisateur démarre. Si le résultat de l'exécution de la commande n'est pas reçu avant l'expiration du délai, le statut passe automatiquement àTIMED_OUT.

  • aws iot-jobs-data start-command-execution \ --command-arn <command-arn> \ --target-arn <target-arn> \ --endpoint <endpoint-url> \ --execution-timeout-seconds 900
  • (Facultatif) Pour les commandes dynamiques, spécifiez les paramètres et leurs valeurs à utiliser pour la substitution. Vous devez fournir une valeur pour les paramètres pour lesquels aucune DefaultValue n'est définie lors de la création de la commande. Si un paramètre possède une DefaultValue, la valeur du paramètre fournie ici est prioritaire. Pour les paramètres pour lesquels ValueConditions est définie, la valeur du paramètre fournie ici doit satisfaire à la condition.

    Sur la base d'Light_Power_Statusun exemple de commande dynamique :

  • aws iot-jobs-data start-command-execution \ --command-arn arn:aws:iot:us-east-1:123456789012:command/Light_Power_Status \ --target-arn arn:aws:iot:us-east-1:123456789012:thing/exampleThing \ --endpoint <endpoint-url> \ --execution-timeout-seconds 900 \ --parameters "powerStatus={S=ON}"

L'exécution de cette commande renvoie un ID d'exécution de commande. Vous pouvez utiliser cet ID pour demander le statut, les détails et l'historique de l'exécution des commandes.

Note

Si la commande est obsolète, la demande d'StartCommandExecutionAPI échouera avec une exception de validation. Pour corriger cette erreur, restaurez d'abord la commande à l'aide de l'UpdateCommandAPI, puis exécutez la StartCommandExecution demande.

{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }

Mise à jour du résultat de l’exécution d’une commande

Utilisez l'opération d'API du plan de données UpdateCommandExecution MQTT pour mettre à jour le statut ou le résultat d'une exécution de commande.

Note

Avant d'utiliser cette API :

  • Votre appareil doit avoir établi une connexion MQTT et être abonné aux rubriques de demande et de réponse des commandes. Pour de plus amples informations, veuillez consulter Workflow de commandes de haut niveau.

  • Vous devez déjà avoir exécuté cette commande à l'aide de l'opération StartCommandExecution API.

Avant d'utiliser cette opération d'API, assurez-vous que votre politique IAM autorise votre appareil à effectuer ces actions. Vous trouverez ci-dessous un exemple de politique qui autorise votre appareil à effectuer cette action. Pour d'autres exemples de politiques IAM autorisant l'utilisateur à effectuer l'action UpdateCommandExecution MQTT, consultez. Exemples de stratégies de connexion et de publication

Dans cet exemple, remplacez :

  • Regionavec votre Région AWS, par exempleus-east-1.

  • AccountIDavec votre Compte AWS numéro, par exemple123456789012.

  • ThingNameavec le nom de l' AWS IoT objet pour lequel vous ciblez l'exécution de la commande, par exemplemyRegisteredThing.

  • commands-request-topicet commands-response-topic avec les noms des sujets de demande et de réponse de vos AWS IoT commandes. Pour de plus amples informations, veuillez consulter Workflow de commandes de haut niveau.

Exemple de politique IAM pour l'ID client MQTT

Le code suivant montre un exemple de politique de périphérique lors de l'utilisation de l'ID client MQTT.

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/json" ] }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }

Exemple de politique IAM pour l'IoT

Le code suivant montre un exemple de politique en matière d'appareil lors de l'utilisation d'un AWS IoT objet.

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }

Une fois que l'exécution de la commande est reçue sur le sujet de la demande, le dispositif traite la commande. Il utilise ensuite l'UpdateCommandExecutionAPI pour mettre à jour l'état et le résultat de l'exécution de la commande en fonction de la rubrique de réponse suivante.

$aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>

Dans cet exemple, <DeviceID> il s'agit de l'identifiant unique de votre équipement cible et <execution-id> de l'identifiant de l'exécution de la commande sur le périphérique cible. Il <PayloadFormat> peut s'agir de JSON ou de CBOR.

Note

Si vous n'avez pas enregistré votre appareil AWS IoT, vous pouvez utiliser l'identifiant client comme identifiant au lieu d'un nom d'objet.

$aws/commands/clients/<ClientID>/executions/<ExecutionId>/response/<PayloadFormat>

L'appareil a signalé des mises à jour de l'état d'exécution

Vos appareils peuvent utiliser l'API pour signaler l'une des mises à jour de statut suivantes lors de l'exécution de la commande. Pour plus d'informations sur ces statuts, consultezStatut d’exécution de la commande.

  • IN_PROGRESS: Lorsque l'appareil commence à exécuter la commande, il peut mettre à jour l'état àIN_PROGRESS.

  • SUCCEEDED: Lorsque l'appareil traite avec succès la commande et termine son exécution, il peut publier un message dans le sujet de réponse sous le nom deSUCCEEDED.

  • FAILED: Si l'appareil n'a pas réussi à exécuter la commande, il peut publier un message dans le sujet de réponse sous le nomFAILED.

  • REJECTED: Si l'appareil n'accepte pas la commande, il peut publier un message dans le sujet de réponse en tant queREJECTED.

  • TIMED_OUT: L'état d'exécution de la commande peut changer pour TIMED_OUT l'une des raisons suivantes.

    • Le résultat de l'exécution de la commande n'a pas été reçu. Cela peut se produire parce que l'exécution n'a pas été terminée dans le délai spécifié ou si l'appareil n'a pas publié les informations d'état dans le sujet de réponse.

    • L'appareil signale qu'un délai d'attente s'est produit lors de la tentative d'exécution de la commande.

Pour plus d'informations sur le TIMED_OUT statut, consultezValeur du délai d'expiration et statut TIMED_OUT d'exécution.

Considérations relatives à l'utilisation de l'UpdateCommandExecutionAPI

Voici quelques points importants à prendre en compte lors de l'utilisation de l'UpdateCommandExecutionAPI.

  • Vos appareils peuvent utiliser un statusReason objet facultatif pour fournir des informations supplémentaires sur l'exécution. Si vos appareils fournissent cet objet, le reasonCode champ de l'objet est obligatoire, mais le reasonDescription champ est facultatif.

  • Lorsque vos appareils utilisent l'statusReasonobjet, ils reasonCode doivent utiliser le modèle [A-Z0-9_-]+ et ne pas dépasser 64 caractères. Si vous fournissez lereasonDescription, assurez-vous qu'il ne dépasse pas 1 024 caractères. Il peut utiliser n'importe quel caractère à l'exception des caractères de contrôle tels que les nouvelles lignes.

  • Vos appareils peuvent utiliser un result objet facultatif pour fournir des informations sur le résultat de l'exécution de la commande, telles que la valeur de retour d'un appel de fonction à distance. Si vous le fournissezresult, il doit nécessiter au moins une entrée.

  • Dans le result champ, vous spécifiez les entrées sous forme de paires clé-valeur. Pour chaque entrée, vous devez spécifier les informations de type de données sous forme de chaîne, de booléen ou de binaire. Un type de données chaîne doit utiliser la clés, un type de données booléen utilise la clé b et un type de données binaire doit utiliser la clé. bin Assurez-vous que ces touches sont en minuscules.

  • Si vous rencontrez une erreur lors de l'exécution de l'UpdateCommandExecutionAPI, vous pouvez consulter l'erreur dans le groupe de AWSIoTLogsV2 journaux d'Amazon CloudWatch. Pour plus d'informations sur l'activation de la journalisation et l'affichage des journaux, consultezConfiguration de la AWS IoT journalisation.

UpdateCommandExecutionExemple d'API

Le code suivant montre comment votre appareil peut utiliser l'UpdateCommandExecutionAPI pour signaler l'état d'exécution, le statusReason champ pour fournir des informations supplémentaires sur l'état et le champ de résultat pour fournir des informations sur le résultat de l'exécution, comme le pourcentage de batterie de la voiture dans ce cas.

{ "status": "IN_PROGRESS", "statusReason": { "reasonCode": "200", "reasonDescription": "Execution_in_progress" }, "result": { "car_battery": { "s": "car battery at 50 percent" } } }

Récupérer l'exécution d'une commande

Après avoir exécuté une commande, vous pouvez récupérer des informations sur l'exécution de la commande à partir de la AWS IoT console et à l'aide du AWS CLI. Vous pouvez obtenir les informations suivantes.

Note

Pour récupérer le dernier statut d'exécution des commandes, votre appareil doit publier les informations d'état dans la rubrique de réponse à l'aide de l'API UpdateCommandExecution MQTT, comme décrit ci-dessous. Jusqu'à ce que l'appareil publie sur cette rubrique, l'GetCommandExecutionAPI signalera l'état sous la forme CREATED ouTIMED_OUT.

Chaque exécution de commande que vous créez a :

  • Un ID d’exécution, qui est l’identifiant unique d’exécution de la commande.

  • Le statut de l’exécution de la commande. Lorsque vous exécutez la commande sur l’appareil cible, elle passe à l’état CREATED. EIle peut ensuite passer à d’autres statuts d’exécution de commande, comme décrit ci-dessous.

  • Le résultat de l'exécution de la commande.

  • L’ID de commande unique et l’appareil cible pour lequel les exécutions ont été créées.

  • La Date de début, qui indique l’heure à laquelle l’exécution de la commande a été créée.

Vous pouvez récupérer une exécution de commande depuis la console à l'aide de l'une des méthodes suivantes.

  • Depuis la page Command Hub

    Accédez à la page Command Hub de la AWS IoT console et effectuez ces étapes.

    1. Choisissez la commande pour laquelle vous avez créé une exécution sur le périphérique cible.

    2. Sur la page des détails des commandes, sous l'onglet Historique des commandes, vous pouvez voir les exécutions que vous avez créées. Choisissez l'exécution pour laquelle vous souhaitez récupérer des informations.

    3. Si vos appareils ont utilisé l'UpdateCommandExecutionAPI pour fournir les informations relatives aux résultats, vous pouvez les trouver dans l'onglet Résultats de cette page.

  • Depuis la page du hub Thing

    Si vous avez choisi un AWS IoT objet comme équipement cible lors de l'exécution de la commande, vous pouvez consulter les détails de l'exécution sur la page du hub d'objets.

    1. Accédez à la page Thing Hub de la AWS IoT console et choisissez l'objet pour lequel vous avez créé l'exécution de la commande.

    2. Dans la page des détails de l'objet, dans l'historique des commandes, vous pouvez voir les exécutions que vous avez créées. Choisissez l'exécution pour laquelle vous souhaitez récupérer des informations.

    3. Si vos appareils ont utilisé l'UpdateCommandExecutionAPI pour fournir les informations relatives aux résultats, vous pouvez les trouver dans l'onglet Résultats de cette page.

Utilisez l'opération d'API HTTP du plan de GetCommandExecution AWS IoT Core contrôle pour récupérer les informations relatives à l'exécution d'une commande. Vous devez déjà avoir exécuté cette commande à l'aide de l'opération StartCommandExecution API.

Exemple de politique IAM

Avant d'utiliser cette opération d'API, assurez-vous que votre politique IAM vous autorise à effectuer cette action sur l'appareil. L'exemple suivant montre une politique IAM qui autorise l'utilisateur à effectuer l'GetCommandExecutionaction.

Dans cet exemple, remplacez :

  • regionavec votre Région AWS, par exempleus-east-1.

  • account-idavec votre Compte AWS numéro, par exemple123456789012.

  • command-idavec votre identifiant de AWS IoT commande unique, tel queLockDoor.

  • devicesavec l'un thing ou l'autre ou client selon que vos appareils ont été enregistrés en tant qu' AWS IoT objets ou sont spécifiés en tant que clients MQTT.

  • device-idavec votre AWS IoT thing-name orclient-id.

{ "Effect": "Allow", "Action": [ "iot:GetCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

Récupérer un exemple d'exécution de commande

L'exemple suivant montre comment récupérer des informations sur une commande exécutée à l'aide de cette start-command-execution AWS CLI commande. L'exemple suivant montre comment récupérer des informations sur une commande exécutée pour désactiver le mode volant.

Dans cet exemple, remplacez :

  • <execution-id>avec l'identifiant de l'exécution de la commande pour laquelle vous souhaitez récupérer des informations.

  • <target-arn>avec le numéro de ressource Amazon (ARN) de l'appareil pour lequel vous ciblez l'exécution. Vous pouvez obtenir ces informations à partir de la réponse de la commande start-command-execution CLI.

  • Facultativement, si vos appareils ont utilisé l'UpdateCommandExectionAPI pour fournir le résultat de l'exécution, vous pouvez spécifier s'il convient d'inclure le résultat de l'exécution de la commande dans la réponse de l'GetCommandExecutionAPI à l'aide de l'GetCommandExecutionAPI.

aws iot get-command-execution --execution-id <execution-id> \ --target-arn <target-arn> \ --include-result

L'exécution de cette commande génère une réponse contenant des informations sur l'ARN de l'exécution de la commande, son état d'exécution, ainsi que l'heure à laquelle elle a commencé à s'exécuter et à laquelle elle s'est terminée. Il fournit également un statusReason objet contenant des informations supplémentaires sur le statut. Pour plus d'informations sur les différents statuts et la raison du statut, consultezStatut d’exécution de la commande.

Le code suivant montre un exemple de réponse à la demande d'API.

Note

Le completedAt champ de la réponse d'exécution correspond au moment où l'appareil signale l'état du terminal au cloud. En cas d'TIMED_OUTétat, ce champ ne sera défini que lorsque l'appareil signalera un délai d'expiration. Lorsque le TIMED_OUT statut est défini par le cloud, il n'est pas mis à jour. TIMED_OUT Pour plus d'informations sur le comportement en cas de temporisation, consultezConsidérations relatives au délai d'exécution des commandes.

{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "commandArn": "arn:aws:iot:us-east-1:123456789012:command/LockDoor", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/myRegisteredThing", "status": "SUCCEEDED", "statusReason": { "reasonCode": "DEVICE_SUCCESSFULLY_EXECUTED", "reasonDescription": "SUCCESS" }, "result": { "sn": { "s": "ABC-001" }, "digital": { "b": true } }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "completedAt": "2024-03-23T00:50:10.095000-07:00" }

Affichage des mises à jour des commandes à l'aide du client de test MQTT

Vous pouvez utiliser le client de test MQTT pour visualiser l'échange de messages via MQTT lorsque vous utilisez la fonction de commandes. Une fois que votre appareil a établi une connexion MQTT avec AWS IoT, vous pouvez créer une commande, spécifier la charge utile, puis l'exécuter sur l'appareil. Lorsque vous exécutez la commande, si votre appareil est abonné à la rubrique des requêtes réservées MQTT pour les commandes, il voit le message de charge utile publié dans cette rubrique.

Le dispositif reçoit ensuite les instructions de charge utile et exécute les opérations spécifiées sur le AWS IoT dispositif. Il utilise ensuite l'UpdateCommandExecutionAPI pour publier le résultat de l'exécution des commandes et les informations d'état dans les rubriques de réponse réservées aux commandes du MQTT. AWS IoT Device Management écoute les mises à jour sur les sujets de réponse, stocke les informations mises à jour et publie des journaux sur Amazon AWS CloudTrail et sur Amazon CloudWatch. Vous pouvez ensuite récupérer les dernières informations d'exécution des commandes depuis la console ou à l'aide de l'GetCommandExecutionAPI.

Les étapes suivantes montrent comment utiliser le client de test MQTT pour observer les messages.

  1. Ouvrez le client de test MQTT dans la AWS IoT console.

  2. Dans l'onglet S'abonner, entrez le sujet suivant, puis choisissez S'abonner, où se <thingId> trouve le nom de l'appareil avec lequel vous vous êtes enregistré AWS IoT.

    Note

    Vous trouverez le nom de votre appareil sur la page Thing Hub de la AWS IoT console. Si vous n'avez pas enregistré votre appareil en tant qu'objet, vous pouvez l'enregistrer lors de la connexion AWS IoT depuis la page Connect device.

    $aws/commands/things/<thingId>/executions/+/request
  3. (Facultatif) Dans l'onglet S'abonner, vous pouvez également saisir les sujets suivants et choisir S'abonner.

    $aws/commands/things/+/executions/+/response/accepted/json $aws/commands/things/+/executions/+/response/rejected/json
  4. Lorsque vous lancez l'exécution d'une commande, la charge utile du message est envoyée à l'appareil en utilisant le sujet de demande auquel l'appareil s'est abonné,$aws/commands/things/<thingId>/executions/+/request. Dans le client de test MQTT, vous devriez voir la charge utile de commande contenant les instructions permettant au périphérique de traiter la commande.

  5. Une fois que le périphérique a commencé à exécuter la commande, il peut publier des mises à jour de statut dans la rubrique de réponse réservée MQTT suivante pour les commandes.

    $aws/commands/<devices>/<device-id>/executions/<executionId>/response/json

    Par exemple, considérez une commande que vous avez exécutée pour allumer le climatiseur de votre voiture afin de réduire la température à la valeur souhaitée. Le JSON suivant montre un exemple de message publié par le véhicule dans le sujet de réponse qui indique qu'il n'a pas réussi à exécuter la commande.

    { "deviceId": "My_Car", "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "status": "FAILED", "statusReason": { "reasonCode": "CAR_LOW_ON_BATTERY", "reasonDescription": "Car battery is lower than 5 percent" } }

    Dans ce cas, vous pouvez charger la batterie de votre voiture, puis exécuter à nouveau la commande.

Répertoriez les exécutions de commandes dans votre Compte AWS

Après avoir exécuté une commande, vous pouvez récupérer des informations sur l'exécution de la commande à partir de la AWS IoT console et à l'aide du AWS CLI. Vous pouvez obtenir les informations suivantes.

  • Un ID d’exécution, qui est l’identifiant unique d’exécution de la commande.

  • Le statut de l’exécution de la commande. Lorsque vous exécutez la commande sur l’appareil cible, elle passe à l’état CREATED. EIle peut ensuite passer à d’autres statuts d’exécution de commande, comme décrit ci-dessous.

  • L’ID de commande unique et l’appareil cible pour lequel les exécutions ont été créées.

  • La Date de début, qui indique l’heure à laquelle l’exécution de la commande a été créée.

Vous pouvez voir toutes les exécutions de commandes depuis la console à l'aide de l'une des méthodes suivantes.

  • Depuis la page Command Hub

    Accédez à la page Command Hub de la AWS IoT console et effectuez ces étapes.

    1. Choisissez la commande pour laquelle vous avez créé une exécution sur le périphérique cible.

    2. Sur la page des détails de la commande, accédez à l'onglet Historique des commandes et vous verrez la liste des exécutions que vous avez créées.

  • Depuis la page du hub Thing

    Si vous avez choisi un AWS IoT objet comme équipement cible lors de l'exécution de la commande et que vous avez créé plusieurs exécutions de commandes pour un seul appareil, vous pouvez consulter les exécutions de cet appareil sur la page du hub d'objets.

    1. Accédez à la page Thing Hub de la AWS IoT console et choisissez l'objet pour lequel vous avez créé les exécutions.

    2. Sur la page des détails de l'objet, dans l'historique des commandes, vous pouvez voir la liste des exécutions que vous avez créées pour l'appareil.

Utilisez l'opération d'API HTTP du plan de ListCommandExecutions AWS IoT Core contrôle pour répertorier toutes les exécutions de commandes dans votre compte.

Exemple de politique IAM

Avant d'utiliser cette opération d'API, assurez-vous que votre politique IAM vous autorise à effectuer cette action sur l'appareil. L'exemple suivant montre une politique IAM qui autorise l'utilisateur à effectuer l'ListCommandExecutionsaction.

Dans cet exemple, remplacez :

  • regionavec votre Région AWS, par exempleus-east-1.

  • account-idavec votre Compte AWS numéro, par exemple123456789012.

  • command-idavec votre identifiant de AWS IoT commande unique, tel queLockDoor.

{ "Effect": "Allow", "Action": "iot:ListCommandExecutions", "Resource": * }

Exemple d'exécution de commandes de liste

L'exemple suivant vous montre comment répertorier les exécutions de commandes dans votre Compte AWS.

Lorsque vous exécutez la commande, vous devez spécifier s'il faut filtrer la liste pour afficher uniquement les exécutions de commandes créées pour un appareil particulier à l'aide detargetArn, ou les exécutions pour une commande spécifique spécifiée à l'aide ducommandArn.

Dans cet exemple, remplacez :

  • <target-arn>avec le numéro de ressource Amazon (ARN) de l'appareil pour lequel vous ciblez l'exécution, tel quearn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f.

  • <target-arn>avec le numéro de ressource Amazon (ARN) de l'appareil pour lequel vous ciblez l'exécution, tel quearn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f.

  • <after>avec le délai après lequel vous souhaitez répertorier les exécutions créées, par exemple,2024-11-01T03:00.

aws iot list-command-executions \ --target-arn <target-arn> \ --started-time-filter '{after=<after>}' \ --sort-order "ASCENDING"

L'exécution de cette commande génère une réponse qui contient une liste des exécutions de commandes que vous avez créées, ainsi que l'heure à laquelle les exécutions ont commencé à s'exécuter et à laquelle elles se sont terminées. Il fournit également des informations sur le statut, ainsi que l'statusReasonobjet qui contient des informations supplémentaires sur le statut.

{ "commandExecutions": [ { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "b2b654ca-1a71-427f-9669-e74ae9d92d24", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "TIMED_OUT", "createdAt": "2024-11-24T14:39:25.791000-08:00", "startedAt": "2024-11-24T14:39:25.791000-08:00" }, { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "34bf015f-ef0f-4453-acd0-9cca2d42a48f", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "IN_PROGRESS", "createdAt": "2024-11-24T14:05:36.021000-08:00", "startedAt": "2024-11-24T14:05:36.021000-08:00" } ] }

Pour plus d'informations sur les différents statuts et la raison du statut, consultezStatut d’exécution de la commande.

Supprimer l'exécution d'une commande

Si vous ne souhaitez plus utiliser l'exécution d'une commande, vous pouvez la supprimer définitivement de votre compte.

Note
  • L'exécution d'une commande ne peut être supprimée que si elle est entrée dans un statut de terminalSUCCEEDED, tel queFAILED, ouREJECTED.

  • Cette opération ne peut être effectuée qu'à l'aide de l' AWS IoT Core API ou du AWS CLI. Il n'est pas disponible depuis la console.

Avant d'utiliser cette opération d'API, assurez-vous que votre politique IAM autorise votre appareil à effectuer ces actions. Vous trouverez ci-dessous un exemple de politique qui autorise votre appareil à effectuer cette action.

Dans cet exemple, remplacez :

  • Regionavec votre Région AWS, par exempleus-east-1.

  • AccountIDavec votre Compte AWS numéro, par exemple123456789012.

  • CommandIDavec l'identifiant de la commande dont vous souhaitez supprimer l'exécution.

  • devicesavec l'un thing ou l'autre ou client selon que vos appareils ont été enregistrés en tant qu' AWS IoT objets ou sont spécifiés en tant que clients MQTT.

  • device-idavec votre AWS IoT thing-name orclient-id.

{ "Effect": "Allow", "Action": [ "iot:DeleteCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

L'exemple suivant montre comment supprimer une commande à l'aide de cette delete-command AWS CLI commande. En fonction de votre application, remplacez-le <execution-id> par l'identifiant de l'exécution de la commande que vous supprimez, puis <target-arn> par l'ARN de votre appareil cible.

aws iot delete-command-execution \ --execution-id <execution-id> \ --target-arn <target-arn>

Si la demande d'API aboutit, l'exécution de la commande génère un code d'état de 200. Vous pouvez utiliser l'GetCommandExecutionAPI pour vérifier que l'exécution de la commande n'existe plus dans votre compte.