【发布时间】:2018-07-12 16:35:09
【问题描述】:
我正在使用带有 mongoose 操作系统的 Google IOT 核心。我想将设备连接状态更新到 Firestore。但我无法找到向 pub/sub 报告 mqtt 连接状态的事件,例如设备断开连接或重新连接时,即设备是否离线。
我被这个问题困扰了好几天。任何帮助将不胜感激
【问题讨论】:
标签: mqtt iot google-cloud-pubsub google-cloud-iot
我正在使用带有 mongoose 操作系统的 Google IOT 核心。我想将设备连接状态更新到 Firestore。但我无法找到向 pub/sub 报告 mqtt 连接状态的事件,例如设备断开连接或重新连接时,即设备是否离线。
我被这个问题困扰了好几天。任何帮助将不胜感激
【问题讨论】:
标签: mqtt iot google-cloud-pubsub google-cloud-iot
不幸的是,目前没有内置的方法来执行此操作,因为此状态没有事件。
但是,您可以通过在连接/断开连接的设备上发送一条消息来实施黑客攻击,您有一个订阅了 Pub/Sub 主题的云函数。它并不完美,因为它会在设备意外断开连接的情况下失败。
【讨论】:
更新
正如@devunwired 提到的in this response,现在可以监控 Stackdriver 日志中的断开连接事件。您必须在 IoT Core > 注册表 > [您的注册表] > 编辑注册表 > 选择“信息”日志级别 > 单击保存中的项目中至少启用 INFO 级别日志记录。
原始回复
您可以查看在设备配置元数据中跟踪的一些值,您可以使用这些值来了解设备上次在线的时间:
为了让您开始,here is an example using API explorer 您可以填写您的项目 ID、区域、注册表和设备以查询特定设备的元数据。
对于 1...3,您可以通过设备管理器和发布数据来控制这些。如果您的设备在“ping 期间”发送MQTT_PINGREQ 消息而没有发送其他消息,则 MQTT 检测信号会更新。
无论如何,您都可以使用这些更新时间值中的任何一个来查看设备上次联机/运行的时间。您可以在注册表中列出设备后查询设备的状态,并且可以定期更新 Firebase RTDB,如果这是您想要报告的方式(例如,使用 AppEngine TaskQueue)。请注意,您也可以从 Google Cloud Console 获取这些“最后连接”值。
之前说过但是我们没有disconnect的事件,只是配置ack,一般是connection事件。如果您想在设备和设备管理器之间共享状态,请使用state messages。
【讨论】:
当您的设备连接/断开连接时,AWS IoT 平台会发布有关特殊 MQTT 主题(前缀为 $aws)的消息。您可以轻松地使用它们来监控这些事件 - 但是,您应该知道 MQTT 协议旨在对较差的网络条件具有鲁棒性,并且 AWS 端的代理可能认为断开客户端连接并不重要.代理希望客户端在该过程中重新连接并排队一段时间(这对微控制器来说可能很重要)。
话虽如此,您将关注的 AWS 主题是:
$aws/events/presence/connected/{clientId}
和
$aws/events/presence/disconnected/{clientId}
这些(和其他)生命周期事件的文档位于:https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html
【讨论】:
目前没有办法做到这一点,我已经能够找到(在这个原始帖子一年后)。我在 SO 上也发布了一个关于此的问题,其中包含更多详细信息和指向我必须用于处理此问题的示例代码的链接: Google Core IoT Device Offline Event or Connection Status
【讨论】: