我正在使用带有mongoose操作系统的Google IOT核心。我想将设备连接状态更新为firestore。但是,当设备断开连接或重新连接时,例如设备是否脱机,我无法找到向pub / sub报告mqtt连接状态的事件。
我几天坚持这个问题。任何帮助都将受到赞赏
答案 0 :(得分:1)
不幸的是,由于此状态没有事件,因此现在没有内置方法可以做到这一点。
但是,您可以通过在设备上发送连接/断开连接的消息来实现黑客攻击,您可以使用订阅了Pub / Sub主题的Cloud功能进行侦听。它并不完美,因为它会在设备意外断开的情况下失败。
答案 1 :(得分:0)
当您的设备连接/断开连接时,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
答案 2 :(得分:0)
我目前无法找到方法(在此原始帖子发布一年后)。我也在这里在SO上发布了一个与此相关的问题,其中包含更多详细信息以及指向用于处理此问题的示例代码的链接: Google Core IoT Device Offline Event or Connection Status
答案 3 :(得分:-1)
<强>更新强>
正如@devunwired提到in this response,现在可以监视Stackdriver日志中的断开连接事件。您必须至少在IoT Core&gt;中启用项目的INFO级别日志记录。注册表&gt; [您的注册表]&gt;编辑注册表&gt;选择&#34;信息&#34;日志级别&gt;点击保存。
原始回复
您可以查看一些在设备配置元数据中跟踪的值,您可以使用这些值来了解设备上次联机的时间:
为了帮助您入门,here is an example using API explorer可以填写项目ID,区域,注册表和设备,以查询特定设备的元数据。
对于1 ... 3,您可以通过设备管理器和发布数据来控制这些。如果您的设备在&#34; ping期间发送MQTT_PINGREQ
消息,则更新MQTT心跳&#34;没有其他消息被发送。
无论如何,您可以使用这些更新时间值中的任何一个来查看设备上次在线/运行的时间。您可以在注册表中列出设备后查询设备的状态,如果您想要报告的方式(例如,使用AppEngine TaskQueue),可以定期更新Firebase RTDB。请注意,您也可以获得这些&#34;最后连接&#34;来自Google Cloud Console的值。
之前曾说过,但我们没有断开连接的事件,只是配置确认,这通常是连接事件。如果要在设备和设备管理器之间共享状态,请使用state messages。