如何检查设备是否在 AWS IoT Core 中离线

How to check if device is offline in AWS IoT Core

检查 AWS IoT Core 事物是否仍处于离线状态的最佳做法是什么?

对于许多人来说,能够查询 AWS IoT 事物的状态将成为他们应用程序的重要组成部分。 Lucky AWS 在此处提供了有关如何获取生命周期事件的最佳实践: https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html

文档中有一节描述了如何处理生命周期事件,他们在这里提到在收到断开连接生命周期事件后,您应该等待一段时间,然后再检查设备是否仍处于离线状态。

When that message becomes available and is processed (by Lambda or another service), you can first check if the device is still offline before taking further action.

这里的问题是如何检查设备是否仍处于离线状态?

文档中建议的基础结构是订阅主题“$aws/events/presence/disconnected/clientId”的 IoT 规则,将在 SQS 队列上创建消息。在 lambda 函数使用消息之前,SQS 队列将使用 deliveryDelay 属性延迟消息。正是在这个 lambda 函数中,我们应该检查设备是否仍处于离线状态。

我可以简单地实现一个带有设备状态和时间戳的 dynamodb table,每次有连接或断开事件时都会立即更新。但是必须有更智能的方法来确定设备是否仍处于离线状态?

您可以使用 Thing Indexing。它可以选择索引设备的连接状态 (thingConnectivityIndexingMode)。

你已经有了答案。触发断开连接事件后,您将假定客户端保持离线状态,除非 IoT Core 为同一客户端发送关于主题“$aws/events/presence/connected/clientId”的更新。

显然你需要订阅这两个主题。

如果您从一开始就考虑为什么需要物联网,那么在大多数情况下,事物索引并不是一个好主意。它只对亚马逊有好处,但不会给你任何价值。