【问题标题】:How often does the Google IOT backend update Device State?Google IOT 后端多久更新一次设备状态?
【发布时间】:2018-05-21 02:05:42
【问题描述】:

我每分钟对以下 URL 执行一次 GET,以获取我的 IOT 注册表中所有设备的设备状态

GET https://cloudiot.googleapis.com/v1/{name=projects/*/locations/*/registries/*/devices/*}

获得Device 后,我有兴趣确定以下字段是否在当前时间戳的最后一分钟内:

  "lastHeartbeatTime": string
  "lastStateTime": string
  "lastEventTime": string

我的设备经常 ping 远程代理,MQTT Keep Alive 时间为 10 秒,所以我假设一分钟内最多有 6 次心跳。

这个想法是我想收集每个设备的可用性和正常运行时间指标以及警报的统计信息。

所有这些都有效,但我怀疑 Google 后端没有足够频繁地更新心跳、事件和状态时间戳,有时会导致上述设置记录我的设备未启动的统计信息,而实际上它们是。

我的问题是:

  • 我的设备检测信号时间在设备状态下的更新速度有多快?一分钟太短了吗?

  • 您能推荐一种更好的方法来实现上述目标吗?这意味着什么?

【问题讨论】:

    标签: google-cloud-platform mqtt google-cloud-iot


    【解决方案1】:

    仔细查看设备的 API 文档,状态似乎“过时了几分钟”。是否有任何暗示这个最大值可以是什么?:

    lastHeartbeatTime 字符串(时间戳格式)

    最后一次收到 MQTT PINGREQ。这个领域 仅适用于通过 MQTT 连接的设备。 MQTT 客户端通常 仅在连接空闲时发送 PINGREQ 消息,没有其他消息 消息已发送。时间戳被定期收集和 写入存储; 它们可能会过时几分钟

    RFC3339 UTC“Zulu”格式的时间戳,精确到纳秒。 示例:“2014-10-02T15:01:23.045123456Z”。

    lastEventTime 字符串(时间戳格式)

    最后一次收到遥测事件。时间戳 定期收集并写入存储; 它们可能已经过时了 几分钟

    RFC3339 UTC“Zulu”格式的时间戳,精确到纳秒。 示例:“2014-10-02T15:01:23.045123456Z”。

    lastStateTime 字符串(时间戳格式)

    最后一次收到状态事件。时间戳是 定期收集并写入存储; 它们可能已经过时了 几分钟

    RFC3339 UTC“Zulu”格式的时间戳,精确到纳秒。 示例:“2014-10-02T15:01:23.045123456Z”。

    【讨论】:

      【解决方案2】:

      “lastHeartbeatTime”是上次收到 PINGREQ 的时间,如果连接空闲且没有发送其他消息,则会收到该消息。 PINGREQ 是您的 MQTT Keep Alive 时间为 10 秒。因此,如果 10 秒内没有消息,您应该得到一个 PINGREQ。此信息应在设备日志中可用。我建议将设备日志发送到 stacdriver 并使用日志来获取设备统计信息以了解可用性和正常运行时间。 Here 是您如何做到这一点的示例。

      【讨论】:

        猜你喜欢
        • 2013-10-18
        • 2019-07-03
        • 1970-01-01
        • 2019-02-11
        • 1970-01-01
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多