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

管理 IoT 即插即用数字孪生

IoT 即插即用支持“获取数字孪生”和“更新数字孪生”操作以管理数字孪生。 可以使用 REST API,也可以使用服务 SDK 之一。

更新数字孪生

IoT 即插即用设备实现数字孪生定义语言(DTDL)描述的模型。 解决方案开发人员可以使用更新数字孪生 API 来更新组件的状态和数字孪生的属性。

本文中的示例 IoT 即插即用设备实现了具有恒温器组件的温度控制器模型

以下代码片段显示了对格式化为 JSON 对象的“获取数字孪生”请求的响应。 若要了解有关数字孪生格式的详细信息,请参阅了解 IoT 即插即用数字孪生

{
    "$dtId": "sample-device",
    "serialNumber": "alwinexlepaho8329",
    "thermostat1": {
        "maxTempSinceLastReboot": 25.3,
        "targetTemperature": 20.4,
        "$metadata": {
            "targetTemperature": {
                "desiredValue": 20.4,
                "desiredVersion": 4,
                "ackVersion": 4,
                "ackCode": 200,
                "ackDescription": "Successfully executed patch",
                "lastUpdateTime": "2020-07-17T06:11:04.9309159Z"
            },
            "maxTempSinceLastReboot": {
                "lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
            }
        }
    },
    "$metadata": {
        "$model": "dtmi:com:example:TemperatureController;1",
        "serialNumber": {
            "lastUpdateTime": "2020-07-17T06:10:31.9609233Z"
        }
    }
}

数字孪生允许使用 JSON 修补程序来更新整个组件或属性。

例如,可以更新 targetTemperature 属性,如下所示:

[
    {
        "op": "add",
        "path": "/thermostat1/targetTemperature",
        "value": 21.4
    }
]

上一个更新在相应的组件级别 $metadata 中设置属性的预期值,如以下代码片段所示。 IoT 中心将更新属性的预期版本:

"thermostat1": {
    "targetTemperature": 20.4,
    "$metadata": {
        "targetTemperature": {
            "desiredValue": 21.4,
            "desiredVersion": 5,
            "ackVersion": 4,
            "ackCode": 200,
            "ackDescription": "Successfully executed patch",
            "lastUpdateTime": "2020-07-17T06:11:04.9309159Z"
        }
    }
}

添加、替换或删除组件

组件级别操作需要值中有一个空对象 $metadata 标记。

添加或替换组件操作将设置所提供的所有属性的预期值。 它还将清除更新未提供的任何可写属性的预期值。

删除组件将清除存在的所有可写属性的预期值。 设备最终会同步此删除操作,并停止报告各个属性。 然后,将从数字孪生中删除该组件。

下面的 JSON 修补程序示例演示如何添加、替换或删除组件:

[
    {
        "op": "add",
        "path": "/thermostat1",
        "value": {
            "targetTemperature": 21.4,
            "anotherWritableProperty": 42,
            "$metadata": {}
        }
    },
    {
        "op": "replace",
        "path": "/thermostat1",
        "value": {
            "targetTemperature": 21.4,
            "$metadata": {}
        }
    },
    {
        "op": "remove",
        "path": "/thermostat2"
    }
]

添加、替换或删除属性

添加或替换操作将设置属性的预期值。 设备可同步状态,并报告值更新以及 ack 代码、版本和说明。

删除属性将清除属性的预期值(如果已设置)。 然后,设备可以停止报告此属性,并将其从组件中删除。 如果此属性是组件中的最后一个属性,则也会删除该组件。

以下 JSON 修补程序示例演示如何在组件中添加、替换或删除属性:

[
    {
        "op": "add",
        "path": "/thermostat1/targetTemperature",
        "value": 21.4
    },
    {
        "op": "replace",
        "path": "/thermostat1/anotherWritableProperty",
        "value": 42
    },
    {
        "op": "remove",
        "path": "/thermostat2/targetTemperature",
    }
]

数字孪生属性的预期值的设置规则

Name

组件或属性的名称必须是有效的 DTDL 名称。

允许的字符为 a-z、A-Z、0-9(不得作为第一个字符)以及下划线(不得作为第一个或最后一个字符)。

名称长度可以为 1-64 个字符。

属性值

该值必须是有效的 DTDL 属性

所有基元类型都受支持。 复杂类型支持枚举、映射和对象。 若要了解详细信息,请参阅 DTDL 架构

属性不支持数组或具有数组的任何复杂架构。

复杂对象支持的最大深度为五级。

复杂对象中的所有字段名称都应是有效的 DTDL 名称。

所有映射键都应是有效的 DTDL 名称。

更新数字孪生 API 错误故障排除

数字孪生 API 引发以下一般错误消息:

ErrorCode:ArgumentInvalid;'{propertyName}' exists within the device twin and is not digital twin conformant property. Please refer to aka.ms/dtpatch to update this to be conformant.

如果看到此错误,请确保更新修补程序遵循数字孪生体属性的期望值的设置规则

更新组件时,请确保设置空对象 $metadata 标记

如果设备报告的值不符合 IoT 即插即用约定,更新可能会失败。

后续步骤

现在,你已了解数字孪生体,以下是一些其他资源: