

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建和管理命令
<a name="create-manage-remote-command-cli"></a>

**重要**  
目前对某些 AWS 物联网 FleetWise 功能的访问受到限制。有关更多信息，请参阅 [AWS AWS 物联网中的区域和功能可用性 FleetWise](fleetwise-regions.md)。

您可以配置可重复使用的远程操作或向您的设备发送一次性即时指令。使用此功能时，您可以指定您的设备可以近乎实时地执行的指令。命令允许您为目标车辆配置可重复使用的远程操作。创建命令后，您可以开始执行针对特定车辆的命令。

本主题介绍如何使用 AWS IoT Core API 或创建和管理命令资源 AWS CLI。它向您展示了如何对命令资源执行以下操作。

**Topics**
+ [创建命令资源](#create-remote-command-cli)
+ [检索关于命令的信息](#get-remote-command-cli)
+ [在你的账户中列出命令](#list-remote-command-cli)
+ [更新或弃用命令资源](#update-remote-command-cli)
+ [删除命令资源](#delete-remote-command-cli)

## 创建命令资源
<a name="create-remote-command-cli"></a>

您可以使用[https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html) AWS IoT Core 控制平面 API 操作或 AWS 物联网 FleetWise 控制台来创建命令。

### 创建命令（控制台）
<a name="create-command-console"></a>

您可以使用 AWS IoT FleetWise 控制台创建命令。

**创建命令**

1. 打开[AWS 物联网 FleetWise 控制台](https://console.aws.amazon.com/iotfleetwise)。

1. 在导航窗格上，选择**命令**。

1. 选择**创建命令**。

1. 指定唯一的命令 ID 以帮助您识别要在车辆上运行的命令。

1. （可选）指定可选的显示名称和描述。

1. （可选）选择执行器和默认参数值。参数指定目标车辆在收到命令后可以执行的操作。如果您不添加参数，则需要在运行命令时提供这些参数。

1. 选择一个 IAM 角色来授予为命令生成有效负载的权限。请参阅[控制访问权限](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/controlling-access.html#generate-command-payload)。

1. 选择**创建命令**。

### 创建命令 (AWS CLI)
<a name="create-remote-command-example"></a>

以下示例说明如何使用参数创建命令。

#### 创建命令时的注意事项
<a name="create-remote-command-considerations"></a>

当你在以下位置创建命令时 AWS IoT FleetWise：
+ 您必须指定授`roleArn`予在车辆上创建和运行命令的权限。有关更多信息以及示例策略（包括何时启用 KMS 密钥），请参阅[授 AWS IoT Device Management 予使用以下命令生成有效负载的权限 AWS IoT FleetWise](controlling-access.md#generate-command-payload)。
+ 必须指定`AWS-IoT-FleetWise`为命名空间。
+ 您可以跳过该`mandatory-parameters`字段，改为在运行时指定它们。或者，您可以创建带有参数的命令，也可以选择为它们指定默认值。如果您指定了默认值，则在运行时，您可以使用这些值或通过指定自己的值来覆盖它们。有关这些其他示例，请参见[命令使用场景](remote-command-use-cases.md)。
+ 您最多可以为该字段指定三个名称/值对。`mandatory-parameters`但是，在车辆上执行命令时，只接受一个名称/值对，并且该`name`字段必须使用带有前缀的完全限定名称。`$actuatorPath.`
+ *command-id*替换为命令的唯一标识符。您可以使用 UUID、字母数字字符、“-” 和 “\$1”。
+ *role-arn*替换为授予您创建和运行命令权限的 IAM 角色，例如`"arn:aws:iam:accountId:role/FwCommandExecutionRole"`。
+ （可选）*display-name*替换为用户友好的命令*description*名称以及对命令的有意义的描述。
+ 将`mandatory-parameters`对象*name**value*的 and 替换为正在创建的命令所需的信息。该`name`字段是信号目录中定义的完全限定名称，前缀`$actuatorPath.`为前缀。例如，`name`可以是也可以是*\$1actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode*表示转向模式状态的布尔值，例如*\$1"B": false\$1*。`value`

```
aws iot create-command --command-id command-id \ 
    --role-arn role-arn \
    --description description \
    --display-name display-name \     
    --namespace "AWS-IoT-FleetWise" \
    --mandatory-parameters '[
        {
            "name": name, 
            "value": value
        }
   ]'
```

`CreateCommand`API 操作返回的响应包含命令的 ID 和 ARN（亚马逊资源名称）。

```
{
    "commandId": "HandsOffSteeringMode",
    "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/HandsOffSteeringMode"
}
```

## 检索关于命令的信息
<a name="get-remote-command-cli"></a>

您可以使用[https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommand.html) AWS IoT Core 控制平面 API 操作来检索有关命令资源的信息。

要获取有关命令资源的信息，请运行以下命令。*command-id*替换为创建命令时使用的标识符。

```
aws iot get-command --command-id command-id
```

`GetCommand`API 操作返回的响应包含以下信息。
+ 命令的 ID 和 ARN（亚马逊资源名称）。
+ 命令的创建和上次更新的日期和时间。
+ 指示是否可以在车辆上运行的命令状态。
+ 您在创建命令时指定的任何参数。

```
{
    "commandId": "HandsOffSteeringMode",
    "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/HandsOffSteeringMode"",
    "namespace": "AWS-IoT-FleetWise",
    "mandatoryParameters":[
        {
            "name": "$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode",
            "value": {"B": false }
        }
    ],
    "createdAt": "2024-03-23T11:24:14.919000-07:00",
    "lastUpdatedAt": "2024-03-23T11:24:14.919000-07:00",
    "deprecated": false,
    "pendingDeletion": false
}
```

## 在你的账户中列出命令
<a name="list-remote-command-cli"></a>

您可以使用[https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommands.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommands.html) AWS IoT Core 控制平面 API 操作列出您在账户中创建的所有命令。

要列出您账户中的命令，请运行以下命令。默认情况下，API 会返回为两个命名空间创建的命令。要筛选列表以仅显示为其创建的命令 AWS IoT FleetWise，请运行以下命令。

**注意**  
您也可以按升序或降序对列表进行排序，或者筛选列表以仅显示具有特定命令参数名称的命令。

```
aws iot list-commands --namespace "AWS-IoT-FleetWise"
```

`ListCommands`API 操作返回的响应包含以下信息。
+ 命令的 ID 和 ARN（亚马逊资源名称）。
+ 命令的创建和上次更新的日期和时间。
+ 指示命令是否可在车辆上运行的命令状态。

## 更新或弃用命令资源
<a name="update-remote-command-cli"></a>

您可以使用[https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCommand.html) AWS IoT Core 控制平面 API 操作或 I AWS oT FleetWise 控制台来更新命令资源。您可以更新命令的显示名称和描述。如果当前未使用某个命令，也可以将其弃用。

**注意**  
在执行命令时，您无法修改命名空间信息或要使用的参数。

### 更新命令（控制台）
<a name="update-command-console"></a>

**更新命令**  
要从控制台更新[命令，请转到 AWS 物联网 FleetWise 控制台的命令](https://console.aws.amazon.com/iotfleetwise/home#/commands)页面并执行以下步骤。

1. 选择要更新的命令，然后选择 “**编辑”**。

1. 编辑命令详细信息，然后选择 “**保存更改**”。

**弃用命令**  
要弃用控制台中的命令，请转到 AWS 物联网 FleetWise 控制台的[命令](https://console.aws.amazon.com/iotfleetwise/home#/commands)页面并执行以下步骤。

1. 选择要弃用的命令，然后选择 “**弃用**”。

1. 确认弃用，然后选择 “**弃用**”。

### 更新命令 (AWS CLI)
<a name="update-command-cli"></a>

**更新命令**  
要更新命令资源，请运行以下命令。*command-id*替换为要更新的命令的标识符，并提供更新的*display-name*和*description*。

```
aws iot update-command \ 
    --command-id command-id \ 
    --display-name display-name \ 
    --description description
```

`UpdateCommand`API 操作返回以下响应。

```
{
    "commandId": "HandsOffSteeringMode",
    "deprecated": false,
    "lastUpdatedAt": "2024-05-09T23:16:51.370000-07:00"
}
```

**弃用命令**  
如果您打算不再在设备上继续使用某个命令，或者该命令已过时，则可以弃用该命令。以下示例显示了如何弃用命令。

```
aws iot update-command \ 
    --command-id command-id \ 
    --deprecated
```

`UpdateCommand`API 操作返回的响应包含命令的 ID 和 ARN（亚马逊资源名称）。

```
{
    "commandId": "HandsOffSteeringMode",
    "deprecated": true,
    "lastUpdatedAt": "2024-05-09T23:16:51.370000-07:00"
}
```

命令被弃用后，现有的命令执行将继续在车辆上运行，直到它们变为终端。要运行任何新的命令执行，必须使用 `UpdateCommand` API 恢复命令以使其可用。*有关弃用和恢复命令的更多信息及其注意事项，请参阅《开发人员指南》AWS IoT Core 中的[弃用命令资源](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command-deprecate)。*

## 删除命令资源
<a name="delete-remote-command-cli"></a>

您可以使用[https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteCommand.html) AWS IoT Core 控制平面 API 操作或 AWS 物联网 FleetWise 控制台来删除命令资源。

**注意**  
删除是永久性操作，无法撤消。该命令将从您的账户中永久删除。

### 删除命令（控制台）
<a name="delete-command-console"></a>

要从控制台删除[命令，请转到 AWS 物联网 FleetWise 控制台的命令](https://console.aws.amazon.com/iotfleetwise/home#/commands)页面并执行以下步骤。

1. 选择要删除的命令，然后选择 “**删除**”。

1. 确认要删除该命令，然后选择 “**删除**”。

### 删除命令 (AWS CLI)
<a name="delete-command-cli"></a>

要删除命令资源，请运行以下命令。*command-id*替换为要删除的命令的标识符。以下示例说明如何删除命令资源。

```
aws iot delete-command --command-id command-id
```

如果删除请求成功：
+ 如果该命令的弃用时间超过了最大超时时间 24 小时，则该命令将被立即删除，并且您将看到 HTTP `statusCode` 为 204。
+ 如果该命令未被弃用，或者已被弃用的时间短于最大超时时间，则该命令将处于`pending deletion`状态，您将看到 HTTP 为 202 `statusCode`。该命令将在最长 24 小时超时后自动从您的账户中删除。