命令概念和状态 - AWS IoT Core

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

命令概念和状态

使用 AWS IoT 命令将指令从云端发送到已连接的设备 AWS IoT。要使用命令功能,请执行以下操作:

  1. 首先,创建一个包含在设备上运行命令所需的配置的有效载荷的命令资源。

  2. 指定将接收有效负载并执行指定操作的目标设备。

  3. 在目标设备上运行该命令,然后从设备检索状态信息。要对任何问题进行故障排除,请参阅日 CloudWatch 志。

有关工作流的更多信息,请参阅 高级命令工作流程

命令关键概念

下文显示了使用命令功能的一些关键概念。

命令

命令是从云端发送到您的物联网设备的指令。这些指令(命令有效负载)作为MQTT消息发送到设备。设备收到命令有效载荷后,可以处理指令以采取相应的操作。此类操作的示例包括修改设备配置设置、传输传感器读数或上传日志。然后,设备可以运行命令并将结果返回到云端。这使您能够远程监视和控制连接的设备。

命名空间

使用命令功能时,可以为命令指定命名空间。要在中创建命令时 AWS IoT Device Management,必须使用默认AWS-IoT命名空间。使用此命名空间时,必须在创建命令时提供有效负载。当您在目标设备上运行命令时,将使用有效负载。如果要 AWS IoT FleetWise 改为创建命令,则必须改用AWS-IoT-FleetWise命名空间。有关更多信息,请参阅命令AWS IoT FleetWise 开发者指南中的远程命令

有效载荷

创建命令时,必须提供一个用于定义设备必须执行的操作的有效负载。有效载荷可以使用您选择的任何格式。为确保设备能够正确读取和理解您发送的信息,我们建议您在命令中指定有效负载格式类型。如果您的设备使用MQTT5,它们可以按照MQTT标准来识别有效载荷格式。JSON或的格式指示器CBOR将在命令请求主题中提供。

目标设备

要运行命令时,必须指定接收命令并执行操作的目标设备。如果您的设备已注册为事物 AWS IoT,则可以使用事物名称。如果您的设备尚未注册,则可以改用MQTT客户端 ID。客户端 ID 是MQTT协议中定义的设备或客户端的唯一标识符。它可以用来将您的设备连接到 AWS IoT.

命令执行

命令执行是在目标设备上运行的命令的实例。开始执行时,命令(有效载荷)将传送到目标设备。现在将为目标生成一个唯一的命令执行 ID。然后,设备可以执行命令并将其进度报告给 AWS IoT。设备端逻辑决定如何执行命令以及如何将状态发布到保留主题。

命令主题

在运行命令之前,您的设备必须已订阅命令请求主题。当您将请求发送到云端以执行命令时,有效负载将根据命令请求主题发送到设备。设备执行命令后,可以将执行结果和状态发布到命令响应主题。有关更多信息,请参阅 命令主题

命令状态

您在中创建的命令 AWS 账户 可以处于 “可”、“已弃用” 或 “待删除” 状态。

可用

成功创建命令资源后,它将处于可用状态。现在,该命令可用于向设备发送执行命令。

已弃用

如果您不再打算使用某个命令,则可以将其标记为已弃用。在此状态下,您无法将该命令的任何新执行发送到您的设备。任何已经开始的待处理执行将继续在设备上运行直至完成。要发送新的执行任务,必须恢复命令以使其可用。

待删除

当您将命令标记为删除时,如果该命令已被弃用的持续时间超过最大超时时间,则该命令将被自动删除。此操作是永久性的,无法撤消。默认情况下,最大超时持续时间为 12 小时。如果该命令未被弃用,或者已被弃用的时间短于最大超时时间,则该命令将处于待删除状态。在最长超时时间过后,该命令将自动从您的账户中删除。

命令执行状态

当您在目标设备上开始执行命令时,命令执行进入CREATED状态。然后,它可以根据设备报告的状态转换为任何其他命令执行状态。然后,您可以检索状态信息并跟踪命令执行情况。

注意

对于给定的目标设备,您可以同时运行多个命令。您可以使用并发控制功能来限制发送到同一设备的最大执行次数,从而防止设备过载。有关您可以为每台设备运行的最大并发执行次数的信息,请参阅AWS IoT Device Management 命令配额

下表显示了命令执行的不同状态,以及命令执行如何根据执行进度在各种状态之间过渡。

命令执行状态和来源
命令执行状态 由设备/云端启动? 终止执行? 允许的状态转换
CREATED
  • 在_ PROGRESS

  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

IN_PROGRESS 设备
  • 在_ PROGRESS

  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

TIMED_OUT 设备和云
  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

SUCCEEDED 设备 Yes 不适用
FAILED 设备 Yes 不适用
REJECTED 设备 Yes 不适用

当您的设备执行命令时,它可以随时使用命令保留MQTT主题将状态和结果的更新发布到云端。要向云端提供有关每个命令执行状态的更多上下文,它可以使用statusReason对象中包含的reasonCodereasonDescription

下图显示了各种命令执行状态以及它们之间的过渡是如何发生的。

该图显示了命令执行状态如何在各种状态之间转换。

下一节介绍终端和非终端命令的执行、各种执行状态及其工作原理。

非终端命令执行

如果执行可以接受来自设备或客户端的更新,则您的命令执行将处于非终止状态。处于非终止状态的执行被视为激活。以下状态为非终端状态。

  • CREATED

    当您从 AWS IoT 控制台开始执行命令时,或者使用命令请求主题将命令发送StartCommandExecutionAPI到您的设备时。如果请求成功,则命令执行状态将更改为CREATED。从此状态开始,命令执行可以过渡到任何其他非终端或终端状态。

  • 在_ PROGRESS

    收到命令有效载荷后,您的设备可以开始执行有效负载中的指令并执行指定的操作。在执行命令时,设备可以发布对命令响应主题的响应,并将命令执行状态更新为IN_PROGRESS。从IN_PROGRESS状态开始,命令执行可以转换到除之外的任何其他终端或非终端状态。CREATED

    注意

    UpdateCommandExecutionAPI可以多次调用,状态为IN_PROGRESS。您可以使用statusReason对象指定有关执行的更多详细信息。

  • TIMED_OUT

    此命令执行状态可以由云端和设备触发。由于以下原因,执行IN_PROGRESS状态CREATEDTIMED_OUT状态可能会更改为状态。

    • 命令发送到设备后,计时器启动。如果设备在指定时间内没有响应,则云会将命令执行状态更改为TIMED_OUT。在这种情况下,命令的执行是非终止的。

    • 设备可以将状态改写为任何其他终端状态,或者报告执行命令时出现超时,并将状态设置为。TIMED_OUT在这种情况下,执行状态保持为,TIMED_OUTStatusReason对象的字段会根据设备报告的信息而变化。命令执行现在变为终止。

    有关更多信息,请参阅 超时值和TIMED_OUT执行状态

终端命令执行

如果命令执行不再接受来自设备的任何其他更新,则该命令的执行将变为终止。以下状态为终端。执行可以从任何非终端状态转换到终端状态、CREATEDIN_PROGRESS或。TIMED_OUT

  • SUCCEEDED

    如果设备成功完成命令的执行,则可以发布对命令响应主题的响应并将命令执行状态更新为SUCCEEDED

  • FAILED

    当您的设备无法完成命令执行时,它可以发布对命令响应主题的响应,并将命令执行状态更新为FAILED。您可以使用statusReason对象的reasonCodereasonDescription字段或 CloudWatch 日志来进一步排除故障。

  • REJECTED

    当您的设备收到无效或不兼容的请求时,设备可以调UpdateCommandExecutionAPI用状态为REJECTED。您可以使用statusReason对象的reasonCodereasonDescription字段或 CloudWatch 日志来进一步解决任何问题。