我在以下网址上每分钟执行一次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后端不经常更新心跳,事件和状态时间戳,有时会导致上述设置记录我的设备未启动的状态,事实上他们是。
我的问题是:
我的设备心跳时间在设备状态下的更新速度有多快?分钟太短了吗?
您会建议更好的方法来实现上述目标吗?这需要什么?
答案 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是如何执行此操作的示例。