如何从Microsoft Azure IoT Hub中的TwinChangeEvents事件中获取旧设备双值?

时间:2017-07-20 18:11:25

标签: azure-iot-hub azure-iot-sdk

对于Microsoft Azure门户中的TwinChangeEvents,我created a route,当设备双胞胎发生变化时我可以Receive device-to-cloud messages。但该消息仅包含新设备的双值。我需要旧的分析值,以便我不必分析整个设备。

有什么方法可以获得旧价值吗?

1 个答案:

答案 0 :(得分:2)

首先,我想指出,每次用于更新设备双胞胎状态的服务时,Azure IoT Hub中双胞胎所需更改通知和 TwinChangeEvents 的实现都会生成一个事件如果设备双胞胎状态保持不变(没有变化),则调用并不重要。此行为的结果是同一设备双态的新版本号。

以下屏幕截图显示了这种情况:

  1. 用于更新双胞胎状态的REST API调用,您可以多次发送: PatchDeviceTwin

  2. TwinChangeEvents消息的屏幕摘要 - 版本37: Version37

  3. TwinChangeEvents消息的屏幕摘要 - 版本38: Version38

  4. 如您所见,上述双胞胎状态相同(无变化),但对于每个呼叫(步骤1),我们都有一个新的版本号。

    看起来这是一个错误,当双胞胎改变的通知在这种情况下起作用时,双胞胎状态没有改变。 换句话说,这种通知仅在设备状态已更改时才有效。 解决这个" bug"将简化设备中的逻辑和Azure IoT Hub路径后面的逻辑。

    好吧,现在以下是我对你的问题的答案,如何让旧设备成为双胞胎状态。

    请注意,Azure IoT Hub目前尚未实现此功能,但是向Azure IoT基础架构添加少量组件可以解决此问题。

    选项1: - 创建 TwinChangeEvents Stream Pipeline ,请参见下图: TwinChangeEventsStreamPipeline ASA作业可以根据业务模型要求在热路径或冷路径中运行。请注意,此选项需要为Capture和ASA Job实体支付额外费用(约120美元/月)。

    选项2: - 创建 TwinChangeEvents存储库(存储),请参见下图:

    TwinChangeEventsRepository

    Azure功能由双变更事件触发,负责将它们映射到Azure表存储的行对象。之后,可以根据值,版本,时间戳等从表中查询特定的双胞胎状态。