本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
高级命令工作流程
此工作流程显示设备如何与Amazon IoT Device Management命令交互。所有 HTTP API 请求都使用 Sigv4 凭据进行签名。
创建和管理命令
要为您的设备创建和管理命令,请执行以下步骤。
-
创建命令资源
从命令中心
或使用 CreateCommandAPI 创建命令。 -
指定有效载荷
提供任何格式的有效载荷。指定内容类型以确保设备解释正确。
对于带有有效载荷模板的动态命令,将在运行时使用您提供的参数生成最终有效负载。模板仅支持 JSON 格式,但生成的负载可以作为 JSON 或 CBOR 发送。
-
(可选)管理已创建的命令
创建后更新显示名称和描述。不再需要时将命令标记为已弃用,或者将其永久删除。要修改负载信息,请创建新命令。
为您的命令选择目标设备并订阅 MQTT 主题
选择您的目标设备并配置 MQTT 主题以接收命令和发布响应。
-
为您的命令选择目标设备
选择要接收和执行命令的目标设备。对于已注册的设备,使用事物名称,对未注册的设备使用客户端 ID。有关更多信息,请参阅 目标设备注意事项。
-
配置Amazon IoT设备策略
配置 IAM 策略,授予接收执行和发布更新的权限。IAM 策略示例有关策略示例,请参阅。
-
建立 MQTT 连接
将设备连接到消息代理并订阅请求和响应主题。设备需要
iot:Connect许可。使用DescribeEndpointAPI 或describe-endpointCLI 命令查找您的数据平面终端节点:aws iot describe-endpoint --endpoint-type iot:Data-ATS运行此命令将返回账户特定的数据面板端点,如下所示。
account-specific-prefix.iot.region.amazonaws.com -
订阅命令主题
订阅命令请求主题。当您开始执行时,消息代理会将有效负载发布到此主题。您的设备接收并处理该命令。
(可选)订阅响应主题(
accepted或rejected),以接收云服务接受还是拒绝设备响应的确认信息。在此示例中:
-
与<device>thing或client,具体取决于您目标设备是已注册为物联网事物,还是指定为 MQTT 客户端。 -
与您目标设备的唯一标识符。此 ID 可以是唯一的 MQTT 客户端 ID 或事物名称。<DeviceID>
注意
如果有效负载类型不是 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> -
为目标设备启动和监控命令执行
创建命令并指定命令的目标后,您可以通过执行以下步骤在目标设备上开始执行。
-
在目标设备上启动命令执行
从 C ommand Hub
开始执行,或者将 StartCommandExecutionAPI 与您的账户专用端点一起使用。iot:Data-ATS用于双堆栈 (IPv4/IPv6) 或 IPv4 仅iot:Jobs用于双堆栈。API 将负载发布到命令请求主题。
注意
如果设备处于离线状态并使用 MQTT 持久会话,则命令将在消息代理处等待。当设备在超时之前重新连接时,它可以处理命令并发布结果。如果超时到期,则执行超时,有效负载将被丢弃。
-
更新命令执行的结果
设备接收负载,处理命令,执行指定操作,并使用基于
UpdateCommandExecutionMQTT 的 API 将结果发布到命令响应主题。如果订阅了已接受和已拒绝的主题,则设备会收到云服务接受还是拒绝响应的确认信息。根据您在请求主题中指定的内容,
<devices>可以是事物或客户端,<DeviceID>可以是您的Amazon IoT事物名称或 MQTT 客户端 ID。注意
在命令响应主题中,
<PayloadFormat>只能是 JSON 或 CBOR。$aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat> -
(可选)检索命令执行结果
从Amazon IoT控制台或使用检索执行结果
GetCommandExecution。设备必须将结果发布到命令响应主题以获取最新信息。查看其他详细信息,包括上次更新时间、结果和完成时间。
(可选)启用命令事件通知
订阅 Commands 事件,以便在执行状态发生变化时收到通知。
-
创建主题规则
订阅命令事件主题以获取状态变更通知。使用控制台或创建主题规则,将设备数据路由到其他Amazon IoT服务Amazon Lambda,例如 Amazon SQS 和 Amazon Step Functi Amazon IoT ons。创建Amazon IoT规则
在此示例中,将
替换为您要接收通知的命令的标识符,并将<CommandID>替换为命令执行的状态。<CommandExecutionStatus>$aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>注意
要接收所有命令和命令执行状态的通知,您可以使用通配符并订阅以下主题。
$aws/events/commandExecution/+/# -
接收和处理命令事件
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}