你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将入口中的遥测数据映射到 IoT Central
数据映射允许你将复杂的设备遥测数据转换为 IoT Central 中的结构化数据。 对于你的每个设备,你可以将设备遥测消息中的特定 JSON 路径映射到别名。 别名是要映射到的目标的友好名称。 IoT Central 使用映射将中途的遥测数据变换到 IoT Central 中。 可以使用映射的遥测执行以下操作:
- 在 IoT Central 中创建设备模板和设备管理体验。
- 通过将多个设备上的 JSON 路径映射到一个通用别名,从而规范来自不同设备的遥测数据。
- 导出到 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 路径”字段中手动输入 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"
}
现在,可以使用映射的别名在图表或仪表板上显示遥测数据。 还可以在导出遥测数据时使用映射的别名。