

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.

# Inicio y supervisión de las ejecuciones de comandos
<a name="send-monitor-remote-command-cli"></a>

**importante**  
El acceso a ciertas FleetWise funciones de AWS IoT está actualmente restringido. Para obtener más información, consulte [AWS Disponibilidad regional y de funciones en el AWS IoT FleetWise](fleetwise-regions.md).

Una vez que hayas creado un recurso de comando, puedes iniciar la ejecución de un comando en el vehículo objetivo. Una vez que el vehículo 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 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 este tema se muestra cómo puede enviar un comando a su vehículo mediante la AWS CLI FleetWise consola de AWS IoT. También se muestra cómo supervisar y actualizar el estado de la ejecución del comando.

**Topics**
+ [Actualiza el resultado de la ejecución del comando](#update-remote-command-execution-cli)
+ [Obtenga la ejecución de comandos](#get-remote-command-execution-cli)
+ [Enumera las ejecuciones de comandos en tu cuenta](#list-remote-command-execution-cli)
+ [Eliminación de una ejecución de comandos](#delete-remote-command-execution-cli)

## Enviar un comando (consola)
<a name="send-command-console"></a>

Para enviar un comando desde la consola, vaya a la página [Vehículos](https://console.aws.amazon.com/iotfleetwise/home#/vehicles) de la FleetWise consola AWS IoT y lleve a cabo los siguientes pasos.

1. Elige el vehículo al que quieres enviar un comando.

1. Elija **Run command (Ejecutar comando)**.

1. Selecciona el ID del comando.

1. Especifique el tiempo de espera de ejecución del comando y, a continuación, elija **Ejecutar comando**.

## Envía un comando ()AWS CLI
<a name="send-remote-command-cli"></a>

Puede utilizar la operación de la API del plano de [https://docs.aws.amazon.com/iot/latest/apireference/API_iot_data_StartCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot_data_StartCommandExecution.html) AWS IoT datos para enviar un comando a un vehículo. A continuación, el vehículo reenvía el comando a un servicio de software intermedio para automoción (por ejemplo SOME/IP , software intermedio escalable orientado a servicios sobre IP) o lo publica en la red de un vehículo (como la interfaz de un dispositivo de red de área de controlador (CAN)). El siguiente ejemplo utiliza AWS CLI.

**Topics**
+ [Consideraciones a la hora de enviar un comando](#send-remote-command-considerations)
+ [Obtención del punto de conexión del plano de datos específico de la cuenta](#send-remote-command-endpoint)
+ [Envía un ejemplo de comando](#send-remote-command-example)

### Consideraciones a la hora de enviar un comando
<a name="send-remote-command-considerations"></a>

Al iniciar la ejecución de un comando en AWS IoT FleetWise:
+ Debe aprovisionar cualquier AWS IoT cosa para el vehículo. Para obtener más información, consulte [Aprovisionamiento AWS de FleetWise vehículos de IoT](provision-vehicles.md).
+ Debe haber creado ya un comando `AWS-IoT-FleetWise` como espacio de nombres y haber proporcionado uno `role-Arn` que le otorgue permiso para crear y ejecutar comandos en el IoT AWS . FleetWise Para obtener más información, consulte [Creación de un recurso de comandos](create-manage-remote-command-cli.md#create-remote-command-cli).
+ Puede omitir el `parameters` campo si decide usar cualquier valor predeterminado que se especificó para los parámetros al crear el comando. Si `mandatory-parameters` no se especificó en el momento de la creación, o si desea anular cualquier valor predeterminado especificando sus propios valores para los parámetros, debe especificar el `parameters` campo. Para ver estos ejemplos adicionales, consulte[Escenarios de uso de comandos](remote-command-use-cases.md).
+ Puede especificar hasta tres pares de nombre-valor para el `mandatory-parameters` campo. Sin embargo, al ejecutar el comando en el vehículo, solo se acepta un par nombre-valor y el `name` campo debe usar el nombre completo con el prefijo. `$actuatorPath.`

### Obtención del punto de conexión del plano de datos específico de la cuenta
<a name="send-remote-command-endpoint"></a>

Antes de ejecutar el comando de la API, debe obtener la URL del punto final específica de la cuenta para el punto final. `iot:Jobs` Por ejemplo, si ejecuta este comando:

```
aws iot describe-endpoint --endpoint-type iot:Jobs
```

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>.jobs.iot.<region>.amazonaws.com"
}
```

### Envía un ejemplo de comando
<a name="send-remote-command-example"></a>

Para enviar un comando a un vehículo, ejecute el siguiente comando.
+ *command-arn*Sustituya el comando que desee ejecutar por el ARN. Puede obtener esta información de la respuesta del comando `create-command` de la CLI.
+ *target-arn*Sustitúyalo por el ARN del dispositivo o AWS IoT elemento de destino para el que desee ejecutar el comando.
**nota**  
Puede especificar el ARN objetivo de cualquier AWS IoT cosa ( FleetWise vehículo AWS IoT). Actualmente, no se admiten grupos de cosas ni flotas.
+ *endpoint-url*Sustitúyalo por el punto final específico de la cuenta que obtuviste[Obtención del punto de conexión del plano de datos específico de la cuenta](#send-remote-command-endpoint), con el prefijo, por ejemplo`https://`,. `https://123456789012abcd.jobs.iot.ap-south-1.amazonaws.com`
+ Sustituya *name* y *value* por el `mandatory-parameters` campo que especificó al crear el comando mediante la `create-command` CLI.

  El `name` campo es el nombre completo tal como se define en el catálogo de señales con `$actuatorPath.` el prefijo. Por ejemplo, `name` puede ser *\$1actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode* y `value` puede ser un booleano que indica el estado de un modo de dirección similar. *\$1"B": false\$1*
+ (Opcional) También puede especificar un parámetro adicional,. `executionTimeoutSeconds` Este campo opcional especifica el tiempo en segundos dentro del cual el dispositivo debe responder con el resultado de la ejecución. Puede configurar el tiempo de espera en un valor máximo de 24 horas.

  Cuando se ha creado la ejecución del comando, se inicia un temporizador. Antes de que caduque el temporizador, si el estado de ejecución del comando no cambia a un estado que lo convierta en terminal (por ejemplo`FAILED`, `SUCCEEDED` o), el estado cambia automáticamente a`TIMED_OUT`.
**nota**  
El dispositivo también puede informar de un `TIMED_OUT` estado o anular este estado a un estado como`SUCCEEDED`, o `FAILED``REJECTED`, y la ejecución del comando pasará a ser terminal. Para obtener más información, consulte [Estado de espera de ejecución del comando](remote-command-concepts-states.md#remote-command-execution-status-timeout).

```
aws iot-jobs-data start-command-execution \ 
    --command-arn command-arn \ 
    --target-arn target-arn \
    --execution-timeout-seconds 30 \
    --endpoint-url endpoint-url \ 
    --parameters '[
        {
            "name": name, 
            "value": value
        }
   ]'
```

La operación `StartCommandExecution` de la API devuelve un identificador de ejecución de comandos. Puede usar este ID para consultar el estado de ejecución del comando, los detalles y el historial de ejecución del comando.

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

Tras ejecutar el comando, los dispositivos recibirán una notificación con la siguiente información. El `issued_timestamp_ms` campo corresponde a la hora en que se invocó la `StartCommandExecution` API. `timeout_ms`Corresponde al valor de tiempo de espera que se configura mediante el `executionTimeoutSeconds` parámetro al invocar la `StartCommandExecution` API.

```
timeout_ms: 9000000
issued_timestamp_ms: 1723847831317
```

## Actualiza el resultado de la ejecución del comando
<a name="update-remote-command-execution-cli"></a>

Para actualizar el estado de la ejecución del comando, el dispositivo debe haber establecido una conexión MQTT y estar suscrito al siguiente tema de solicitud de comandos.

En este ejemplo, *`<device-id>`* sustitúyalo por el identificador único del dispositivo de destino, que puede ser el nombre `VehicleId` o el nombre de la cosa, y *`<execution-id>`* por el identificador de la ejecución del comando.

**nota**  
La carga útil debe usar el formato protobuf.
Es opcional que sus dispositivos se suscriban a los temas `/accepted` y `/rejected` a los temas de respuesta. Tus dispositivos recibirán estos mensajes de respuesta aunque no se hayan suscrito a ellos de forma explícita.

```
// Request topic
$aws/devices/<DeviceID>/command_executions/+/request/protobuf

// Response topics (Optional)
$aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/accepted/protobuf
$aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/rejected/protobuf
```

El dispositivo puede publicar un mensaje en el tema de respuesta a los comandos. Tras procesar el comando, envía una respuesta codificada en protobuf a este tema. El *<DeviceID>* campo debe coincidir con el campo correspondiente del tema de la solicitud.

```
$aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/<PayloadFormat>
```

Una vez que tu dispositivo publique una respuesta a este tema, podrás recuperar la información de estado actualizada mediante la `GetCommandExecution` API. El estado de la ejecución de un comando puede ser cualquiera de los que se muestran aquí. 
+ `IN_PROGRESS`
+ `SUCCEEDED`
+ `FAILED`
+ `REJECTED`
+ `TIMED_OUT`

Tenga en cuenta que un comando se ejecuta en cualquiera de los estados `SUCCEEDED` y `REJECTED` es terminal, y el estado lo informa el dispositivo. `FAILED` Cuando la ejecución de un comando es terminal, esto significa que no se realizarán más actualizaciones en su estado ni en los campos relacionados. El dispositivo o la nube pueden informar de un `TIMED_OUT` estado. Si lo informa la nube, el dispositivo podrá actualizar posteriormente el campo de motivo del estado.

Por ejemplo, a continuación se muestra un ejemplo de mensaje MQTT publicado por el dispositivo.

**nota**  
En cuanto al estado de ejecución del comando, si sus dispositivos utilizan el `statusReason` objeto para publicar la información de estado, debe asegurarse de que:  
`reasonCode`Utiliza el patrón `[A-Z0-9_-]+` y su longitud no supera los 64 caracteres.
La longitud `reasonDescription` no supera los 1024 caracteres. Puede utilizar cualquier carácter excepto los caracteres de control, como, por ejemplo, líneas nuevas.

```
{
    "deviceId": "",
    "executionId": "",
    "status": "CREATED",
    "statusReason": {
        "reasonCode": "",
        "reasonDescription": ""
    }
}
```

*Para ver un ejemplo que muestre cómo utilizar el cliente de pruebas de AWS IoT Core MQTT para suscribirse a los temas y ver los mensajes de ejecución de los comandos, consulte [Visualización de las actualizaciones de los comandos mediante el cliente de pruebas de MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command-execution-start-monitor.html#iot-remote-command-execution-update-mqtt) en la AWS IoT Core guía para desarrolladores.*

## Obtenga la ejecución de comandos
<a name="get-remote-command-execution-cli"></a>

Puede utilizar la operación de la API del plano de [https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html) AWS IoT control 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`.

Para recuperar los metadatos de un comando ejecutado, ejecute el siguiente comando.
+ *execution-id*Sustitúyalo por el ID del comando. Puede obtener esta información de la respuesta del comando `start-command-execution` de la CLI.
+ *target-arn*Sustitúyalo por el ARN del vehículo o AWS IoT objeto objetivo para el que desee ejecutar el comando.

```
aws iot get-command-execution --execution-id execution-id \ 
    --target-arn target-arn
```

La operación de la `GetCommandExecution` API devuelve una respuesta que contiene información sobre el ARN de la ejecución del comando, el estado de la ejecución y la hora en que el comando comenzó a ejecutarse y se completó. En el siguiente código se muestra un ejemplo de respuesta de la solicitud de la API.

Para proporcionar un contexto adicional sobre el estado de la ejecución de cada comando, la función de comandos proporciona un `statusReason` objeto. El objeto contiene dos campos: `reasonCode` y`reasonDescription`. Con estos campos, sus dispositivos pueden proporcionar información adicional sobre el estado de la ejecución de un comando. Esta información anulará cualquier valor predeterminado `reasonCode` `reasonDescription` que se informe desde la nube.

Para reportar esta información, sus dispositivos pueden publicar la información de estado actualizada en la nube. Luego, cuando recuperes el estado de ejecución del comando mediante la `GetCommandExecution` API, verás los códigos de estado más recientes.

**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 del `TIMED_OUT` estado, 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 [Estado de espera de ejecución del comando](remote-command-concepts-states.md#remote-command-execution-status-timeout).

```
{
    "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/myFrontDoor",
    "status": "SUCCEEDED",
    "statusReason": {
        "reasonCode": "65536",
        "reasonDescription": "SUCCESS"
    },
    "createdAt": "2024-03-23T00:50:10.095000-07:00",
    "completedAt": "2024-03-23T00:50:10.095000-07:00",
    "Parameters": '{
         "$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode":          
         { "B": true }
    }' 
}
```

## Enumera las ejecuciones de comandos en tu cuenta
<a name="list-remote-command-execution-cli"></a>

Usa la operación de la API HTTP del plano de [https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommandExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommandExecutions.html) AWS IoT Core control para enumerar todas las ejecuciones de comandos en tu cuenta. Este ejemplo usa AWS CLI.

**Topics**
+ [Consideraciones al enumerar las ejecuciones de comandos](#list-remote-command-considerations)
+ [Ejemplo de enumeración de las ejecuciones de comandos](#list-remote-command-example)

### Consideraciones al enumerar las ejecuciones de comandos
<a name="list-remote-command-considerations"></a>

Las siguientes son algunas consideraciones a tener en cuenta a la hora de utilizar la `ListCommandExecutions` API.
+ Debe especificar al menos las ejecuciones de un comando en particular `targetArn` o de un vehículo objetivo, `commandArn` dependiendo de si desea enumerar las ejecuciones. La solicitud de API no puede estar vacía y no puede contener ambos campos en la misma solicitud.
+ Debe proporcionar únicamente la información `startedTimeFilter` o la `completedTimeFilter` información. La solicitud de API no puede estar vacía ni puede contener ambos campos en la misma solicitud. Puede usar los `after` campos `before` y del objeto para enumerar las ejecuciones de comandos que se crearon o completaron en un período de tiempo específico.
+ Los `after` campos `before` y no deben ser posteriores a la hora actual. De forma predeterminada, si no especificas ningún valor, el `before` campo es la hora actual y `after` la hora actual (6 meses). Es decir, según el filtro que utilices, la API mostrará una lista de todas las ejecuciones que se hayan creado o completado en los últimos seis meses.
+ Puede usar el `sort-order` parámetro para especificar si desea enumerar las ejecuciones en orden ascendente. De forma predeterminada, las ejecuciones se muestran en orden descendente si no especificas este campo.
+ No puede filtrar las ejecuciones de comandos en función de su estado al enumerar las ejecuciones de comandos de un ARN de comando.

### Ejemplo de enumeración de las ejecuciones de comandos
<a name="list-remote-command-example"></a>

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:
+ *`<target-arn>`* con el nombre de recurso de Amazon (ARN) del dispositivo al que se dirige la ejecución, como, por ejemplo, `arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f`.
+ *`<target-arn>`* con el nombre de recurso de Amazon (ARN) del dispositivo al que se dirige la ejecución, como, por ejemplo, `arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f`.
+ *`<after>`* con el tiempo transcurrido a partir del cual desea enumerar las ejecuciones que se crearon, por ejemplo, `2024-11-01T03:00`.

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

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"
        }
    ]
}
```

## Eliminación de una ejecución de comandos
<a name="delete-remote-command-execution-cli"></a>

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`, `FAILED` o `REJECTED`.

En el siguiente ejemplo, se muestra cómo eliminar la ejecución de un comando mediante el `delete-command-execution` AWS CLI comando. *`<execution-id>`*Sustitúyalo por el identificador de la ejecución del comando que va a eliminar. 

```
aws iot delete-command-execution --execution-id <execution-id>
```

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.