如何绘制(我的意思是,获取数据来绘制) IotHub设备客户端连接状态的时间线?
我想从我的所有设备中绘制一个可用性状态时间表,因为我正在做以下工作:
当我的设备数量增加时,我会做很多请求,我想知道是否没有其他优化的方法来使用Azure IoT资源来完成它。
从“$edgeHub”模块Twin中,我得到了以下示例:
"reported": {
"clients": {
"iot/device": {
"status": "Connected",
"lastConnectedTimeUtc": "2020-11-30T12:00:41.5918442Z",
"lastDisconnectedTimeUtc": "2020-11-30T12:00:41.5737114Z"
}
}
对于API调用,我使用https://github.com/amenzhinsky/iothub
感谢任何帮助我调查更多有关Azure监控设备状态的响应。
发布于 2020-11-30 14:21:44
1.查询
我将选择使用IoT集线器查询,而不是一个一个地请求所有的模块双胞胎。
SELECT * FROM devices.modules WHERE is_defined(properties.reported.clients)
我不知道SDK是否支持这一点,但大多数(如果不是全部)官方SDK都支持运行查询。这将返回定义了clients
报告属性的每个模块孪生体。您可以按计划运行它,然后按照原来的计划将输出保存到数据库中。
2.将所有模块孪生事件路由到端点
这个比较棘手,但是您可以根据查询路由设备/模块更改。然后,可以将所有事件路由到单独的端点。路线是这样的:
IS_OBJECT($twin.properties.reported.clients)
您可以阅读关于消息路由这里的更多信息。这种方法的好处是,您不会对IoT集线器进行任何请求并实时接收更改。您甚至可以使用使用这些事件,它支持本地输出到Power、Table存储和Cosmos DB。结果:您没有编写代码,只使用Azure服务。如果你想利用,你可能需要咨询Azure定价计算器。
注意:我没有彻底测试解决方案2,但理论上这应该是可行的。
发布于 2020-12-01 04:03:15
要添加到@的答案,您还可以订阅设备孪生更改,并更新孪生更改事件的计数器。
发布于 2020-12-01 09:34:47
另一种方法是,尝试发送设备生命周期事件设备连接,设备从事件网格断开连接到事件中心。并从事件集线器将其发送到任何用于处理事件的端点,即可能是从事件集线器侦听事件的模块。
因此,流程将类似于-> IoT集线器->事件->添加订阅->添加事件集线器命名空间端点
https://stackoverflow.com/questions/65074343
复制相似问题