如何使用azure功能在azure iot Hub中获取在线和离线设备状态

时间:2019-05-07 10:43:08

标签: azure-functions azure-iot-hub

使用azure功能在azure iot Hub中获取在线和离线设备状态

3 个答案:

答案 0 :(得分:0)

connectionState字段不可靠,不应用于查询设备状态。有关详细信息,请参见here

相反,建议您实施从您的设备发送的心跳。或者,您也可以在设备连接事件上创建Azure EventGrid订阅,并收听以下事件:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-how-to-order-connection-state-events#configure-subscription-for-iot-hub-events

// edit:实际上,您可以结合使用EventGrid:https://docs.microsoft.com/de-de/azure/azure-functions/durable/durable-functions-preview

来使用新的有状态的持久性Function功能用于您的用例。

答案 1 :(得分:0)

首先配置要从IoT中心发布的事件。更具体地说,DeviceConnected和DeviceDisconnected事件将解决您的目的。

然后最终在Azure函数中实现EventHub触发器以获取事件。

答案 2 :(得分:0)

@claymodel我认为这实际上与Azure Portal的IoT设备部分中 connectionState 的内部实现相同。

我之所以这样认为是因为 DeviceDisconnected 事件在 DeviceTwin 属性部分中显示的大约同一时间到达了Azure函数。

这意味着它基本上与底层实现一样不可靠。 几分钟后我才收到有关断开连接的通知-所以,没用

现在,每次执行操作前我都必须查询设备,以确保设备已实际连接。

这真是一场噩梦! 需要注意的另一件事-有两种方法可以通知设备生命周期事件:

  1. 来自消息路由部分,但实际上只发送EventData类内某种格式的已创建和已删除事件
  2. 从IoT中心的事件部分中创建一个订阅,并指向事件中心以处理 DeviceCreated DeviceDeleted DeviceConnected DeviceDisconnected -在EventData类内发送另一种格式。

因此IoT中心上的各个部分之间存在巨大的偏差。

说实话,我不知道是否存在以可靠方式检查设备连接的好答案。希望他们会在不久的将来对此有所作为