【问题标题】:Difference between AWS IoT shadow file desired and reported fieldsAWS IoT 影子文件所需字段和报告字段之间的差异
【发布时间】:2021-01-25 17:13:11
【问题描述】:

我正在查看AWS IoT documentation for shadow states 并试图更好地了解影子文件中desiredreported 的使用。

文档说明:

当影子的状态发生变化时,AWS IoT 向所有 MQTT 订阅者发送 /delta 消息,其中包含所需状态和报告状态之间的差异。

在查看了其余的文档后,我觉得我对 desiredreported 的用例没有清楚的了解。有人可以解释用例吗?我们什么时候使用一个与另一个?

【问题讨论】:

    标签: amazon-web-services aws-iot


    【解决方案1】:

    让我们从头开始,设备影子是 AWS IoT Registry 中定义的事物的持久虚拟影子。基本上,它是一个 JSON 状态文档,用于存储和检索事物的当前状态信息。您可以使用 MQTT 主题或 REST API 调用与设备影子进行交互。 Shadows 的主要优点是您可以与它进行交互,无论该事物是否连接到 Internet。

    影子的文档包含描述设备状态各个方面的状态属性:

    {
      "state": {
        "desired": {
          "color": "RED"
        },
        "reported": {
          "color": "GREEN"
        },
        "delta": {
          "color": "RED"
        }
      }
    }
    

    下面是每个状态的描述:

    • 应用通过更新desired 对象来指定所需的设备属性状态。
    • 设备在reported 对象中报告其当前状态。
    • AWS IoT 在delta 对象中报告所需状态和报告状态之间的差异。

    每个影子都有一个保留的 MQTT 主题和 HTTP URL,支持对影子的 getupdatedelete 操作。一起来看看吧:

    • $aws/things/THING_NAME/shadow/update:发布到这个主题以更新/创建影子;
    • $aws/things/THING_NAME/shadow/update/accepted:AWS IoT 在接受更新请求时将状态文档的 reporteddesired 部分发布到此主题;
    • $aws/things/THING_NAME/shadow/update/rejected:AWS IoT 在拒绝更新请求时向该主题发布错误消息;
    • $aws/things/THING_NAME/shadow/update/documents:只要成功执行影子更新,AWS IoT 就会向该主题发布一个状态文档,其中包含 PreviousCurrent 状态信息;
    • $aws/things/THING_NAME/shadow/update/delta:当 AWS IoT 接受事物影子的更改并且请求状态文档包含所需状态和报告状态的不同值时,它会向该主题发布响应 Delta State Document。

    这是一个例子。假设我们有一个空气净化器,我们想改变风扇速度。流程如下:

    1. 用户通过空气净化器移动应用更改风扇速度
    2. 移动应用程序将以下 JSON 消息发布到此 MQTT 主题:$aws/things/THING_NAME/shadow/update 以使用新的所需状态更新设备影子:"fanSpeed": 50。它看起来像这样:
    {
      "state": {
        "desired": {
          "fanSpeed": 50
        }
      }
    }
    
    1. 影子更新成功后,如果之前的reported 状态与"fanSpeed": 50 不同,AWS IoT 会将desired 状态发布到增量主题$aws/things/THING_NAME/shadow/update/delta
    2. 影子状态文档可能如下所示:
    {
      "state": {
        "desired": {
          "fanSpeed": 50
        },
        "reported": {
          "fanSpeed": 100
        },
        "delta": {
          "fanSpeed": 50
        }
      }
    }
    
    1. 订阅了 delta 主题的设备(我们的空气净化器)将执行请求的操作(在这种情况下将风扇速度设置为 50),并使用更新主题 $aws/things/THING_NAME/shadow/update 将新状态报告回 AWS IoT Device Shadow带有以下 JSON 消息:
    {
      "state": {
        "reported": {
          "fanSpeed": 50
        }
      }
    }
    

    现在我们的空气净化器的风扇转速为 50...这就是它的工作原理;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-03
      • 2012-06-22
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      相关资源
      最近更新 更多