Inicio y supervisión de las ejecuciones de comandos
Una vez que haya creado 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 de los resultados en los temas reservados de MQTT. 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 consola de AWS IoT y la AWS CLI.
Inicio y supervisión de las operaciones de comandos
Inicio de la ejecución de un comando
importante
Usted es el único responsable de implementar los comandos de forma segura y que cumpla con las normativas aplicables.
Antes de iniciar la ejecución de un comando, debe asegurarse de que:
-
Haya creado un comando en el espacio de nombres de AWS IoT y haya proporcionado la información de carga útil. Al iniciar la ejecución del comando, el dispositivo procesará las instrucciones de la carga útil y realizará las acciones especificadas. Para obtener más información sobre la creación de comandos, consulte Creación de un recurso de comandos.
-
Su dispositivo se ha suscrito a los temas reservados de MQTT para los comandos. Al iniciar la ejecución del comando, la información sobre la carga útil se publicará en el siguiente tema de solicitud de MQTT reservado.
En este caso, la opción
<devices>puede ser objetos de IoT o clientes de MQTT y la opción<DeviceID>es el nombre del objeto o el ID del cliente. Los<PayloadFormat>compatibles son JSON y CBOR. Para obtener más información sobre los temas de comandos, consulte Temas de comandos.$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>Si
<PayloadFormat>no es JSON ni CBOR, se mostrará a continuación el formato de 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 ejecutar las instrucciones especificadas. El dispositivo de destino puede ser un objeto de AWS IoT o el ID de cliente si el dispositivo no se ha registrado en el registro de AWS IoT. Tras recibir la carga útil del comando, el dispositivo puede empezar a ejecutar el comando y realizar las acciones especificadas.
AWS IoTObjeto
El dispositivo de destino del comando puede ser un objeto de AWS IoT que haya registrado en el registro de objetos de AWS IoT. Los objetos de AWS IoT facilitan la búsqueda y la administración de los dispositivos.
Puede registrar el dispositivo como un objeto al conectarlo a AWS IoT en la página Conexión del dispositivoCreateThing. Puede encontrar un objeto existente para el que desee ejecutar el comando en la página Centro de objetosDescribeThing. Para obtener más información sobre cómo registrar el dispositivo como un objeto de AWS IoT, consulte Administración de objetos con el registro.
ID de cliente
Si el dispositivo no se ha registrado como objeto con AWS IoT, puede usar el ID de cliente en su lugar.
El ID de cliente es un identificador único que se asigna a su dispositivo o cliente. El ID de cliente se define en el protocolo MQTT y puede incluir caracteres alfanuméricos, guiones bajos o guiones. Debe ser exclusivo de cada dispositivo que se conecte a AWS IoT.
nota
-
Si el dispositivo se ha registrado como objeto en el registro de AWS IoT, el ID de cliente puede ser el mismo que el nombre del objeto.
-
Si la ejecución del comando se dirige a un ID de cliente de MQTT específico, para recibir la carga útil del comando del tema de comandos basados en el ID de cliente, el dispositivo debe conectarse a AWS IoT con el mismo ID de cliente.
El ID de cliente suele ser el ID de cliente de MQTT que los dispositivos pueden usar al conectarse a 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 en el que el dispositivo debe 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 notificó el resultado de la ejecución dentro del tiempo de espera, se agotará el tiempo de ejecución del comando y se indicará el estado de ejecución como TIMED_OUT.
Este campo es opcional y tendrá un valor predeterminado de 10 segundos si no especifica 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 de ejecución de TIMED_OUT
La nube y el dispositivo pueden informar sobre un tiempo de espera.
Una vez que se envía el comando al dispositivo, se iniciará un temporizador. Si no se ha recibido ninguna respuesta del dispositivo dentro del tiempo de espera especificado, tal y como se describió 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 sucede 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 periodo especificado.
-
El dispositivo no pudo enviar la información de estado actualizada dentro del tiempo de espera.
En este caso, cuando se informa del estado de ejecución de TIMED_OUT desde la nube, la ejecución del comando es no final. El dispositivo puede publicar una respuesta que sustituya el estado por cualquiera de los estados finales: SUCCEEDED, FAILED o REJECTED. La ejecución del comando ahora pasa a ser final y no acepta más actualizaciones.
El dispositivo también puede actualizar un estado TIMED_OUT iniciado por la nube informando de que se ha agotado el tiempo de espera mientras se ejecutaba el comando. En este caso, el estado de ejecución del comando permanece en TIMED_OUT, pero el objeto statusReason se actualizará en función de la información proporcionada por el dispositivo. La ejecución del comando ahora pasa a ser final y no aceptará más actualizaciones.
Uso de las sesiones persistentes de MQTT
Puede configurar las sesiones persistentes de MQTT para usar con la característica de comandos de AWS IoT Device Management. Esta característica resulta especialmente útil en casos en los que el dispositivo se queda sin conexión y quiere asegurarse de que el dispositivo siga recibiendo el comando cuando vuelve a conectarse antes de que se agote el tiempo de espera y siga las instrucciones especificadas.
De forma predeterminada, la caducidad de la sesión persistente de MQTT está establecida en 60 minutos. Si el tiempo de espera de ejecución del comando se ha configurado en un valor que supera esta duración, el agente de mensajes puede rechazar las ejecuciones del comando, por lo que se puede producir un error. Para ejecutar comandos de más de 60 minutos de duración, puede solicitar un aumento del tiempo de caducidad de la sesión persistente.
nota
Para asegurarse de que utiliza correctamente la característica de sesiones persistentes de MQTT, asegúrese de que el indicador Empezar a eliminar esté establecido en cero. Para obtener más información, consulte Sesiones persistentes de MQTT.
Para empezar a ejecutar el comando desde la consola, vaya a la página Centro de comandos
-
Para ejecutar el comando que ha creado, elija Ejecutar comando.
-
Revise la información sobre el comando que ha creado, el archivo de carga útil y el tipo de formato, y los temas reservados de MQTT.
-
Especifique el dispositivo de destino en el que desee ejecutar el comando. El dispositivo se puede especificar como un objeto de AWS IoT si se ha registrado con 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 los dispositivos 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, puede que tenga que aumentar el tiempo de caducidad de las sesiones persistentes de MQTT. 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 operación de la API del plano de datos StartCommandExecution HTTP para iniciar la ejecución de un comando. La solicitud y la respuesta de la API se correlacionan mediante el ID de ejecución del comando. Una vez que el dispositivo termine 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 sean de su propiedad pueden procesar el mensaje de respuesta y publicar el resultado en AWS IoT.
Si los dispositivos se han suscrito al tema de solicitud de comandos, la API StartCommandExecutionI publicará el mensaje de carga útil en ese tema. La carga útil puede usar cualquier formato de su elección. Para obtener más información, consulte Carga útil de comandos.
$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>
Si el formato de carga útil no es JSON ni CBOR, se mostrará a continuación el formato de tema de solicitud de comandos.
$aws/commands/<devices>/<DeviceID>/executions/+/request
Ejemplo de política de IAM
Antes de usar esta operación de la API, asegúrese de que la política de IAM le autorice a realizar esta acción en el dispositivo. A continuación, se muestra un ejemplo de una política de IAM que permite a un usuario realizar la acción StartCommandExecution.
En este ejemplo, sustituya:
-
con la Región de AWS, como, por ejemplo,regionap-south-1. -
con el número de la Cuenta de AWS, como, por ejemploaccount-id.123456789012 -
con un identificador único parea el comando de AWS IoT, como, por ejemplo,command-id. Si desea enviar más de un comando, puede especificarlos en la política de IAM.LockDoor -
condevicesthingoclient, en función de si los dispositivos se han registrado como objetos de AWS IoT o se han especificado como clientes de MQTT. -
condevice-idthing-nameoclient-idde AWS IoT.
{ "Effect": "Allow", "Action": [ "iot:StartCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }
Obtención del punto de conexión del plano de datos específico de la cuenta
Antes de ejecutar el comando de la API, debe obtener la URL del punto de conexión específico de la cuenta para el punto de conexión. Si usa puntos de conexión de doble pila (IPv4 e IPv6), utilice iot:Data-ATS. El punto de conexión iot:Jobs es solo para IPv4. Por ejemplo, si ejecuta este comando:
aws iot describe-endpoint --endpoint-type iot:Data-ATS
Devolverá la URL del punto de conexión específico de la cuenta, tal y como se muestra en el ejemplo de respuesta que aparece a continuación.
{ "endpointAddress": "<account-specific-prefix>-ats.iot.<region>.api.com" }
Ejemplo de inicio de la ejecución de un comando (AWS CLI)
En el siguiente ejemplo se muestra cómo empezar a ejecutar un comando mediante el comando start-command-execution de la AWS CLI.
En este ejemplo, sustituya:
-
con el ARN del comando que desee ejecutar. Puede obtener esta información de la respuesta del comando<command-arn>create-commandde la CLI. Por ejemplo, si está ejecutando el comando para cambiar el modo de volante, utilicearn:aws:iot:.region:account-id:command/SetComfortSteeringMode -
con el ARN del objeto del dispositivo de destino, que puede ser un objeto de IoT o un cliente de MQTT, 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 de conexión específico de la cuenta que ha obtenido en Obtención del punto de conexión 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,
executionTimeoutSeconds, al realizar la operación de la APIStartCommandExecution. 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 10 segundos. Cuando el estado de ejecución del comando seaCREATED, se iniciará un temporizador. Si el resultado de la ejecución del comando no se recibe antes de que caduque el temporizador, el estado cambiará automáticamente aTIMED_OUT.
aws iot-jobs-data start-command-execution \ --command-arn<command-arn>\ --target-arn<target-arn>\ --endpoint<endpoint-url>\ --execution-timeout-seconds900
La ejecución de este comando devuelve un ID 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, se producirá un error en la solicitud de la API StartCommandExecution con una excepción de validación. Para corregir este error, primero restaure el comando mediante la API UpdateCommand y, a continuación, ejecute la solicitud StartCommandExecution.
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }
Actualización del resultado de la ejecución de un comando
Utilice la operación de la API del plano de datos de MQTT UpdateCommandExecution para actualizar el estado o el resultado de la ejecución de un comando.
nota
Antes de usar esta API:
-
El dispositivo debe haber establecido una conexión de MQTT 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.
-
Ya debe haber ejecutado este comando mediante la operación de la API
StartCommandExecution.
Antes de usar esta operación de la API, asegúrese de que la política de IAM 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 políticas de IAM que conceden al usuario permiso para realizar la acción UpdateCommandExecution, consulte Ejemplos de políticas de conexión y publicación.
En este ejemplo, sustituya:
-
con la Región de AWS, como, por ejemplo,Regionap-south-1. -
con el número de la Cuenta de AWS, como, por ejemploAccountID.123456789012 -
con el nombre del objeto de AWS IoT al que se dirige la ejecución del comando, como, por ejemplo,ThingName.myRegisteredThing -
ycommands-request-topiccon los nombres de los temas de solicitud y respuesta de los comandos de AWS IoT. Para obtener más información, consulte Flujo de trabajo de comandos de alto nivel.commands-response-topic
Ejemplo de política de IAM para el ID de cliente de MQTT
En el siguiente ejemplo de código se muestra una política de dispositivo de ejemplo cuando se utiliza el ID de cliente de MQTT.
Ejemplo de política de IAM para un objeto de IoT
En el siguiente ejemplo de código se muestra una política de dispositivo de ejemplo cuando se utiliza un objeto de AWS IoT.
Una vez recibida la ejecución del comando en el tema de solicitud, el dispositivo procesará el comando. A continuación, utiliza la API UpdateCommandExecution para actualizar el estado y el resultado de la ejecución del comando en el 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 o CBOR.
nota
Si no ha registrado el dispositivo con AWS IoT, puede usar el ID de cliente como identificador en lugar de un nombre de objeto.
$aws/commands/clients/<ClientID>/executions/<ExecutionId>/response/<PayloadFormat>
Actualizaciones en el estado de ejecución indicadas por el dispositivo
Los dispositivos pueden usar la API para informar sobre cualquiera de las siguientes actualizaciones de estado relacionadas con la ejecución de un comando. Para obtener más información sobre estos estados, consulte Estado de la 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 ha podido ejecutar el comando, puede publicar un mensaje en el tema de respuesta comoFAILED. -
REJECTED: si el dispositivo no ha podido aceptar el comando, puede publicar un mensaje en el tema de respuesta comoREJECTED. -
TIMED_OUT: el estado de ejecución del comando puede cambiar aTIMED_OUTdebido a cualquiera de los siguientes motivos.-
No se ha recibido el resultado de la ejecución del comando. Esto puede ocurrir porque la ejecución no se ha completado en el plazo especificado o si el dispositivo no ha podido publicar la información de estado en el tema de respuesta.
-
El dispositivo indica que se ha agotado el tiempo de espera al intentar ejecutar el comando.
-
Para obtener más información sobre el estado TIMED_OUT, consulte Valor de tiempo de espera y estado de ejecución de TIMED_OUT.
Consideraciones sobre el uso de la API UpdateCommandExecution
A continuación, se indican algunas consideraciones importantes a la hora de utilizar la API UpdateCommandExecution.
-
Los dispositivos pueden usar un objeto de
statusReasonopcional, que se puede usar para proporcionar información adicional sobre la ejecución. Si los dispositivos proporcionan este objeto, el camporeasonCodedel objeto es obligatorio, pero el camporeasonDescriptiones opcional. -
Cuando los dispositivos usen el objeto de
statusReason,reasonCodedebe usar el patrón[A-Z0-9_-]+y su longitud no debe superar los 64 caracteres. Si proporciona lareasonDescription, asegúrese de que su longitud no supere los 1024 caracteres. Puede utilizar cualquier carácter excepto los caracteres de control, como, por ejemplo, líneas nuevas. -
Los dispositivos pueden usar un objeto de
resultopcional para proporcionar información sobre el resultado de la ejecución del comando, como, por ejemplo, el valor devuelto por una llamada a una función remota. Si proporciona elresult, debe requerir al menos una entrada. -
En el campo
result, debe especificar las entradas como pares de clave-valor. En cada entrada, debe especificar la información del tipo de datos en forma de cadena, booleano o binario. Un tipo de datos de cadena debe usar la claves, un tipo de datos booleano usa la claveby un tipo de datos binario debe usar la clavebin. Debe asegurarse de que estos tipos de datos se mencionen en minúsculas. -
Si se produce un error al ejecutar la API
UpdateCommandExecution, puede ver el error en el grupo de registro deAWSIoTLogsV2de Amazon CloudWatch. Para obtener más información sobre la habilitación de registros y la visualización de los registros, consulte Configuración de registros de AWS IoT.
Ejemplo de la API UpdateCommandExecution
En el código siguiente se muestra un ejemplo de cómo un dispositivo puede utilizar la API UpdateCommandExecution para informar del estado de la ejecución, el campo statusReason 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, por ejemplo, el porcentaje de batería del automóvil en este caso.
{ "status": "IN_PROGRESS", "statusReason": { "reasonCode": "200", "reasonDescription": "Execution_in_progress" }, "result": { "car_battery": { "s": "car battery at 50 percent" } } }
Recuperación de la ejecución de un comando
Tras ejecutar un comando, puede recuperar información sobre la ejecución del comando desde la consola de AWS IoT y mediante la AWS CLI. Puede obtener la siguiente información.
nota
Para recuperar el último estado de ejecución del comando, el dispositivo debe publicar la información de estado en el tema de respuesta mediante la API de MQTT UpdateCommandExecution, tal y como se describe a continuación. Hasta que el dispositivo publique este tema, la API GetCommandExecution indicará el estado como CREATED o TIMED_OUT.
Cada ejecución de comando que cree tendrá:
-
Un ID 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 estado
CREATED. 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 ID de comando único y el dispositivo de destino para el que se han creado las ejecuciones.
-
La Fecha de inicio, que muestra el momento en que se creó la ejecución del comando.
Puede recuperar una ejecución del comando desde la consola mediante cualquiera de los siguientes métodos.
-
Desde la página Centro de comandos
Vaya a la página Centro de comandos
de la consola de AWS IoT y siga estos pasos. -
Elija el comando para el que ha creado una ejecución en el dispositivo de destino.
-
En la página de detalles del comando, en la pestaña Historial de comandos, aparecerán las ejecuciones que ha creado. Elija la ejecución de la que desee recuperar información.
-
Si los dispositivos han utilizado la API
UpdateCommandExecutionpara 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 Centro de objetos
Si ha elegido un objeto de AWS IoT como dispositivo de destino al ejecutar el comando, puede ver los detalles de la ejecución en la página Centro de objetos.
-
Vaya a la página Centro de objetos
de la consola de AWS IoT y elija el objeto para el que ha creado la ejecución del comando. -
En la página de detalles del objeto, en la opción Historial de comandos, aparecerán las ejecuciones que ha creado. Elija la ejecución de la que desee recuperar información.
-
Si los dispositivos han utilizado la API
UpdateCommandExecutionpara proporcionar la información de los resultados, puede encontrar esta información en la pestaña Resultados de esta página.
-
Utilice la operación de la API del plano de control HTTP GetCommandExecution para recuperar información sobre la ejecución de un comando. Ya debe haber ejecutado este comando mediante la operación de la API StartCommandExecution.
Ejemplo de política de IAM
Antes de usar esta operación de la API, asegúrese de que la política de IAM le autorice a realizar esta acción en el dispositivo. A continuación, se muestra un ejemplo de una política de IAM que permite a un usuario realizar la acción GetCommandExecution.
En este ejemplo, sustituya:
-
con la Región de AWS, como, por ejemplo,regionap-south-1. -
con el número de la Cuenta de AWS, como, por ejemploaccount-id.123456789012 -
con el identificador único del comando de AWS IoT, como, por ejemplo,command-id.LockDoor -
condevicesthingoclient, en función de si los dispositivos se han registrado como objetos de AWS IoT o se han especificado como clientes de MQTT. -
condevice-idthing-nameoclient-idde AWS IoT.
{ "Effect": "Allow", "Action": [ "iot:GetCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }
Ejemplo de recuperación de la ejecución de un comando
En el siguiente ejemplo se muestra cómo recuperar información sobre un comando que se ha ejecutado mediante el comando start-command-execution de la AWS CLI. En el siguiente ejemplo se muestra cómo puede recuperar información sobre un comando que se ha ejecutado para desactivar el modo volante.
En este ejemplo, sustituya:
-
con el identificador de la ejecución del comando del que desea recuperar información.<execution-id> -
con el nombre de recurso de Amazon (ARN) del dispositivo al que se dirige la ejecución. Puede obtener esta información de la respuesta del comando<target-arn>start-command-executionde la CLI. -
Si lo desea, si los dispositivos han utilizado la API
UpdateCommandExectionpara proporcionar el resultado de la ejecución, puede especificar si desea incluir el resultado de la ejecución del comando en la respuesta de la APIGetCommandExecutionmediante la APIGetCommandExecution.
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 incluye información sobre el ARN de la ejecución del comando, el estado de la ejecución y el momento en que se inició y finalizó. También proporciona un objeto de statusReason que incluye información adicional sobre el estado. Para obtener más información sobre los distintos estados y el motivo del estado, consulte Estado de la ejecución del comando.
En el siguiente código se muestra un ejemplo de respuesta de la solicitud de la API.
nota
El campo completedAt de la respuesta de ejecución corresponde al momento en que el dispositivo informa a la nube de un estado final. En el caso de un estado TIMED_OUT, este campo solo se configurará cuando el dispositivo indique que se ha agotado el tiempo de espera. Cuando la nube establece el estado TIMED_OUT, no se actualizará el estado TIMED_OUT. Para obtener más información sobre el comportamiento del tiempo de espera, consulte Consideraciones 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 actualizaciones de comandos mediante el cliente de prueba de MQTT
Puede usar el cliente de prueba de MQTT para ver el intercambio de mensajes a través de MQTT cuando se utiliza la característica de comandos. Una vez que el dispositivo haya establecido una conexión de MQTT 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 reservada de MQTT para comandos, aparecerá el mensaje de carga útil publicado en este tema.
A continuación, el dispositivo recibe las instrucciones de carga útil y realiza las operaciones especificadas en el dispositivo con IoT. A continuación, utiliza la API UpdateCommandExecution para publicar el resultado de la ejecución del comando y la información de estado en los temas de respuesta reservados de MQTT para comandos. AWS IoT Device Management escucha las actualizaciones de los temas de respuesta, almacena la información actualizada y publica los registros en AWS CloudTrail y Amazon CloudWatch. A continuación, puede recuperar la información más reciente sobre la ejecución del comando desde la consola o mediante la API GetCommandExecution.
En los siguientes pasos se muestra cómo usar el cliente de prueba de MQTT para observar los mensajes.
-
En la pestaña Suscribirse, introduzca el siguiente tema y, a continuación, seleccione Suscribirse, donde
<thingId>es el nombre del objeto con el que se ha registrado en AWS IoT.nota
Puede encontrar el nombre del objeto del dispositivo en la página Centro de objetos
de la consola de AWS IoT o, si no ha registrado el dispositivo como objeto, puede registrarlo al conectarse a AWS IoT desde la página Conexión del dispositivo . $aws/commands/things/<thingId>/executions/+/request -
(Opcional) En la pestaña Suscribirse, también puede introducir los siguientes temas y seleccionar Suscribirse.
$aws/commands/things/+/executions/+/response/accepted/json $aws/commands/things/+/executions/+/response/rejected/json -
Después de iniciar la ejecución del comando, la carga útil del mensaje se enviará al dispositivo mediante el tema de solicitud al que se ha suscrito el dispositivo,
$aws/commands/things/. En el cliente de prueba de MQTT, debería aparecer la carga útil del comando que incluye las instrucciones para que el dispositivo procese el comando.<thingId>/executions/+/request -
Una vez que el dispositivo comience a ejecutar el comando, podrá publicar actualizaciones de estado en el siguiente tema de respuesta reservado de MQTT para comandos.
$aws/commands/<devices>/<device-id>/executions/<executionId>/response/jsonPor ejemplo, considere un comando que ejecutó para encender el aire acondicionado del automóvil y reducir la temperatura al valor deseado. En el siguiente JSON se muestra un mensaje de ejemplo que el vehículo publicó en el tema de respuesta, 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 automóvil y volver a ejecutar el comando.
Enumeración de las ejecuciones de comandos de la Cuenta de AWS
Tras ejecutar un comando, puede recuperar información sobre la ejecución del comando desde la consola de AWS IoT y mediante la AWS CLI. Puede obtener la siguiente información.
-
Un ID 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 estado
CREATED. A continuación, puede pasar a otros estados de ejecución de comandos, tal y como se describe a continuación. -
El ID de comando único y el dispositivo de destino para el que se han creado las ejecuciones.
-
La Fecha de inicio, que muestra el momento en que se creó la ejecución del comando.
Puede ver todas las ejecuciones de comandos desde la consola mediante cualquiera de los siguientes métodos.
-
Desde la página Centro de comandos
Vaya a la página Centro de comandos
de la consola de AWS IoT y siga estos pasos. -
Elija el comando para el que ha creado 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 aparecerá una lista de las ejecuciones que ha creado.
-
-
Desde la página Centro de objetos
Si ha elegido un objeto de AWS IoT como dispositivo de destino al ejecutar el comando y ha creado varias ejecuciones de comandos para un único dispositivo, puede ver las ejecuciones del dispositivo en la página Centro de objetos.
-
Vaya a la página Centro de objetos
de la consola de AWS IoT y elija el objeto para el que ha creado las ejecuciones. -
En la página de detalles del objeto, en la opción Historial de comandos, aparecerá una lista de las ejecuciones que ha creado para el dispositivo.
-
Utilice la operación de la API HTTP del plano de control ListCommandExecutionsAWS IoT Core para enumerar todas las ejecuciones de comandos de la cuenta.
Ejemplo de política de IAM
Antes de usar esta operación de la API, asegúrese de que la política de IAM le autorice a realizar esta acción en el dispositivo. A continuación, se muestra un ejemplo de una política de IAM que permite a un usuario realizar la acción ListCommandExecutions.
En este ejemplo, sustituya:
-
con la Región de AWS, como, por ejemplo,regionap-south-1. -
con el número de la Cuenta de AWS, como, por ejemploaccount-id.123456789012 -
con el identificador único del comando de AWS IoT, como, por ejemplo,command-id.LockDoor
{ "Effect": "Allow", "Action": "iot:ListCommandExecutions", "Resource": * }
Ejemplo de enumeración de las ejecuciones de comandos
En el siguiente ejemplo se muestra cómo enumerar las ejecuciones de comandos en la 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 determinado dispositivo mediante el targetArn o las ejecuciones de un determinado comando especificado mediante el commandArn.
En este ejemplo, sustituya:
-
con el nombre de recurso de Amazon (ARN) del dispositivo al que se dirige la ejecución, como, por ejemplo,<target-arn>arn:aws:iot:.us-east-1:123456789012:thing/b8e4157c98f332cffb37627f -
con el nombre de recurso de Amazon (ARN) del dispositivo al que se dirige la ejecución, como, por ejemplo,<target-arn>arn:aws:iot:.us-east-1:123456789012:thing/b8e4157c98f332cffb37627f -
con el tiempo transcurrido a partir del 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 incluye una lista de las ejecuciones de comandos que ha creado, el momento en que las ejecuciones comenzaron a ejecutarse y el momento en que finalizaron. También proporciona información sobre el estado, así como el objeto de statusReason que incluye 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, consulte Estado de la ejecución del comando.
Eliminación de una ejecución de comandos
Si ya no quiere usar una ejecución de comandos, puede eliminarla permanentemente de la cuenta.
nota
-
La ejecución de un comando solo se puede eliminar si ha pasado a un estado final, como, por ejemplo,
SUCCEEDED,FAILEDoREJECTED. -
Esta operación solo se puede realizar mediante la API de AWS IoT Core o la AWS CLI. No está disponible en la consola.
Antes de usar esta operación de la API, asegúrese de que la política de IAM 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 la Región de AWS, como, por ejemplo,Regionap-south-1. -
con el número de la Cuenta de AWS, como, por ejemploAccountID.123456789012 -
con el identificador del comando para el que desea eliminar la ejecución.CommandID -
condevicesthingoclient, en función de si los dispositivos se han registrado como objetos de AWS IoT o se han especificado como clientes de MQTT. -
condevice-idthing-nameoclient-idde AWS IoT.
{ "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 comando delete-command de la AWS CLI. Según la aplicación, sustituya por el identificador de la ejecución del comando que va a eliminar y el <execution-id> por el ARN del dispositivo de destino. <target-arn>
aws iot delete-command-execution \ --execution-id<execution-id>\ --target-arn<target-arn>
Si la solicitud a la API se realiza correctamente, la ejecución de comandos generará un código de estado 200. Puede usar la API GetCommandExecution para comprobar que la ejecución de comandos ya no existe en la cuenta.