你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将入口中的遥测数据映射到 IoT Central

数据映射允许你将复杂的设备遥测数据转换为 IoT Central 中的结构化数据。 对于你的每个设备,你可以将设备遥测消息中的特定 JSON 路径映射到别名。 别名是要映射到的目标的友好名称。 IoT Central 使用映射将中途的遥测数据变换到 IoT Central 中。 可以使用映射的遥测执行以下操作:

  • 在 IoT Central 中创建设备模板和设备管理体验。
  • 通过将多个设备上的 JSON 路径映射到一个通用别名,从而规范来自不同设备的遥测数据。
  • 导出到 IoT Central 以外的目标。

提示

如果要从未建模的遥测数据自动生成设备模板,请参阅自动生成设备模板

汇总 IoT Central 中的映射过程的图表。

以下视频会演示数据映射过程:

为设备映射遥测数据

映射使用 JSONPath 表达式来标识传入的遥测数据消息中的值,以映射到别名。

JSONPath 表达式以 $ 字符开头,此字符引用消息的根元素。 $ 后面是使用方括号分隔的子元素序列。 例如:

$["messages"]["tmp"]

$["opcua"]["payload"][0]["value"]

$["Messages"]["Payload"]["nsu=http://microsoft.com/Opc/OpcPlc/;s=FastUInt1"]["Value"]

IoT Central 使用 JSONPath 表达式语法的子集:

  • 每个段只能为非负数或用双引号引起来的字符串。
  • 段不能包含反斜杠、方括号和双引号。
  • 一个 JSON 路径的长度不能超过 1,000 个字符。

若要在 IoT Central 应用程序中创建映射,请选择以下选项之一以导航到“映射数据”面板:

  • 在任何设备页面中,选择“管理设备和映射数据”:

    显示“映射数据”菜单项的屏幕截图。

  • 从设备的“原始数据”视图中,展开任何遥测数据消息,将鼠标指针悬停在路径上,然后选择“添加别名”。 此时将打开“映射数据”面板,同时将 JSONPATH 表达式复制到 JSONPATH 字段:

    显示“原始数据”视图中的“添加别名”选项的屏幕截图。

“映射数据”面板左侧显示了来自设备的最新消息。 将鼠标悬停在数据的任何部分上,然后选择“添加别名”。 将 JSONPath 表达式复制到“JSON 路径”。 添加不超过 64 个字符的别名。 不能使用别名来引用在设备模板中定义的复杂对象中的字段。

根据需要添加尽可能多的映射,然后选择“保存”:

“映射数据”视图的屏幕截图,其中显示 Json 路径和别名。

对于给定设备:

  • 不允许两个映射使用同一个 JSON 路径。
  • 不允许两个映射使用同一个别名。

提示

你可能需要等待几分钟,你的设备才能发送遥测数据消息,并显示在左侧面板上。 如果左侧面板中仍然没有数据,则可以在“JSON 路径”字段中手动输入 JSONPATH 表达式。

要验证 Iot Central 正在映射遥测数据,请导航到设备的“原始数据”视图并检查 _mappeddata 部分:

显示“原始数据”视图的消息中的映射数据部分的屏幕截图。

如果在多次刷新原始数据后没有看到映射的数据,请检查你使用的 JSONPath 表达式是否与遥测数据消息的结构匹配。

对于 IoT Edge 设备,数据映射应用于遥测来自所有 IoT Edge 模块和中心的遥测数据。 不能将映射应用到某一特定 Azure IoT Edge 模块。

对于分配给设备模板的设备,你无法映射组件或继承接口的数据。 不过,可以在将设备中的数据分配给设备模板之前,对其进行映射

管理映射

要查看、编辑或删除映射,请导航到“映射的别名”页面。 选择一个映射即可编辑或删除。 你可以选择多个映射并同时删除:

显示带有“编辑”和“删除”按钮的“映射别名”视图的屏幕截图。

默认情况下,IoT Central 中的数据导出包括映射的数据。 要排除映射数据,请在数据导出中使用数据转换。

映射未建模的遥测数据

可以映射未建模的遥测数据,包括来自未建模组件的遥测数据。 例如,给定根组件中定义的 workingSet 遥测数据和恒温器组件中定义的 temperature 遥测数据,如下例所示:

{
  "_unmodeleddata": {
    "workingSet": 74
  },
  "_eventtype": "Telemetry",
  "_timestamp": "2022-07-18T09:22:40.257Z"
}

{
  "_unmodeleddata": {
    "thermostat2": {
      "__t": "c",
      "temperature": 44
    }
  },
  "_eventtype": "Telemetry",
  "_timestamp": "2022-07-18T09:21:48.69Z"
}

可以使用以下映射定义映射此遥测数据:

  • $["workingSet"] ws
  • $["temperature"] temp

注意

不要在映射定义中包含组件名称。

这些映射规则的结果类似于以下示例:

{
  "telemetries": {
    "workingSet": 84,
    "_mappeddata": {
      "ws": 84
    }
  }
}

{
  "_unmodeleddata": {
    "thermostat2": {
      "__t": "c",
      "temperature": 12
    },
    "_mappeddata": {
      "thermostat2": {
        "__t": "c",
        "temp": 12
      }
    }
  },
  "_eventtype": "Telemetry",
  "_timestamp": "2022-07-18T09:31:21.088Z"
}

现在,可以使用映射的别名在图表或仪表板上显示遥测数据。 还可以在导出遥测数据时使用映射的别名。