谷歌物联网核心连接状态
Posted
技术标签:
【中文标题】谷歌物联网核心连接状态【英文标题】:Google iot core connection status 【发布时间】:2018-07-12 16:35:09 【问题描述】:我正在使用带有 mongoose 操作系统的 Google IOT 核心。我想将设备连接状态更新到 Firestore。但我无法找到向 pub/sub 报告 mqtt 连接状态的事件,例如设备断开连接或重新连接时,即设备是否离线。
我被这个问题困扰了好几天。任何帮助将不胜感激
【问题讨论】:
【参考方案1】:不幸的是,目前没有内置的方法来执行此操作,因为此状态没有事件。
但是,您可以通过在连接/断开连接的设备上发送一条消息来实施黑客攻击,您有一个订阅了 Pub/Sub 主题的云函数。它并不完美,因为它会在设备意外断开连接的情况下失败。
【讨论】:
其他云物联网服务是否有此选项,如 aws 或 azure。 我不知道。我在谷歌工作,所以我对他们的系统不太熟悉。我快速浏览了 AWS 的事件,但没有看到用于连接/断开连接的事件,但我绝对可能只是在他们的文档中遗漏了它。【参考方案2】:更新
正如@devunwired 提到的in this response,现在可以监控 Stackdriver 日志中的断开连接事件。您必须在 IoT Core > 注册表 > [您的注册表] > 编辑注册表 > 选择“信息”日志级别 > 单击保存中的项目中至少启用 INFO 级别日志记录。
原始回复
您可以查看在设备配置元数据中跟踪的一些值,您可以使用这些值来了解设备上次在线的时间:
-
上次配置发送时间 - 在您的设备连接时发送/
配置已发布
上次事件时间 - 上次从设备发送事件的时间
上次状态时间 - 上次从设备发送状态的时间
上次检测信号时间 - 上次发送 MQTT 检测信号的时间
为了让您开始,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。
【讨论】:
谢谢,我认为这可能有效。我无法访问 google iot v1beta1 api。 cloudiot.googleapis.com/$discovery/rest?version=v1beta1 每当我尝试此发现 api 时,都会显示未找到 API 服务的发现文档。你能帮忙吗 我的错,我需要更新这些样本以改用 v1(我们正在从 v1beta1 开始)。 很抱歉在评论中提出另一个问题,我只是想知道如何使用 qos 0 从 firebase 功能发送 iot 配置消息。我在文档中找不到任何内容。 @HonneyGoyal 可能值得再问一个问题,但您可以使用 NodeJS 管理器示例确保在 package.json 中为您的云功能添加依赖项。 我们不应该只检查设备是否在线。它就像 MQTT 连接/断开连接一样简单,但我越来越发现 Google 的 IoT 功能是多么不完整.. 这使得仅使用核心 iot 和 firebase 而不需要为基本的 iot 东西编写一堆辅助函数变得很困难【参考方案3】:当您的设备连接/断开连接时,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
【讨论】:
问题是关于谷歌云物联网平台,而不是关于 AWS。 嗯,很难相信我为完全错误的平台写了回复。很奇怪。【参考方案4】:目前没有办法做到这一点,我已经能够找到(在这个原始帖子一年后)。我在 SO 上也发布了一个关于此的问题,其中包含更多详细信息和指向我必须用于处理此问题的示例代码的链接: Google Core IoT Device Offline Event or Connection Status
【讨论】:
以上是关于谷歌物联网核心连接状态的主要内容,如果未能解决你的问题,请参考以下文章
使用 AFNetworking 检查 Internet 连接状态
[Firebase/Core][I-COR000020] 发布到 Clearcut 时出错:错误域 = NSURLErrorDomain 代码 = -1009“互联网连接似乎处于脱机状态