0

我在 Microsoft Azure 门户中为 TwinChangeEvents创建了一条路由,当设备孪生发生更改时,我可以接收设备到云的消息。但该消息仅包含新的设备孪生值。我需要旧值进行分析,这样我就不必分析整个设备。

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

4

1 回答 1

4

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

以下屏幕片段显示了这种情况:

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

  2. TwinChangeEvents 消息的屏幕片段 - 版本 37: 版本37

  3. TwinChangeEvents 消息的屏幕片段 - 版本 38: 版本38

如您所见,上述孪生状态是相同的(没有变化),但是对于每个调用(步骤 1)我们都有一个新的版本号。

看起来这是一个错误,当孪生更改的通知正在工作的情况下,当孪生状态没有更改时。换句话说,这种通知应该只在设备状态发生变化时才起作用。修复此“错误”将简化设备中和 Azure IoT 中心路由背后的逻辑。

好吧,现在以下是我对如何获得旧设备孪生状态的问题的回答。

请注意,此功能当前未在 Azure IoT Hub 中实现,但向 Azure IoT 基础结构添加少量组件即可解决此问题。

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

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

TwinChangeEvents 存储库

Azure 函数由孪生更改事件触发,负责将它们映射到 Azure 表存储的行对象。之后,可以根据值、版本、时间戳等从表中查询具体的孪生状态。

于 2017-07-23T17:12:48.710 回答