Google IOT后端多久更新一次设备状态?

时间:2018-05-21 02:05:42

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

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

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

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

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

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

我的想法是,我希望根据设备统计信息收集可用性和正常运行时间指标以及警报。

所有这一切都有效,但我怀疑Google后端不经常更新心跳,事件和状态时间戳,有时会导致上述设置记录我的设备未启动的状态,事实上他们是。

我的问题是:

  • 我的设备心跳时间在设备状态下的更新速度有多快?分钟太短了吗?

  • 您会建议更好的方法来实现上述目标吗?这需要什么?

2 个答案:

答案 0 :(得分: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”。

答案 1 :(得分:1)

“ lastHeartbeatTime”是上一次接收PINGREQ的时间,如果连接空闲并且没有发送其他消息,它将被接收。 PINGREQ是您的MQTT保持活动时间为10秒。因此,如果10秒钟内没有任何消息,您应该得到一个PINGREQ。该信息应该在设备日志中可用。我建议将设备日志发送到stacdriver并使用日志获取有关可用性和正常运行时间的设备统计信息。 Here是如何执行此操作的示例。