Iot edge 报告客户端状态的时间线
Timeline of Iot edge reported clients status
如何绘制(我的意思是获取数据绘制)IotHub设备客户端连接状态的时间线?
我想从我的所有设备中绘制可用性状态时间表,为此我正在执行以下操作:
- 每隔一分钟:请求所有'$edgeHub'模块身份孪生
- 将“$edgeHub”报告的客户端保存在数据库中
- 从此数据库获取时间线
当我的设备数量增加时,我会做很多请求,我想知道是否有其他优化的方法可以使用 Azure 物联网资源来做。
从“$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 监控设备状态的回复。
1。查询
与其一一请求所有模块孪生,我会选择使用 IoT 中心查询。
SELECT * FROM devices.modules WHERE is_defined(properties.reported.clients)
我不知道你的 SDK 是否支持,但大多数(如果不是全部)官方 SDK 都支持 运行 查询。这将 return 每个具有 clients
报告 属性 定义的模块孪生。您可以 运行 按计划进行,然后按照您最初的计划将该输出保存到数据库中。
2。将所有模块孪生事件路由到端点
这个有点棘手,但您可以根据查询路由 device/module 更改。然后,您可以将所有事件路由到一个单独的端点。路线类似于:
IS_OBJECT($twin.properties.reported.clients)
您可以阅读有关消息路由的更多信息here。这种方法的好处是您无需向 IoT 中心发出任何请求并实时接收更改。您甚至可以使用 Azure 流分析来使用这些事件,它原生支持输出到 Power BI、Table 存储和 Cosmos DB。结果:您没有编写任何代码,仅使用了 Azure 服务。如果你想利用 Azure 流分析,你可能需要咨询 Azure 定价计算器。
注意:我没有彻底测试解决方案 #2,但理论上这 应该 有效。
要添加到@matthijs-van-der-veer 的回答,您还可以订阅设备孪生更改并更新孪生更改事件的计数器。
另一种方法,尝试将设备生命周期事件设备已连接、设备已断开连接从事件网格发送到事件中心。然后从事件中心将其发送到任何端点以处理事件,即可能是从事件中心侦听事件的模块。
所以流程会是这样->
IoT 中心 Blade -> 事件 -> 添加订阅 -> 添加事件中心命名空间终结点
如何绘制(我的意思是获取数据绘制)IotHub设备客户端连接状态的时间线?
我想从我的所有设备中绘制可用性状态时间表,为此我正在执行以下操作:
- 每隔一分钟:请求所有'$edgeHub'模块身份孪生
- 将“$edgeHub”报告的客户端保存在数据库中
- 从此数据库获取时间线
当我的设备数量增加时,我会做很多请求,我想知道是否有其他优化的方法可以使用 Azure 物联网资源来做。
从“$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 监控设备状态的回复。
1。查询
与其一一请求所有模块孪生,我会选择使用 IoT 中心查询。
SELECT * FROM devices.modules WHERE is_defined(properties.reported.clients)
我不知道你的 SDK 是否支持,但大多数(如果不是全部)官方 SDK 都支持 运行 查询。这将 return 每个具有 clients
报告 属性 定义的模块孪生。您可以 运行 按计划进行,然后按照您最初的计划将该输出保存到数据库中。
2。将所有模块孪生事件路由到端点
这个有点棘手,但您可以根据查询路由 device/module 更改。然后,您可以将所有事件路由到一个单独的端点。路线类似于:
IS_OBJECT($twin.properties.reported.clients)
您可以阅读有关消息路由的更多信息here。这种方法的好处是您无需向 IoT 中心发出任何请求并实时接收更改。您甚至可以使用 Azure 流分析来使用这些事件,它原生支持输出到 Power BI、Table 存储和 Cosmos DB。结果:您没有编写任何代码,仅使用了 Azure 服务。如果你想利用 Azure 流分析,你可能需要咨询 Azure 定价计算器。
注意:我没有彻底测试解决方案 #2,但理论上这 应该 有效。
要添加到@matthijs-van-der-veer 的回答,您还可以订阅设备孪生更改并更新孪生更改事件的计数器。
另一种方法,尝试将设备生命周期事件设备已连接、设备已断开连接从事件网格发送到事件中心。然后从事件中心将其发送到任何端点以处理事件,即可能是从事件中心侦听事件的模块。
所以流程会是这样-> IoT 中心 Blade -> 事件 -> 添加订阅 -> 添加事件中心命名空间终结点