Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Iniciar y supervisar las ejecuciones de comandos
Tras crear un recurso de comandos, puede iniciar la ejecución de un comando en el dispositivo de destino. Una vez que el dispositivo comience a ejecutar el comando, podrá empezar a actualizar el resultado de la ejecución del comando y publicar las actualizaciones de estado y la información sobre los resultados en los temas MQTT reservados. A continuación, puede recuperar el estado de la ejecución del comando y supervisar el estado de las ejecuciones en su cuenta.
En esta sección se muestra cómo puede iniciar y supervisar los comandos mediante la AWS IoT consola y el AWS CLI.
Iniciar y supervisar las operaciones de los comandos
Inicie la ejecución de un comando
importante
Usted es el único responsable de implementar los comandos de forma segura y de conformidad con las leyes aplicables.
Antes de iniciar la ejecución de un comando, debe asegurarse de que:
-
Ha creado un comando en el espacio de AWS IoT nombres y ha proporcionado la información de carga útil. Cuando empieces a ejecutar el comando, el dispositivo procesará las instrucciones de la carga útil y realizará las acciones especificadas. Para obtener información sobre la creación de comandos, consulteCree un recurso de comandos.
-
El dispositivo se ha suscrito a los temas MQTT reservados para los comandos. Al iniciar la ejecución del comando, la información sobre la carga útil se publicará en el siguiente tema de MQTT solicitud reservada.
En este caso,
<devices>
pueden ser cosas de IoT o MQTT clientes, y<DeviceID>
es el nombre de la cosa o el ID del cliente. Los compatibles<PayloadFormat>
son JSON yCBOR. Para obtener más información sobre los temas de comandos, consulteTemas de comandos.$aws/commands/
<devices>
/<DeviceID>
/executions/+/request/<PayloadFormat>
Si no
<PayloadFormat>
lo es JSON yCBOR, a continuación se muestra el formato del tema de comandos.$aws/commands/
<devices>
/<DeviceID>
/executions/+/request
Cuando desee ejecutar el comando, debe especificar el dispositivo de destino que recibirá el comando y seguir las instrucciones especificadas. El dispositivo de destino puede ser una AWS IoT cosa o el ID de cliente si el dispositivo no se ha registrado en el AWS IoT registro. Tras recibir la carga útil del comando, el dispositivo puede empezar a ejecutar el comando y realizar las acciones especificadas.
AWS IoT cosa
El dispositivo de destino del comando puede ser cualquier AWS IoT cosa que haya registrado en el registro de AWS IoT cosas. Las características AWS IoT facilitan la búsqueda y la administración de sus dispositivos.
Puede registrar su dispositivo como una cosa al conectarlo AWS IoT desde la página Conectar dispositivoCreateThing
API. Puede encontrar un elemento existente para el que desee ejecutar el comando en la página Thing HubDescribeThing
API. Para obtener información sobre cómo registrar un dispositivo como una AWS IoT cosa, consulte Administrar cosas con el registro.
ID de cliente
Si tu dispositivo no se ha registrado como un elemento AWS IoT, puedes usar el ID de cliente en su lugar.
El ID de cliente es un identificador único que se asigna a tu dispositivo o cliente. El ID de cliente se define en el MQTT protocolo y puede contener caracteres alfanuméricos, guiones bajos o guiones. Debe ser exclusivo de cada dispositivo al que se conecte. AWS IoT
nota
-
Si el dispositivo se ha registrado como un objeto en el AWS IoT registro, el ID de cliente puede ser el mismo que el nombre del dispositivo.
-
Si la ejecución del comando se dirige a un ID de MQTT cliente específico, para recibir la carga útil del comando del tema de comandos basado en el ID de cliente, el dispositivo debe conectarse AWS IoT con el mismo ID de cliente.
El ID de cliente suele ser el ID de MQTT cliente que tus dispositivos pueden usar al conectarse AWS IoT Core. Este ID lo usa AWS IoT para identificar cada dispositivo específico y administrar las conexiones y suscripciones.
El tiempo de espera indica el tiempo en segundos durante el que el dispositivo puede proporcionar el resultado de la ejecución del comando.
Tras crear la ejecución de un comando, se inicia un temporizador. Si el dispositivo se desconectó o no pudo informar del resultado de la ejecución dentro del tiempo de espera, se agotará el tiempo de espera de la ejecución del comando y el estado de la ejecución se mostrará comoTIMED_OUT
.
Este campo es opcional y tendrá un valor predeterminado de 10 segundos si no especificas ningún valor. También puede configurar el tiempo de espera en un valor máximo de 12 horas.
Valor de tiempo de espera y estado TIMED_OUT
de ejecución
Tanto la nube como el dispositivo pueden informar de un tiempo de espera.
Una vez que se envía el comando al dispositivo, se inicia un temporizador. Si no se recibe ninguna respuesta del dispositivo dentro del tiempo de espera especificado, tal y como se ha descrito anteriormente. En este caso, la nube establece el estado de ejecución del comando como TIMED_OUT
con el código de motivo como$NO_RESPONSE_FROM_DEVICE
.
Esto podría ocurrir en cualquiera de los siguientes casos.
-
El dispositivo se desconectó al ejecutar el comando.
-
El dispositivo no pudo completar la ejecución del comando dentro del período especificado.
-
El dispositivo no pudo enviar la información de estado actualizada dentro del tiempo de espera.
En este caso, cuando el estado de ejecución de TIMED_OUT
se informa desde la nube, la ejecución del comando no es terminal. El dispositivo puede publicar una respuesta que sustituya el estado por cualquiera de los estados del terminal,SUCCEEDED
, FAILED
o. REJECTED
La ejecución del comando ahora pasa a ser terminal y no acepta más actualizaciones.
El dispositivo también puede actualizar un TIMED_OUT
estado iniciado por la nube informando de que se ha agotado el tiempo de espera al ejecutar el comando. En este caso, el estado de ejecución del comando permanece enTIMED_OUT
, pero el statusReason
objeto se actualizará en función de la información proporcionada por el dispositivo. La ejecución del comando pasará a ser terminal y no se aceptarán más actualizaciones.
Uso de sesiones MQTT persistentes
Puede configurar sesiones MQTT persistentes para utilizarlas con la función de AWS IoT Device Management comandos. Esta función resulta especialmente útil en casos como cuando el dispositivo se queda sin conexión y quiere asegurarse de que el dispositivo sigue recibiendo el comando cuando vuelve a conectarse antes de que se agote el tiempo de espera y sigue las instrucciones especificadas.
De forma predeterminada, la caducidad de la sesión MQTT persistente está establecida en 60 minutos. Si el tiempo de espera de ejecución del comando está configurado en un valor que supera esta duración, las ejecuciones de comandos que se ejecuten durante más de 60 minutos pueden ser rechazadas por el agente de mensajes y provocar un error. Para ejecutar comandos que duren más de 60 minutos, puedes solicitar un aumento del tiempo de caducidad de la sesión persistente.
nota
Para asegurarte de que utilizas correctamente la función de sesiones MQTT persistentes, asegúrate de que el indicador de inicio limpio esté establecido en cero. Para obtener más información, consulta las sesiones MQTT persistentes.
Para empezar a ejecutar el comando desde la consola, vaya a la página Command Hub
-
Para ejecutar el comando que ha creado, elija Ejecutar comando.
-
Revisa la información sobre el comando que has creado, el archivo de carga y el tipo de formato, y los MQTT temas reservados.
-
Especifique el dispositivo de destino para el que desea ejecutar el comando. El dispositivo se puede especificar como una AWS IoT cosa si se ha registrado AWS IoT o mediante el ID de cliente si el dispositivo aún no se ha registrado. Para obtener más información, consulte Consideraciones sobre el dispositivo de destino
-
(Opcional) Configure un valor de tiempo de espera para el comando que determine el tiempo durante el que desea que se ejecute el comando antes de que se agote el tiempo de espera. Si el comando debe ejecutarse durante más de 60 minutos, es posible que deba aumentar el tiempo de caducidad de las sesiones MQTT persistentes. Para obtener más información, consulte Consideraciones sobre el tiempo de espera de ejecución de comandos.
-
Elija Run command (Ejecutar comando).
Utilice la API operación del plano de StartCommandExecution
HTTPdatos para iniciar la ejecución de un comando. La API solicitud y la respuesta se correlacionan mediante el identificador de ejecución del comando. Una vez que el dispositivo termina de ejecutar el comando, puede informar del estado y el resultado de la ejecución a la nube publicando un mensaje en el tema de respuesta del comando. En el caso de un código de respuesta personalizado, los códigos de aplicación que poseas pueden procesar el mensaje de respuesta y publicar el resultado en ellos AWS IoT.
Si tus dispositivos están suscritos al tema de solicitud de comandos, StartCommandExecution
API publicarán el mensaje de carga útil en ese tema. La carga útil puede utilizar cualquier formato de tu elección. Para obtener más información, consulte Carga útil del comando.
$aws/commands/
<devices>
/<DeviceID>
/executions/+/request/<PayloadFormat>
Si el formato de la carga útil no es JSON oCBOR, a continuación se muestra el formato del tema de solicitud de comandos.
$aws/commands/
<devices>
/<DeviceID>
/executions/+/request
Ejemplo de política IAM
Antes de usar esta API operación, asegúrate de que tu IAM política te autorice a realizar esta acción en el dispositivo. En el siguiente ejemplo, se muestra una IAM política que permite al usuario realizar la StartCommandExecution
acción.
En este ejemplo, sustituya:
-
con tu Región de AWS, comoregion
ap-south-1
. -
con tu Cuenta de AWS número, por ejemploaccount-id
.123456789012
-
con un identificador único para AWS IoT el comando, comocommand-id
. Si desea enviar más de un comando, puede especificarlos en la IAM política.LockDoor
-
condevices
thing
o enclient
función de si sus dispositivos se han registrado como AWS IoT cosas o se han especificado como MQTT clientes. -
con tu AWS IoTdevice-id
thing-name
oclient-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
" ] }
Obtenga el punto final del plano de datos específico de la cuenta
Antes de ejecutar el API comando, debe obtener el punto final específico de la cuenta para el punto finalURL. iot:Jobs
Por ejemplo, si ejecuta este comando:
aws iot describe-endpoint --endpoint-type iot:Jobs
Devolverá el punto final específico de la cuenta, URL como se muestra en el ejemplo de respuesta que aparece a continuación.
{ "endpointAddress": "
<account-specific-prefix>
.jobs.iot.<region>
.amazonaws.com" }
Ejemplo de inicio de la ejecución de un comando ()AWS CLI
El siguiente ejemplo muestra cómo empezar a ejecutar un comando mediante el start-command-execution
AWS CLI comando.
En este ejemplo, sustituya:
-
con el ARN para el comando que desee ejecutar. Puede obtener esta información a partir de la respuesta del<command-arn>
create-command
CLI comando. Por ejemplo, si está ejecutando el comando para cambiar el modo del volante, utilicearn:aws:iot:
.region
:account-id
:command/SetComfortSteeringMode
-
con la cosa ARN para el dispositivo de destino, que puede ser una cosa o un MQTT cliente de IoT, para el que desee ejecutar el comando. Por ejemplo, si está ejecutando el comando para el dispositivo de destino<target-arn>
myRegisteredThing
, utilicearn:aws:iot:
.region
:account-id
:thing/myRegisteredThing
-
con el punto final específico de la cuenta al que accedisteObtenga el punto final del plano de datos específico de la cuenta, con el prefijo.<endpoint-url>
https://
Por ejemplo,https://
.123456789012abcd
.jobs.iot.ap-south-1
.amazonaws.com -
(Opcional) También puede especificar un parámetro adicional al realizar
executionTimeoutSeconds
la operación.StartCommandExecution
API Este campo opcional especifica el tiempo en segundos dentro del cual el dispositivo debe completar la ejecución del comando. De forma predeterminada, el valor es de 10 segundos. Cuando el estado de ejecución del comando esCREATED
, se inicia un temporizador. Si el resultado de la ejecución del comando no se recibe antes de que caduque el temporizador, el estado cambia automáticamente aTIMED_OUT
.
aws iot-jobs-data start-command-execution \ --command-arn
<command-arn>
\ --target-arn<target-arn>
\ --endpoint<endpoint-url>
\ --executionTimeoutSeconds900
La ejecución de este comando devuelve un identificador de ejecución del comando. Puede usar este ID para consultar el estado de ejecución del comando, los detalles y el historial de ejecución del comando.
nota
Si el comando ha quedado obsoleto, la StartCommandExecution
API solicitud fallará con una excepción de validación. Para corregir este error, primero restaure el comando mediante y UpdateCommand
API, a continuación, ejecute la StartCommandExecution
solicitud.
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }
Actualice el resultado de la ejecución de un comando
Utilice la API operación del plano de UpdateCommandExecution
MQTT datos para actualizar el estado o el resultado de la ejecución de un comando.
nota
Antes de usar estoAPI:
-
El dispositivo debe haber establecido una MQTT conexión y estar suscrito a los temas de solicitud y respuesta de comandos. Para obtener más información, consulte Flujo de trabajo de comandos de alto nivel.
-
Debe haber ejecutado ya este comando mediante la
StartCommandExecution
API operación.
Antes de usar esta API operación, asegúrate de que tu IAM política autorice al dispositivo a realizar estas acciones. A continuación se muestra un ejemplo de política que autoriza al dispositivo a realizar la acción. Para ver ejemplos adicionales de IAM políticas que otorgan al usuario permiso para realizar la UpdateCommandExecution
acción, consulteEjemplos de políticas de conexión y publicación.
En este ejemplo, sustituya:
-
con las tuyas Región de AWS, por ejemploRegion
ap-south-1
. -
con tu Cuenta de AWS número, por ejemploAccountID
.123456789012
-
con el nombre del objeto AWS IoT al que se dirige la ejecución del comando, por ejemploThingName
.myRegisteredThing
-
ycommands-request-topic
con los nombres de los temas de solicitud y respuesta de sus AWS IoT comandos. Para obtener más información, consulte Flujo de trabajo de comandos de alto nivel.commands-response-topic
Ejemplo de IAM política para la identificación del MQTT cliente
El siguiente código muestra un ejemplo de política de dispositivo cuando se utiliza el ID de MQTT cliente.
{ "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}" } ] }
Ejemplo IAM de política para IoT
El siguiente código muestra un ejemplo de política de dispositivos cuando se usa una AWS IoT cosa.
{ "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}" } ] }
Una vez recibida la ejecución del comando en el tema de la solicitud, el dispositivo procesa el comando. A continuación, utiliza el UpdateCommandExecution
API para actualizar el estado y el resultado de la ejecución del comando al siguiente tema de respuesta.
$aws/commands/
<devices>
/<DeviceID>
/executions/<ExecutionId>
/response/<PayloadFormat>
En este ejemplo,
es el identificador único del dispositivo de destino y <DeviceID>
es el identificador de la ejecución del comando en el dispositivo de destino. <execution-id>
<PayloadFormat>
Puede ser JSON oCBOR.
nota
Si no has registrado tu dispositivo AWS IoT, puedes usar el ID de cliente como identificador en lugar del nombre de una cosa.
$aws/commands/clients/
<ClientID>
/executions/<ExecutionId>
/response/<PayloadFormat>
El dispositivo informó de actualizaciones en el estado de ejecución
Sus dispositivos pueden utilizarla API para informar sobre cualquiera de las siguientes actualizaciones de estado relacionadas con la ejecución del comando. Para obtener más información sobre estos estados, consulteEstado de ejecución del comando.
-
IN_PROGRESS
: Cuando el dispositivo comience a ejecutar el comando, podrá actualizar el estado aIN_PROGRESS
. -
SUCCEEDED
: Cuando el dispositivo procese correctamente el comando y termine de ejecutarlo, podrá publicar un mensaje en el tema de respuesta comoSUCCEEDED
. -
FAILED
: Si el dispositivo no pudo ejecutar el comando, puede publicar un mensaje en el tema de respuesta comoFAILED
. -
REJECTED
: Si el dispositivo no ha aceptado el comando, puede publicar un mensaje en el tema de respuesta comoREJECTED
. -
TIMED_OUT
: El estado de ejecución del comando puede cambiar aTIMED_OUT
uno debido a cualquiera de los siguientes motivos.-
No se recibió el resultado de la ejecución del comando. Esto puede ocurrir porque la ejecución no se completó en el plazo especificado o si el dispositivo no pudo publicar la información de estado en el tema de respuesta.
-
El dispositivo informa que se ha agotado el tiempo de espera al intentar ejecutar el comando.
-
Para obtener más información sobre el TIMED_OUT
estado, consulteValor de tiempo de espera y estado TIMED_OUT de ejecución.
Consideraciones a la hora de utilizar el UpdateCommandExecution
API
Las siguientes son algunas consideraciones importantes a la hora de utilizar el UpdateCommandExecution
API.
-
Sus dispositivos pueden usar un
statusReason
objeto opcional, que se puede usar para proporcionar información adicional sobre la ejecución. Si sus dispositivos proporcionan este objeto, elreasonCode
campo del objeto es obligatorio, pero elreasonDescription
campo es opcional. -
Cuando sus dispositivos usen el
statusReason
objeto,reasonCode
deberán usar el patrón[A-Z0-9_-]+
y su longitud no excederá los 64 caracteres. Si lo proporcionareasonDescription
, asegúrese de que no supere los 1024 caracteres de longitud. Puede utilizar cualquier carácter excepto los caracteres de control, como las líneas nuevas. -
Los dispositivos pueden usar un
result
objeto opcional para proporcionar información sobre el resultado de la ejecución del comando, como el valor devuelto por una llamada a una función remota. Si proporciona elresult
, debe requerir al menos una entrada. -
En el
result
campo, especifique las entradas como pares clave-valor. Para cada entrada, debe especificar la información del tipo de datos en forma de cadena, booleana o binaria. Un tipo de datos de cadena debe usar la claves
, un tipo de datos booleano usa la claveb
y un tipo de datos binario debe usar la clave.bin
Debe asegurarse de que estos tipos de datos se mencionen en minúsculas. -
Si encuentras un error al ejecutar el
UpdateCommandExecution
API, puedes ver el error en el grupo deAWSIoTLogsV2
registros de Amazon CloudWatch. Para obtener información sobre cómo habilitar el registro y ver los registros, consulteConfigure el AWS IoT registro.
UpdateCommandExecution
APIejemplo
El código siguiente muestra un ejemplo de cómo el dispositivo puede utilizar el campo UpdateCommandExecution
API para informar del estado de la ejecución, el statusReason
campo para proporcionar información adicional sobre el estado y el campo de resultados para proporcionar información sobre el resultado de la ejecución, como el porcentaje de batería del coche en este caso.
{ "status": "IN_PROGRESS", "statusReason": { "reasonCode": "200", "reasonDescription": "Execution_in_progress" }, "result": { "car_battery": { "s": "car battery at 50 percent" } } }
Recupera la ejecución de un comando
Tras ejecutar un comando, puede recuperar información sobre la ejecución del comando desde la AWS IoT consola y mediante el AWS CLI. Puede obtener la siguiente información.
nota
Para recuperar el estado más reciente de ejecución de comandos, el dispositivo debe publicar la información de estado en el tema de respuesta utilizando el UpdateCommandExecution
MQTTAPI, tal y como se describe a continuación. Hasta que el dispositivo publique este tema, GetCommandExecution
API indicará el estado como CREATED
oTIMED_OUT
.
Cada ejecución de comando que cree tendrá:
-
Un identificador de ejecución, que es un identificador único de la ejecución del comando.
-
El estado de la ejecución del comando. Al ejecutar el comando en el dispositivo de destino, la ejecución del comando entra en un
CREATED
estado. A continuación, puede pasar a otros estados de ejecución de comandos, tal y como se describe a continuación. -
El resultado de la ejecución del comando.
-
El identificador de comando único y el dispositivo de destino para el que se han creado las ejecuciones.
-
La fecha de inicio, que muestra la hora en que se creó la ejecución del comando.
Puede recuperar la ejecución de un comando de la consola mediante uno de los métodos siguientes.
-
Desde la página del centro de comandos
Ve a la página Command Hub
de la AWS IoT consola y sigue estos pasos. -
Elija el comando para el que creó una ejecución en el dispositivo de destino.
-
En la página de detalles del comando, en la pestaña Historial de comandos, verás las ejecuciones que has creado. Elige la ejecución de la que quieres recuperar la información.
-
Si sus dispositivos la usaron
UpdateCommandExecution
API para proporcionar la información de los resultados, puede encontrar esta información en la pestaña Resultados de esta página.
-
-
Desde la página Thing Hub
Si ha elegido AWS IoT algo como dispositivo de destino al ejecutar el comando, puede ver los detalles de la ejecución en la página Thing Hub.
-
Ve a la página Thing Hub
de la AWS IoT consola y elige el objeto para el que has creado la ejecución del comando. -
En la página de detalles del objeto, en el historial de comandos, verás las ejecuciones que has creado. Elige la ejecución de la que quieres recuperar la información.
-
Si sus dispositivos la usaron
UpdateCommandExecution
API para proporcionar la información de los resultados, puede encontrar esta información en la pestaña Resultados de esta página.
-
Utilice la HTTP API operación del plano de GetCommandExecution
AWS IoT Core control para recuperar información sobre la ejecución de un comando. Debe haber ejecutado ya este comando mediante la StartCommandExecution
API operación.
Ejemplo de IAM política
Antes de usar esta API operación, asegúrate de que tu IAM política te autorice a realizar esta acción en el dispositivo. En el siguiente ejemplo, se muestra una IAM política que permite al usuario realizar la GetCommandExecution
acción.
En este ejemplo, sustituya:
-
con tu Región de AWS, comoregion
ap-south-1
. -
con tu Cuenta de AWS número, por ejemploaccount-id
.123456789012
-
con su identificador de AWS IoT comando único, comocommand-id
.LockDoor
-
condevices
thing
o enclient
función de si sus dispositivos se han registrado como AWS IoT cosas o se han especificado como MQTT clientes. -
con tu AWS IoTdevice-id
thing-name
oclient-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
" ] }
Recupera un ejemplo de ejecución de comandos
El siguiente ejemplo muestra cómo recuperar información sobre un comando que se ejecutó con el start-command-execution
AWS CLI comando. El siguiente ejemplo muestra cómo se puede recuperar información sobre un comando que se ejecutó para desactivar el modo de volante.
En este ejemplo, sustituya:
-
con el identificador de la ejecución del comando para el que desea recuperar información.<execution-id>
-
con el número de recurso de Amazon (ARN) del dispositivo al que se dirige la ejecución. Puede obtener esta información a partir de la respuesta del<target-arn>
start-command-execution
CLI comando. -
Opcionalmente, si sus dispositivos usaron el
UpdateCommandExection
API para proporcionar el resultado de la ejecución, puede especificar si desea incluir el resultado de la ejecución del comando en la respuesta alGetCommandExecution
API usar elGetCommandExecution
API.
aws iot get-command-execution --execution-id
<execution-id>
\ --target-arn<target-arn>
\ --include-result
La ejecución de este comando genera una respuesta que contiene información sobre la ejecución ARN del comando, el estado de la ejecución y la hora en que comenzó a ejecutarse y cuándo se completó. También proporciona un statusReason
objeto que contiene información adicional sobre el estado. Para obtener más información sobre los distintos estados y el motivo del estado, consulteEstado de ejecución del comando.
El código siguiente muestra un ejemplo de respuesta a la API solicitud.
nota
El completedAt
campo de la respuesta de ejecución corresponde al momento en que el dispositivo informa a la nube del estado de un terminal. En el caso del TIMED_OUT
estado, este campo solo se configurará cuando el dispositivo notifique que se ha agotado el tiempo de espera. Cuando el TIMED_OUT
estado lo establece la nube, el TIMED_OUT
estado no se actualiza. Para obtener más información sobre el comportamiento del tiempo de espera, consulteConsideraciones sobre el tiempo de espera de ejecución de comandos.
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/LockDoor", "targetArn": "arn:aws:iot:ap-south-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" }
Visualización de las actualizaciones de comandos mediante el cliente MQTT de prueba
Puede utilizar el cliente MQTT de prueba para ver el intercambio de mensajes MQTT cuando utilice la función de comandos. Una vez que el dispositivo haya establecido una MQTT conexión con AWS IoT, puede crear un comando, especificar la carga útil y, a continuación, ejecutarlo en el dispositivo. Al ejecutar el comando, si el dispositivo se ha suscrito al tema de solicitud de comandos MQTT reservado, verá el mensaje de carga publicado en este tema.
Luego, el dispositivo recibe las instrucciones de carga útil y realiza las operaciones especificadas en el dispositivo IoT. A continuación, utiliza la UpdateCommandExecution
API para publicar el resultado de la ejecución del comando y la información de estado en los temas de respuesta MQTT reservados para los comandos. AWS IoT Device Management escucha las actualizaciones de los temas de respuesta, almacena la información actualizada y publica los registros en Amazon. AWS CloudTrail CloudWatch A continuación, puede recuperar la información más reciente sobre la ejecución de comandos desde la consola o mediante el. GetCommandExecution
API
Los siguientes pasos muestran cómo utilizar el cliente de MQTT prueba para observar los mensajes.
-
Abra el cliente MQTT de prueba
en la AWS IoT consola. -
En la pestaña Suscribirse, introduzca el siguiente tema y, a continuación, seleccione Suscribirse, que
<thingId>
es el nombre del dispositivo con el que se ha registrado AWS IoT.nota
Puedes encontrar el nombre del dispositivo en la página Thing Hub
de la AWS IoT consola o, si no has registrado tu dispositivo como una cosa, puedes registrarlo al conectarte AWS IoT desde la página Connect device . $aws/commands/things/
<thingId>
/executions/+/request -
(Opcional) En la pestaña Suscribirse, también puedes introducir los siguientes temas y seleccionar Suscribirse.
$aws/commands/things/+/executions/+/response/accepted/json $aws/commands/things/+/executions/+/response/rejected/json
-
Al iniciar la ejecución de un comando, la carga útil del mensaje se enviará al dispositivo mediante el tema de solicitud al que se haya suscrito el dispositivo.
$aws/commands/things/
En el cliente de MQTT prueba, deberías ver la carga útil del comando que contiene las instrucciones para que el dispositivo procese el comando.<thingId>
/executions/+/request -
Cuando el dispositivo comience a ejecutar el comando, podrá publicar actualizaciones de estado en el siguiente tema de respuesta MQTT reservado a los comandos.
$aws/commands/
<devices>
/<device-id>
/executions/<executionId>
/response/jsonPor ejemplo, piense en un comando que ejecutó para encender el aire acondicionado de su automóvil y reducir la temperatura al valor deseado. A continuación, se JSON muestra un ejemplo de mensaje que el vehículo publicó en el tema de respuesta y en el que se indica que no pudo ejecutar el comando.
{ "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" } }
En este caso, puede cargar la batería del coche y volver a ejecutar el comando.
Enumere las ejecuciones de comandos en su Cuenta de AWS
Tras ejecutar un comando, puede recuperar información sobre la ejecución del comando desde la AWS IoT consola y mediante el AWS CLI. Puede obtener la siguiente información.
-
Un identificador de ejecución, que es un identificador único de la ejecución del comando.
-
El estado de la ejecución del comando. Al ejecutar el comando en el dispositivo de destino, la ejecución del comando entra en un
CREATED
estado. A continuación, puede pasar a otros estados de ejecución de comandos, tal y como se describe a continuación. -
El identificador de comando único y el dispositivo de destino para el que se han creado las ejecuciones.
-
La fecha de inicio, que muestra la hora en que se creó la ejecución del comando.
Puede ver todas las ejecuciones de comandos desde la consola mediante uno de los siguientes métodos.
-
Desde la página del centro de comandos
Ve a la página Command Hub
de la AWS IoT consola y sigue estos pasos. -
Elija el comando para el que creó una ejecución en el dispositivo de destino.
-
En la página de detalles del comando, vaya a la pestaña Historial de comandos y verá una lista de las ejecuciones que ha creado.
-
-
Desde la página Thing Hub
Si ha elegido un AWS IoT objeto como dispositivo de destino al ejecutar el comando y ha creado varias ejecuciones de comandos para un solo dispositivo, puede ver las ejecuciones del dispositivo en la página Thing Hub.
-
Ve a la página Thing Hub
de la AWS IoT consola y elige el objeto para el que has creado las ejecuciones. -
En la página de detalles del objeto, en el historial de comandos, verás una lista de las ejecuciones que has creado para el dispositivo.
-
Utilice la HTTP API operación del plano de ListCommandExecutions
AWS IoT Core control para enumerar todas las ejecuciones de comandos en su cuenta.
Ejemplo de IAM política
Antes de usar esta API operación, asegúrate de que tu IAM política te autorice a realizar esta acción en el dispositivo. En el siguiente ejemplo, se muestra una IAM política que permite al usuario realizar la ListCommandExecutions
acción.
En este ejemplo, sustituya:
-
con tu Región de AWS, comoregion
ap-south-1
. -
con tu Cuenta de AWS número, por ejemploaccount-id
.123456789012
-
con su identificador de AWS IoT comando único, comocommand-id
.LockDoor
{ "Effect": "Allow", "Action": "iot:ListCommandExecutions", "Resource": * }
Enumere un ejemplo de ejecuciones de comandos
El siguiente ejemplo muestra cómo enumerar las ejecuciones de comandos en su Cuenta de AWS.
Al ejecutar el comando, debe especificar si desea filtrar la lista para que muestre únicamente las ejecuciones de comandos que se hayan creado para un dispositivo concreto mediante eltargetArn
, o las ejecuciones de un comando concreto especificado mediante elcommandArn
.
En este ejemplo, sustituya:
-
con el número de recurso de Amazon (ARN) del dispositivo al que se dirige la ejecución, por ejemplo<target-arn>
arn:aws:iot:
.us-east-1
:123456789012
:thing/b8e4157c98f332cffb37627f
-
con el número de recurso de Amazon (ARN) del dispositivo al que se dirige la ejecución, por ejemplo<target-arn>
arn:aws:iot:
.us-east-1
:123456789012
:thing/b8e4157c98f332cffb37627f
-
con el tiempo transcurrido el cual desea enumerar las ejecuciones que se crearon, por ejemplo,<after>
2024-11-01T03:00
.
aws iot list-command-executions \ --target-arn
\ --started-time-filter '{after=
<target-arn>
}' \ --sort-order "ASCENDING"
<after>
Al ejecutar este comando, se genera una respuesta que contiene una lista de las ejecuciones de comandos que ha creado y la hora en que las ejecuciones comenzaron a ejecutarse y en que finalizaron. También proporciona información de estado y el statusReason
objeto que contiene información adicional sobre el estado.
{ "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" } ] }
Para obtener más información sobre los distintos estados y el motivo del estado, consulteEstado de ejecución del comando.
Eliminar la ejecución de un comando
Si ya no quieres usar la ejecución de un comando, puedes eliminarla permanentemente de tu cuenta.
nota
-
La ejecución de un comando solo se puede eliminar si ha pasado a un estado terminal
SUCCEEDED
, comoFAILED
, oREJECTED
. -
Esta operación solo se puede realizar mediante el AWS IoT Core API o el AWS CLI. No está disponible en la consola.
Antes de usar esta API operación, asegúrate de que tu IAM política autorice al dispositivo a realizar estas acciones. A continuación se muestra un ejemplo de política que autoriza al dispositivo a realizar la acción.
En este ejemplo, sustituya:
-
con tu Región de AWS, comoRegion
ap-south-1
. -
con tu Cuenta de AWS número, por ejemploAccountID
.123456789012
-
con el identificador del comando cuya ejecución desea eliminar.CommandID
-
condevices
thing
o enclient
función de si sus dispositivos se han registrado como AWS IoT cosas o se han especificado como MQTT clientes. -
con tu AWS IoTdevice-id
thing-name
oclient-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
" ] }
En el siguiente ejemplo, se muestra cómo eliminar un comando mediante el delete-command
AWS CLI comando. En función de la aplicación,
sustitúyala por el identificador de la ejecución del <execution-id>
comando que vayas a eliminar y por el ARN del dispositivo de destino. <target-arn>
aws iot delete-command-execution \ --execution-id
<execution-id>
\ --target-arn<target-arn>
Si la API solicitud se realiza correctamente, la ejecución del comando genera un código de estado de 200. Puede utilizar el GetCommandExecution
API para comprobar que la ejecución del comando ya no existe en su cuenta.