高级命令工作流程 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

高级命令工作流程

此工作流程显示设备如何与Amazon IoT Device Management命令交互。所有 HTTP API 请求都使用 Sigv4 凭据进行签名。

Amazon IoT Device Management设备命令高级工作流程概述。

创建和管理命令

要为您的设备创建和管理命令,请执行以下步骤。

  1. 创建命令资源

    命令中心或使用 CreateCommandAPI 创建命令。

  2. 指定有效载荷

    提供任何格式的有效载荷。指定内容类型以确保设备解释正确。

    对于带有有效载荷模板的动态命令,将在运行时使用您提供的参数生成最终有效负载。模板仅支持 JSON 格式,但生成的负载可以作为 JSON 或 CBOR 发送。

  3. (可选)管理已创建的命令

    创建后更新显示名称和描述。不再需要时将命令标记为已弃用,或者将其永久删除。要修改负载信息,请创建新命令。

为您的命令选择目标设备并订阅 MQTT 主题

选择您的目标设备并配置 MQTT 主题以接收命令和发布响应。

  1. 为您的命令选择目标设备

    选择要接收和执行命令的目标设备。对于已注册的设备,使用事物名称,对未注册的设备使用客户端 ID。有关更多信息,请参阅 目标设备注意事项

  2. 配置Amazon IoT设备策略

    配置 IAM 策略,授予接收执行和发布更新的权限。IAM 策略示例有关策略示例,请参阅。

  3. 建立 MQTT 连接

    将设备连接到消息代理并订阅请求和响应主题。设备需要iot:Connect许可。使用 DescribeEndpoint API 或 describe-endpoint CLI 命令查找您的数据平面终端节点:

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    运行此命令将返回账户特定的数据面板端点,如下所示。

    account-specific-prefix.iot.region.amazonaws.com
  4. 订阅命令主题

    订阅命令请求主题。当您开始执行时,消息代理会将有效负载发布到此主题。您的设备接收并处理该命令。

    (可选)订阅响应主题(acceptedrejected),以接收云服务接受还是拒绝设备响应的确认信息。

    在此示例中:

    • <device>thingclient,具体取决于您目标设备是已注册为物联网事物,还是指定为 MQTT 客户端。

    • <DeviceID> 与您目标设备的唯一标识符。此 ID 可以是唯一的 MQTT 客户端 ID 或事物名称。

    注意

    如果有效负载类型不是 JSON 或 CBOR,则命令请求主题中可能不存在该<PayloadFormat>字段。要获取有效负载格式,我们建议您使用 MQTT5 从 MQTT 消息标头中获取格式信息。有关更多信息,请参阅 命令主题

    $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat> $aws/commands/<devices>/<DeviceID>/executions/+/response/accepted/<PayloadFormat> $aws/commands/<devices>/<DeviceID>/executions/+/response/rejected/<PayloadFormat>

为目标设备启动和监控命令执行

创建命令并指定命令的目标后,您可以通过执行以下步骤在目标设备上开始执行。

  1. 在目标设备上启动命令执行

    从 C ommand Hub 开始执行,或者将 StartCommandExecution API 与您的账户专用端点一起使用。iot:Data-ATS用于双堆栈 (IPv4/IPv6) 或 IPv4 仅iot:Jobs用于双堆栈。

    API 将负载发布到命令请求主题。

    注意

    如果设备处于离线状态并使用 MQTT 持久会话,则命令将在消息代理处等待。当设备在超时之前重新连接时,它可以处理命令并发布结果。如果超时到期,则执行超时,有效负载将被丢弃。

  2. 更新命令执行的结果

    设备接收负载,处理命令,执行指定操作,并使用基于 UpdateCommandExecution MQTT 的 API 将结果发布到命令响应主题。如果订阅了已接受和已拒绝的主题,则设备会收到云服务接受还是拒绝响应的确认信息。

    根据您在请求主题中指定的内容,<devices>可以是事物或客户端,<DeviceID>可以是您的Amazon IoT事物名称或 MQTT 客户端 ID。

    注意

    在命令响应主题中,<PayloadFormat>只能是 JSON 或 CBOR。

    $aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>
  3. (可选)检索命令执行结果

    从Amazon IoT控制台或使用检索执行结果GetCommandExecution。设备必须将结果发布到命令响应主题以获取最新信息。查看其他详细信息,包括上次更新时间、结果和完成时间。

(可选)启用命令事件通知

订阅 Commands 事件,以便在执行状态发生变化时收到通知。

  1. 创建主题规则

    订阅命令事件主题以获取状态变更通知。使用控制台或创建主题规则,将设备数据路由到其他Amazon IoT服务Amazon Lambda,例如 Amazon SQS 和 Amazon Step Functi Amazon IoT ons。创建Amazon IoT规则

    在此示例中,将 <CommandID> 替换为您要接收通知的命令的标识符,并将 <CommandExecutionStatus> 替换为命令执行的状态。

    $aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>
    注意

    要接收所有命令和命令执行状态的通知,您可以使用通配符并订阅以下主题。

    $aws/events/commandExecution/+/#
  2. 接收和处理命令事件

    Manage Commands 使用订阅的事件推送通知和构建应用程序。

以下代码显示了您将收到的命令事件通知的示例有效载荷。

{ "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554", "status":"FAILED", "statusReason": { "reasonCode": "DEVICE_TOO_BUSY", "reasonDescription": "" }, "eventType": "COMMAND_EXECUTION", "commandArn":"arn:aws:iot:us-east-1:123456789012:command/0b9d9ddf-e873-43a9-8e2c-9fe004a90086", "targetArn":"arn:aws:iot:us-east-1:123456789012:thing/5006c3fc-de96-4def-8427-7eee36c6f2bd", "timestamp":1717708862107 }