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 l'appareil cible. L'appareil met à jour les résultats et publie le statut dans les rubriques réservées MQTT. Récupérez et surveillez l'état d'exécution depuis votre compte.
Démarrez et contrôlez les commandes à l'aide de la AWS IoT console ou AWS CLI.
Démarrez et surveillez les opérations relatives aux commandes
Lancer l'exécution d'une commande
Important
Vous êtes seul responsable du déploiement des commandes de manière sûre et conforme aux lois applicables.
Avant de démarrer une exécution, assurez-vous que :
-
Vous avez créé une commande dans l' AWS IoT espace de noms avec les informations de charge utile. Lors du démarrage d'Execution, l'appareil traite les instructions de charge utile et exécute les actions spécifiées. Voir Création d'une ressource de commande Création de commandes.
-
Votre appareil est abonné à MQTT, Rubriques réservées pour les commandes. Lors du démarrage de l'exécution, les informations de charge utile sont publiées dans cette requête MQTT réservée. Sujet :
<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 autres JSON/CBOR
<PayloadFormat>, utilisez ce format de rubrique de commandes :$aws/commands/<devices>/<DeviceID>/executions/+/request
Spécifiez le périphérique cible pour recevoir et exécuter la commande. Utilisez un nom d'objet pour les appareils enregistrés ou un ID 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 thing
Les appareils cibles peuvent être des objets enregistrés dans le AWS IoT registre. Les choses simplifient la recherche et la gestion des appareils.
Enregistrez les appareils en tant qu'objets depuis la page Connecter les appareils CreateThing. Trouvez des objets existants sur Thing Hub DescribeThing. Consultez la section Gestion des données avec le registre pour plus de détails sur l'inscription.
ID 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 qui se connecte 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'attente spécifie la durée (en secondes) pendant laquelle les appareils fournissent les résultats d'exécution.
Après avoir créé une exécution, un minuteur démarre. Si l'appareil se déconnecte ou ne communique pas les résultats dans le délai imparti, l'exécution expire avec l'étatTIMED_OUT.
Par défaut : 10 secondes. Maximum : 12 heures.
Valeur du délai d'attente et état d'exécution de TIMED_OUT
Le cloud et l'appareil peuvent signaler un délai d'expiration.
Après l'envoi de 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 l'état 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.
-
L'appareil n'a pas pu terminer l'exécution dans le délai imparti.
-
L'appareil n'a pas pu signaler son é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 : SUCCEEDEDFAILED, 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 statut 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 zéro, 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 des sessions persistantes MQTT
Vous pouvez configurer des sessions persistantes MQTT à utiliser avec la fonctionnalité de AWS IoT Device Management commandes. Cette fonctionnalité est particulièrement utile dans les cas où votre appareil est hors ligne et que vous voulez vous assurer que l'appareil reçoit toujours la commande lorsqu'il se reconnecte avant la durée du 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, accédez à la page
-
Pour exécuter la commande que vous avez créée, choisissez Exécuter la commande.
-
Consultez 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 avec les valeurs 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.
-
Spécifiez le périphérique cible pour recevoir et exécuter la commande. L'appareil peut être spécifié comme AWS IoT quelque chose s'il a été enregistré auprès de 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.
-
(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 être exécutée 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.
-
Sélectionnez Run Command (Exécuter la commande).
Utilisez l'opération d'API du plan de données StartCommandExecution HTTP 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 fini 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 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 le 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, voici 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 :
-
avec votre Région AWS, par exempleregionus-east-1. -
avec votre Compte AWS numéro, par exempleaccount-id.123456789012 -
avec un identifiant unique pour votre AWS IoT commande, tel quecommand-id. Si vous souhaitez envoyer plusieurs commandes, vous pouvez les spécifier dans la politique IAM.LockDoor -
avecdevicesthingouclientselon que vos appareils ont été enregistrés en tant qu' AWS IoT objets ou qu'ils sont spécifiés en tant que clients MQTT. -
avec votre AWS IoTdevice-idthing-nameouclient-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 (IPv4 et 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émarrez 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 :
-
avec l'ARN de la commande que vous souhaitez exécuter. Vous pouvez obtenir ces informations à partir de la réponse de la commande<command-arn>create-commandCLI. Par exemple, si vous exécutez la commande pour changer le mode du volant, utilisezarn:aws:iot:.region:account-id:command/SetComfortSteeringMode -
avec l'ARN Thing pour le périphérique 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 l'équipement cible<target-arn>myRegisteredThing, utilisezarn:aws:iot:.region:account-id:thing/myRegisteredThing -
avec le point de terminaison spécifique au compte que vous avez obtenu dansObtenir le point de terminaison du plan de données spécifique au compte, préfixé par.<endpoint-url>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
StartCommandExecutiond'API.executionTimeoutSecondsCe 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 l'état d'exécution de la commande estCREATEDdéfini, un minuteur démarre. Si le résultat de l'exécution de la commande n'est pas reçu avant l'expiration du temporisateur, 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-seconds900 -
(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 valeur par défaut n'a été définie lors de la création de la commande. Si un paramètre possède une valeur par défaut, la valeur de paramètre fournie ici est prioritaire. Pour les paramètres pour lesquels ValueConditions est définie, la valeur de 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-arnarn:aws:iot:us-east-1:123456789012:command/Light_Power_Status\ --target-arnarn:aws:iot:us-east-1:123456789012:thing/exampleThing\ --endpoint<endpoint-url>\ --execution-timeout-seconds900\ --parameters"powerStatus={S=ON}"
L'exécution de cette commande renvoie un ID d'exécution de commande. Vous pouvez utiliser cet ID pour interroger l'état d'exécution des commandes, les détails et l'historique des exécutions 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 l'état ou le résultat de l'exécution d'une 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 High-level flux de travail des commandes.
-
Vous devez déjà avoir exécuté cette commande à l'aide de l'opération
StartCommandExecutionAPI.
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 qui autorisent l'utilisateur à effectuer l'action UpdateCommandExecution MQTT, consultez. Exemples de stratégies de connexion et de publication
Dans cet exemple, remplacez :
-
avec votre Région AWS, par exempleRegionus-east-1. -
avec votre Compte AWS numéro, par exempleAccountID.123456789012 -
avec le nom de l' AWS IoT objet pour lequel vous ciblez l'exécution de la commande, par exempleThingName.myRegisteredThing -
etcommands-request-topicavec les noms des sujets de demande et de réponse de vos AWS IoT commandes. Pour de plus amples informations, veuillez consulter High-level flux de travail des commandes.commands-response-topic
Exemple de politique IAM pour l'ID client MQTT
Le code suivant présente un exemple de politique d'appareil 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 les objets connectés
Le code suivant montre un exemple de politique d'appareil lors de l'utilisation de AWS IoT quelque chose.
-
{ "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 a été reçue dans la rubrique de la demande, le périphérique 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, il s'agit de l'identifiant unique de votre machine cible et <DeviceID> de l'identifiant de l'exécution de la commande sur la machine cible. Il <execution-id><PayloadFormat> peut s'agir de JSON ou de CBOR.
Note
Si vous n'avez pas enregistré votre appareil auprès de AWS IoT, vous pouvez utiliser l'ID 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 concernant 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 surIN_PROGRESS. -
SUCCEEDED: Lorsque l'appareil traite correctement la commande et termine de l'exécuter, il peut publier un message dans la rubrique de réponse sous la formeSUCCEEDED. -
FAILED: Si l'appareil n'a pas réussi à exécuter la commande, il peut publier un message dans la rubrique de réponse sous la formeFAILED. -
REJECTED: Si l'appareil n'accepte pas la commande, il peut publier un message dans la rubrique de réponse en tant queREJECTED. -
TIMED_OUT: L'état d'exécution de la commande peut changerTIMED_OUTpour 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 la rubrique 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'attente et état d'exécution de TIMED_OUT.
Considérations relatives à l'utilisation de l'UpdateCommandExecutionAPI
Voici quelques considérations importantes à prendre en compte lors de l'utilisation de l'UpdateCommandExecutionAPI.
-
Vos appareils peuvent utiliser un
statusReasonobjet facultatif pour fournir des informations supplémentaires sur l'exécution. Si vos appareils fournissent cet objet, lereasonCodechamp de l'objet est obligatoire, mais il est facultatif.reasonDescription -
Lorsque vos appareils utilisent l'
statusReasonobjet, celui-cireasonCodedoit 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 tous les caractères, à l'exception des caractères de contrôle tels que les sauts de ligne. -
Vos appareils peuvent utiliser un
resultobjet 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 distant. Si vous fournissez leresult, il doit nécessiter au moins une entrée. -
Dans le
resultchamp, 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 de chaîne doit utiliser la clés, un type de données booléen utilise la clébet un type de données binaire doit utiliser la clé.binAssurez-vous que ces touches sont en minuscules. -
Si vous rencontrez une erreur lors de l'exécution de l'
UpdateCommandExecutionAPI, vous pouvez l'afficher dans le groupe deAWSIoTLogsV2journaux d'Amazon CloudWatch. Pour plus d'informations sur l'activation de la journalisation et l'affichage des journaux, consultezConfigurer 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" } } }
Note
Lorsque la requête UpdateCommandExecution MQTT échoue, le service publie une réponse d'erreur à la /rejected rubrique. Pour obtenir la liste complète des codes d'erreur et des conseils de dépannage, consultezAWS IoT Dépannage des commandes.
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 depuis la AWS IoT console et en utilisant le AWS CLI. Vous pouvez obtenir les informations suivantes.
Note
Pour récupérer le dernier état 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 comme 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. -
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 l'exécution d'une commande depuis la console à l'aide de l'une des méthodes suivantes.
-
Depuis la page du hub de commande
Accédez à la page
Command Hub de la AWS IoT console et effectuez ces étapes. -
Choisissez la commande pour laquelle vous avez créé une exécution sur l'appareil cible.
-
Sur la page des détails des commandes, dans l'onglet Historique des commandes, vous verrez les exécutions que vous avez créées. Choisissez l'exécution pour laquelle vous souhaitez récupérer les informations.
-
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 périphérique cible lors de l'exécution de la commande, vous pouvez consulter les détails de l'exécution sur la page Thing hub.
-
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. -
Sur la page des détails de l'objet, dans l'historique des commandes, vous verrez les exécutions que vous avez créées. Choisissez l'exécution pour laquelle vous souhaitez récupérer les informations.
-
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 de l'API HTTP du plan de GetCommandExecution AWS IoT Core contrôle pour récupérer des informations sur 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 :
-
avec votre Région AWS, par exempleregionus-east-1. -
avec votre Compte AWS numéro, par exempleaccount-id.123456789012 -
à l'aide de votre identifiant de AWS IoT commande unique, tel quecommand-id.LockDoor -
avec l'undevicesthingou l'autre ouclientselon que vos appareils ont été enregistrés en tant qu' AWS IoT objets ou sont spécifiés en tant que clients MQTT. -
avec votre AWS IoTdevice-idthing-nameouclient-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érez un exemple d'exécution de commande
L'exemple suivant vous montre comment récupérer des informations concernant 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 concernant une commande qui a été exécutée pour désactiver le mode volant.
Dans cet exemple, remplacez :
-
avec l'identifiant de l'exécution de la commande pour laquelle vous souhaitez récupérer des informations.<execution-id> -
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<target-arn>start-command-executionCLI. -
Facultativement, si vos appareils ont utilisé l'
UpdateCommandExectionAPI pour fournir le résultat de l'exécution, vous pouvez spécifier si vous souhaitez 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, l'état de l'exécution et l'heure à laquelle elle a commencé à s'exécuter et à quelle date elle s'est terminée. Il fournit également un statusReason objet contenant des informations supplémentaires sur l'état. 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 à l'heure à laquelle l'appareil signale l'état d'un terminal au cloud. En cas d'TIMED_OUTétat, ce champ ne sera défini que lorsque l'appareil signalera un délai d'attente. 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 du délai d'attente, 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 de requête réservée 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 effectue 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 de la commande 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 AWS CloudTrail et 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.
-
Ouvrez le client de test MQTT
dans la AWS IoT console. -
Dans l'onglet S'abonner, entrez la rubrique suivante, puis choisissez S'abonner, où se
<thingId>trouve le nom de l'appareil avec lequel vous vous êtes enregistré AWS IoT.Note
Vous pouvez trouver 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 partir de la page Connecter un appareil . $aws/commands/things/<thingId>/executions/+/request -
(Facultatif) Dans l'onglet S'abonner, vous pouvez également saisir les rubriques suivantes et choisir S'abonner.
$aws/commands/things/+/executions/+/response/accepted/json $aws/commands/things/+/executions/+/response/rejected/json -
Lorsque vous lancez l'exécution d'une commande, la charge utile du message est envoyée à l'appareil en utilisant la rubrique de demande à laquelle l'appareil est abonné,
$aws/commands/things/. Dans le client de test MQTT, vous devriez voir la charge utile de la commande qui contient les instructions permettant au périphérique de traiter la commande.<thingId>/executions/+/request -
Une fois que l'appareil 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/jsonPar exemple, considérez une commande que vous avez exécutée pour allumer la climatisation de votre voiture afin de réduire la température à la valeur souhaitée. Le JSON suivant montre un exemple de message que le véhicule a publié dans la rubrique de réponse, qui indique qu'il n'a pas pu 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 depuis la AWS IoT console et en utilisant le 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 du hub de commande
Accédez à la page
Command Hub de la AWS IoT console et effectuez ces étapes. -
Choisissez la commande pour laquelle vous avez créé une exécution sur l'appareil cible.
-
Sur la page des détails des commandes, 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 appareil 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 l'appareil sur la page Thing hub.
-
Accédez à la page
Thing Hub de la AWS IoT console et choisissez l'objet pour lequel vous avez créé les exécutions. -
Sur la page des détails de l'objet, dans l'historique des commandes, vous verrez la liste des exécutions que vous avez créées pour l'appareil.
-
Utilisez l'opération de l'API HTTP du plan de ListCommandExecutions AWS IoT Core contrôle pour répertorier toutes les exécutions de commandes de 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 :
-
avec votre Région AWS, par exempleregionus-east-1. -
avec votre Compte AWS numéro, par exempleaccount-id.123456789012 -
avec votre identifiant de AWS IoT commande unique, tel quecommand-id.LockDoor
{ "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 si vous souhaitez filtrer la liste afin d'afficher uniquement les exécutions de commandes créées pour un périphérique particulier à l'aide dutargetArn, ou les exécutions pour une commande particulière spécifiée à l'aide ducommandArn.
Dans cet exemple, remplacez :
-
avec le numéro de ressource Amazon (ARN) de l'appareil pour lequel vous ciblez l'exécution, par exemple<target-arn>arn:aws:iot:.us-east-1:123456789012:thing/b8e4157c98f332cffb37627f -
avec le numéro de ressource Amazon (ARN) de l'appareil pour lequel vous ciblez l'exécution, par exemple<target-arn>arn:aws:iot:.us-east-1:123456789012:thing/b8e4157c98f332cffb37627f -
avec le délai après lequel vous souhaitez répertorier les exécutions qui ont été créées, par exemple<after>2024-11-01T03:00.
aws iot list-command-executions \ --target-arn\ --started-time-filter '{after=<target-arn>}' \ --sort-order "ASCENDING"<after>
L'exécution de cette commande génère une réponse contenant la 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 à quelle date elles se sont terminées. Il fournit également des informations d'état et l'statusReasonobjet qui contient des informations supplémentaires sur l'état.
{ "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 a saisi un statut de terminal
SUCCEEDED, tel queFAILED, ouREJECTED. -
Cette opération peut être effectuée uniquement à 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 :
-
avec votre Région AWS, par exempleRegionus-east-1. -
avec votre Compte AWS numéro, par exempleAccountID.123456789012 -
avec l'identifiant de la commande dont vous souhaitez supprimer l'exécution.CommandID -
avecdevicesthingouclientselon que vos appareils ont été enregistrés en tant qu' AWS IoT objets ou qu'ils sont spécifiés en tant que clients MQTT. -
avec votre AWS IoTdevice-idthing-nameouclient-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. Selon votre application, remplacez-le par l'identifiant de l'exécution de la commande que vous supprimez, puis <execution-id> par l'ARN de votre machine cible. <target-arn>
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.