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

教程:扩建端到端解决方案

此 Azure 数字孪生教程介绍了如何扩建端到端解决方案,以演示该服务的功能。 若要设置由环境中的实时数据驱动的完整端到端解决方案,可以将 Azure 数字孪生实例连接到其他 Azure 服务,以管理设备和数据。

在本教程中,你将...

  • 设置 Azure 数字孪生实例
  • 了解示例建筑方案,并实例化预先编写的组件
  • 使用 Azure Functions 应用将模拟的遥测从 IoT 中心设备路由到数字孪生属性
  • 通过使用 Azure Functions、终结点和路由处理数字孪生通知,通过孪生图传播更改

先决条件

开始本教程之前,请先满足以下先决条件:

  • 如果没有 Azure 订阅,请在开始之前创建一个免费帐户
  • 本教程使用 .NET。 可以从下载 .NET 下载适用于多个平台的最新版 .NET SDK。

然后继续完成本部分其余内容,设置剩余的先决条件。

获取示例资源

本教程是在使用 C# 编写的 Azure 数字孪生端到端示例项目推动下编写的。 导航到示例链接,然后选择标题下方的“浏览代码”按钮,在你的计算机上获取示例项目。

此时会转到这些示例的 GitHub 存储库,你可以通过选择“代码”按钮然后再选择“下载 ZIP”将其下载为 .zip。

GitHub 上的 digital-twins-samples 存储库的屏幕截图,突出显示了将该存储库下载为 zip 的步骤。

这会将 .zip 文件夹以 digital-twins-samples-main.zip 形式下载到计算机上。 解压缩文件夹并提取文件。

准备 Azure 数字孪生实例

若要在本文中使用 Azure 数字孪生,你需要有一个 Azure 数字孪生实例,还需具备使用它所必需的权限。 如果你已设置了一个 Azure 数字孪生实例,则可以使用该实例并跳到下一部分。 如果没有,请按照设置实例和身份验证中的说明操作。 该说明中包含可帮助你验证是否已成功完成每个步骤的信息。

设置实例后,记下实例的主机名。 可以在 Azure 门户中找到该主机名

为 Azure CLI 准备环境

设置 CLI 会话

若要开始在 CLI 中使用 Azure 数字孪生,首先要做的是登录并将 CLI 上下文设置为此会话的订阅。 在 CLI 窗口中运行以下命令:

az login
az account set --subscription "<your-Azure-subscription-ID>"

提示

在上面的命令中,还可以使用订阅名称而不使用 ID。

如果这是你首次将此订阅与 Azure 数字孪生一起使用,请运行该命令以向 Azure 数字孪生命名空间进行注册。 (如果不确定,可以再次运行该命令,即使过去某个时候操作过也是如此。)

az provider register --namespace 'Microsoft.DigitalTwins'

接下来,添加适用于 Azure CLI 的 Microsoft Azure IoT 扩展以支持用于与 Azure 数字孪生和其他 IoT 服务进行交互的命令。 运行此命令以确保你已安装最新版本的扩展:

az extension add --upgrade --name azure-iot

现在 Azure 数字孪生已可在 Azure CLI 中使用。

若要验证 Azure 数字孪生在 Cloud Shell 中的就绪性,可以随时运行 az dt --help 查看可用的顶层 Azure 数字孪生命令列表。

配置示例项目

接下来,设置将与 Azure 数字孪生实例交互的示例客户端应用程序。

在计算机上,导航到先前从 Azure 数字孪生端到端示例下载的文件夹(如果尚未解压缩,则将其解压缩)。

在该文件夹中,导航到“digital-twins-samples-main\AdtSampleApp\SampleClientApp”并打开“appsettings.json”文件。 此 JSON 文件包含运行项目所需的配置变量。

在文件正文中,将 instanceUrl 更改为 Azure 数字孪生实例主机名 URL(通过在主机名前面添加 https://,如下所示)。

{
  "instanceUrl": "https://<your-Azure-Digital-Twins-instance-host-name>"
}

保存并关闭该文件。

设置本地 Azure 凭据

当你在本地计算机上运行示例时,此示例使用 DefaultAzureCredential(属于 Azure.Identity 库的一部分)对用户进行 Azure 数字孪生实例验证。 若要详细了解客户端应用可向 Azure 数字孪生进行身份验证的不同方法,请参阅编写应用身份验证代码

使用 DefaultAzureCredential,此示例将在本地环境中搜索凭据,如本地 DefaultAzureCredential 或 Visual Studio/Visual Studio Code 中的 Azure 登录。 因此,应该通过这些机制在本地登录 Azure,以便设置示例的凭据。

如果使用 Visual Studio 或 Visual Studio Code 运行代码示例,请确保使用要用于访问 Azure 数字孪生实例的相同 Azure 凭据登录到该编辑器。 如果使用本地 CLI 窗口,请运行 az login 命令来登录到你的 Azure 帐户。 此后,当你运行代码示例时,系统应自动对你进行身份验证。

开始使用建筑方案

本教程中使用的示例项目代表真实的建筑方案,包含楼层、房间和温控设备。 Azure 数字孪生实例将以数字形式表示这些组件,然后连接到 IoT 中心事件网格和两个 Azure 函数以实现数据移动。

下面是表示完整方案的关系图。

首先,你将创建 Azure 数字孪生实例(图中的 A 部分),然后设置传入数字孪生的设备遥测数据流(箭头 B),再设置通过孪生图进行的数据传播(箭头 C)

完整建筑方案图,其中显示了通过各种 Azure 服务在设备和 Azure 数字孪生之间流动的数据。

为逐步完成此方案,需要与先前下载的预先编写的示例应用的组件进行交互。

下面是建筑方案 AdtSampleApp 示例应用实现的组件:

  • 设备身份验证
  • .NET (C#) SDK 用法示例(参见 CommandLoop.cs)
  • 调用 Azure 数字孪生 API 的控制台接口
  • SampleClientApp - Azure 数字孪生解决方案示例
  • SampleFunctionsApp - Azure Functions 应用,可根据来自 IoT 中心和 Azure 数字孪生事件的设备遥测结果更新 Azure 数字孪生图

实例化预先创建的孪生图

首先,你将使用示例项目中的 AdtSampleApp 解决方案构建端到端方案的 Azure 数字孪生部分(A 部分):

完整建筑方案图的摘录关系图,其中突出显示了“Azure 数字孪生实例”部分。

打开本地控制台窗口并导航到“digital-twins-samples-main\AdtSampleApp\SampleClientApp”文件夹。 使用此 dotnet 命令运行 SampleClientApp 项目:

dotnet run

项目将开始运行,执行身份验证,然后等待命令。 在此控制台中,运行下一个命令来实例化示例 Azure 数字孪生解决方案。

重要

如果 Azure 数字孪生实例中已经有数字孪生和关系,运行此命令会将其删除,并替换为示例方案的孪生和关系。

SetupBuildingScenario

此命令的输出是一系列确认消息,因为 Azure 数字孪生实例中创建和连接了 3 个数字孪生:名为 floor1 的楼层、名为 room21 的房间和名为 thermostat67 的温度传感器。 这些数字孪生表示真实环境中可能存在的实体。

它们通过关系连接到以下孪生图。 孪生图表示整个环境,包括实体之间的交互和关联方式。

显示 floor1 包含 room21 且 room21 包含 thermostat67 的示意图。

通过运行以下命令可以验证孪生是否已创建,这样会查询已连接的 Azure 数字孪生实例中所包含的所有数字孪生:

Query

现在可以停止运行该项目。 但请保持控制台窗口在此位置处于打开状态,因为你会在本教程的后面部分再次使用此应用。

设置示例函数应用

下一步是设置将在本教程中用来处理数据的 Azure Functions 应用。 函数应用 SampleFunctionsApp 包含两个函数:

  • ProcessHubToDTEvents:处理传入的 IoT 中心数据,并相应地更新 Azure 数字孪生
  • ProcessDTRoutedData:处理来自数字孪生的数据,并相应地更新 Azure 数字孪生中的父级孪生

在本部分中,你将发布预先编写的函数应用,并通过向函数应用分配 Microsoft Entra 标识,确保它可以访问 Azure 数字孪生。

函数应用是下载的示例项目的一部分,位于“digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp”文件夹中。

发布应用

若要将函数应用发布到 Azure,需要创建一个存储帐户,然后在 Azure 中创建函数应用,最后将函数发布到 Azure 函数应用。 本部分使用 Azure CLI 完成这些操作。 在每个命令中,将尖括号中的任何占位符替换为你自己的资源的详细信息。

  1. 通过运行以下命令来创建 Azure 存储帐户:

    az storage account create --name <name-for-new-storage-account> --location <location> --resource-group <resource-group> --sku Standard_LRS
    
  2. 通过运行以下命令来创建 Azure 函数应用:

    az functionapp create --name <name-for-new-function-app> --storage-account <name-of-storage-account-from-previous-step> --functions-version 4 --consumption-plan-location <location> --runtime dotnet-isolated --resource-group <resource-group>
    
  3. 接下来,你将压缩函数并将其发布到新的 Azure 函数应用 。

    1. 在计算机上打开控制台窗口(如果你使用的是本地 Azure CLI,它可以是同一个窗口),并导航到下载的示例项目中的“digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp”文件夹

    2. 在控制台中,运行以下命令以在本地发布项目:

      dotnet publish -c Release -o publish
      

      此命令将项目发布到“digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp\publish”目录

    3. 使用你的首选方法,创建位于“digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp\publish”目录中的已发布文件的 zip。 将压缩文件夹命名为“publish.zip”。

      重要

      请确保压缩文件夹不包含发布文件夹本身的额外层。 它只应包含发布文件夹中的内容。

      下图显示了 zip 内容的外观(它可能会根据 .NET 版本而变化)。

      Windows 中显示发布 zip 文件夹内容的文件资源管理器的屏幕截图。

    最后一步将在 Azure CLI 中完成。

  4. 在 Azure CLI 中,运行以下命令,将已发布和已压缩的函数部署到 Azure 函数应用:

    az functionapp deployment source config-zip --resource-group <resource-group> --name <name-of-your-function-app> --src "<full-path-to-publish.zip>"
    

    提示

    如果在本地使用 Azure CLI,则可以使用计算机上的 ZIP 文件路径直接访问该文件。

    如果使用的是 Azure Cloud Shell,请在运行命令之前使用此按钮将 ZIP 文件上传到 Cloud Shell:

    Azure Cloud Shell 的屏幕截图,其中侧重展示了如何上传文件。

    在本例中,该文件将上传到 Cloud Shell 存储的根目录中,以便可以通过命令(如 --src publish.zip)的 --src 参数名称直接引用该文件。

    一个成功的部署的响应状态代码为 202 并会输出一个包含新函数详细信息的 JSON 对象。 可以通过在结果中查找此字段来确认部署是否成功:

    "provisioningState": "Succeeded",
    

函数现在应发布到 Azure 中的函数应用。 可使用以下 CLI 命令来验证两个函数是否已成功发布。 每个命令都有资源组的占位符和函数应用的名称。 这些命令将输出有关已发布的 ProcessDTRoutedData 和 ProcessHubToDTEvents 函数的信息。

az functionapp function show --resource-group <your-resource-group> --name <your-function-app> --function-name ProcessDTRoutedData
az functionapp function show --resource-group <your-resource-group> --name <your-function-app> --function-name ProcessHubToDTEvents

接下来,函数应用需要具有访问 Azure 数字孪生实例的正确权限。 你将在下一部分配置此访问权限。

为函数应用配置权限

需要为函数应用执行两项设置才能访问 Azure 数字孪生实例,这两项设置都可以使用 Azure CLI 来完成。

分配访问角色

第一个设置为函数应用提供 Azure 数字孪生实例中的“Azure 数字孪生数据所有者”角色。 要对实例执行许多数据平面活动的任何用户或函数都需要此角色。 可以在 Azure 数字孪生解决方案的安全性中阅读有关安全性和角色分配的详细信息。

  1. 使用以下命令为函数创建系统分配的标识。 输出将显示已创建标识的详细信息。 记下输出中将用于下一步的 principalId 字段。

    az functionapp identity assign --resource-group <your-resource-group> --name <your-function-app-name>
    
  2. 在以下命令中使用 principalId 值将函数应用的标识分配给 Azure 数字孪生实例的 Azure 数字孪生数据所有者角色。

    az dt role-assignment create --resource-group <your-resource-group> --dt-name <your-Azure-Digital-Twins-instance> --assignee "<principal-ID>" --role "Azure Digital Twins Data Owner"
    

此命令的结果是已创建的角色分配的输出信息。 函数应用现在有权访问 Azure 数字孪生实例中的数据。

配置应用程序设置

第二个设置使用 Azure 数字孪生实例的 URL 为函数创建环境变量。 函数代码将使用此变量的值来引用你的实例。 有关环境变量的详细信息,请参阅管理函数应用。

运行下面的命令,并在占位符中填入资源的详细信息。

az functionapp config appsettings set --resource-group <your-resource-group> --name <your-function-app-name> --settings "ADT_SERVICE_URL=https://<your-Azure-Digital-Twins-instance-host-name>"

输出是 Azure 函数的设置列表,其中现在应包含一个名为 ADT_SERVICE_URL 的条目。

处理来自 IoT 中心设备的模拟遥测数据

Azure 数字孪生图将由真实设备的遥测驱动。

在此步骤中,需要将在 IoT 中心注册的模拟温控设备连接到在 Azure 数字孪生中表示它的数字孪生。 当模拟设备发出遥测时,系统将通过可触发数字孪生中相应更新的 ProcessHubToDTEvents Azure 函数定向数据。 通过这种方式,数字孪生就可与真实设备的数据保持一致。 在 Azure 数字孪生中,将事件数据从一个位置定向到另一个位置的过程称为路由事件。

模拟遥测处理过程发生在端到端方案的这一部分(箭头 B):

完整建筑方案图的摘录关系图,其中突出显示了展示 Azure 数字孪生前的元素的部分。

下面是设置此设备连接需要完成的操作:

  1. 创建将管理模拟设备的 IoT 中心
  2. 设置事件订阅,将 IoT 中心连接到相应的 Azure 函数
  3. 在 IoT 中心注册模拟设备
  4. 运行模拟设备并生成遥测
  5. 查询 Azure 数字孪生以查看实时结果

创建 IoT 中心实例

Azure 数字孪生旨在搭配 IoT 中心使用,后者是用于管理设备及其数据的 Azure 服务。 在此步骤中,你将设置一个 IoT 中心,用于管理本教程中的示例设备。

在 Azure CLI 中,使用此命令创建新的 IoT 中心:

az iot hub create --name <name-for-your-IoT-hub> --resource-group <your-resource-group> --sku S1

此命令的输出是有关已创建的 IoT 中心的信息。

保存提供给 IoT 中心的名称。 稍后将使用它。

将 IoT 中心连接到 Azure 函数

接下来,将 IoT 中心连接到之前在函数应用中发布的 ProcessHubToDTEvents Azure 函数,让数据可以通过函数从设备流入 IoT 中心,这一操作将更新 Azure 数字孪生。

为此,需要在 IoT 中心创建一个事件订阅,并将 Azure 函数作为终结点。 这会将函数“订阅”到 IoT 中心发生的事件。

使用以下 CLI 命令创建事件订阅。 有一个占位符可用于输入事件订阅的名称,还有一些占位符可用于输入订阅 ID、资源组、IoT 中心名称和函数应用的名称。

az eventgrid event-subscription create --name <name-for-hub-event-subscription> --event-delivery-schema eventgridschema --source-resource-id /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.Devices/IotHubs/<your-IoT-hub> --included-event-types Microsoft.Devices.DeviceTelemetry --endpoint-type azurefunction --endpoint /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.Web/sites/<your-function-app>/functions/ProcessHubToDTEvents

输出将显示有关已创建的事件订阅的信息。 可通过验证结果中的 provisioningState 值来确认操作已成功完成:

"provisioningState": "Succeeded",

提示

如果命令返回资源提供程序错误,请为订阅添加 Microsoft.EventGrid 作为资源提供程序。 可以按照注册资源提供程序中的说明,在 Azure 门户中执行此操作。

在 IoT 中心注册模拟设备

本部分在 ID 为 thermostat67 的 IoT 中心内创建设备表示形式。 模拟设备将连接到此表示形式,这是遥测事件从设备进入 IoT 中心的方式。 前面步骤中订阅的 Azure 函数将在 IoT 中心进行侦听、准备选取事件并继续进行处理。

在 Azure CLI 中,使用以下命令在 IoT 中心创建设备:

az iot hub device-identity create --device-id thermostat67 --hub-name <your-IoT-hub-name> --resource-group <your-resource-group>

输出是已创建设备的相关信息。

配置和运行模拟

重要

本文包括使用共享访问签名(也称为对称密钥身份验证)连接设备的步骤。 此身份验证方法便于测试和评估,但使用 X.509 证书对设备进行身份验证是一种更安全的方法。 有关详细信息,请参阅安全最佳做法和连接安全性

接下来,配置设备模拟器以将数据发送到 IoT 中心实例。

首先,使用以下命令获取 IoT 中心连接字符串。 连接字符串值将以 HostName= 开头。

az iot hub connection-string show --hub-name <your-IoT-hub-name>

然后,使用此命令获取设备连接字符串:

az iot hub device-identity connection-string show --device-id thermostat67 --hub-name <your-IoT-hub-name>

接下来,将这些值插入本地项目中的设备模拟器代码中,以将模拟器连接到此 IoT 中心和 IoT 中心设备。

在本地计算机上,导航到下载的示例文件夹,并进入“digital-twins-samples-main\DeviceSimulator\DeviceSimulator”文件夹。 打开“AzureIoTHub.cs”文件进行编辑。 将以下连接字符串值更改为前面收集的值:

private const string iotHubConnectionString = "<your-hub-connection-string>";
//...
private const string deviceConnectionString = "<your-device-connection-string>";

保存文件。

现在,若要查看已设置的数据模拟的结果,请打开新的本地控制台窗口然后导航到 digital-twins-samples-main\DeviceSimulator\DeviceSimulator。

注意

现在应打开了两个控制台窗口:一个窗口在“DeviceSimulator\DeviceSimulator”文件夹中打开,另一个之前的窗口仍在“AdtSampleApp\SampleClientApp”文件夹中打开

使用以下 dotnet 命令运行设备模拟器项目:

dotnet run

项目将开始运行并开始显示模拟温度遥测消息。 这些消息将发送到 IoT 中心,由 Azure 函数选取并处理。

设备模拟器的控制台输出的屏幕截图,其中显示了正在发送的温度遥测。

你无需此控制台中执行任何其他操作,但在完成后续步骤时,需要让其保持运行状态。

查看 Azure 数字孪生中的结果

之前发布的 ProcessHubToDTEvents 函数会侦听 IoT 中心数据,并调用 Azure 数字孪生 API 来更新 thermostat67 孪生体上的 Temperature 属性。

若要查看 Azure 数字孪生端的数据,请切换到在“AdtSampleApp\SampleClientApp”文件夹中打开的其他控制台窗口。 使用 dotnet run 运行 SampleClientApp 项目。

dotnet run

项目运行并接受命令后,请运行以下命令,以获取数字孪生 thermostat67 所报告的温度:

ObserveProperties thermostat67 Temperature

你应该会看到来自 Azure 数字孪生实例的实时更新温度每 2 秒被记录到控制台中一次。 它们应反映数据模拟器生成的值(可以并排放置控制台窗口,以验证值是否一致)。

注意

可能需要几秒钟才能将设备中的数据传播到孪生体。 在数据开始到达之前,前几个温度读数可能显示为 0。

控制台输出的屏幕截图,其中显示了来自数字孪生 thermostat67 的温度消息日志。

一旦验证实时温度记录成功运行,就可以停止运行这两个项目。 保持控制台窗口处于打开状态,因为你将在本教程的后面部分再次使用它们。

通过图形传播 Azure 数字孪生事件

到本教程的此阶段,你已了解如何通过外部设备数据更新 Azure 数字孪生。 接下来,你将了解如何通过 Azure 数字孪生图传播对某个数字孪生的更改,换句话说,就是如何从服务内部数据更新孪生。

为此,在更新已连接的 Thermostat 孪生时,你将使用 ProcessDTRoutedData Azure 函数来更新 Room 孪生。 更新功能发生在端到端方案的这一部分(箭头 C):

完整建筑方案图的摘录关系图,其中突出显示了展示 Azure 数字孪生后的元素的部分。

下面是设置此数据流需要完成的操作:

  1. 创建事件网格主题,以便在 Azure 服务之间移动数据
  2. 在 Azure 数字孪生中创建终结点,以便将实例连接到事件网格主题
  3. 在 Azure 数字孪生中设置路由,以便将孪生属性更改事件发送到终结点
  4. 设置 Azure 函数,以便在终结点上侦听事件网格主题,接收发送到其中的孪生属性更改事件,并相应地更新图中的其他孪生体

创建事件网格主题

事件网格是一项 Azure 服务,可帮助将来自 Azure 服务的事件路由和传递到 Azure 中的其他位置。 你可以创建一个事件网格主题以从源收集特定事件,然后订阅者可以侦听该主题,以便在事件送达时接收事件。

在 Azure CLI 中运行以下命令,以创建事件网格主题:

az eventgrid topic create --resource-group <your-resource-group> --name <name-for-your-event-grid-topic> --location <region>

此命令的输出是已创建的事件网格主题的相关信息。 保存为事件网格主题提供的名称,因为稍后将要使用。

创建终结点

接下来,在 Azure 数字孪生中创建事件网格终结点,该终结点将实例连接到事件网格主题。 使用下方的命令,根据需要填写上一步中事件网格主题的名称和其他占位符字段。

az dt endpoint create eventgrid --dt-name <Azure-Digital-Twins-instance> --eventgrid-resource-group <your-resource-group> --eventgrid-topic <your-event-grid-topic> --endpoint-name <name-for-your-Azure-Digital-Twins-endpoint>

此命令的输出是已创建的终结点的相关信息。

在输出中查找 provisioningState 字段,检查其值是否为“Succeeded”。

Azure 门户的 Cloud Shell 中终结点查询结果的屏幕截图,其中显示了 provisioningState 为“成功”的终结点。

它也可能显示“Provisioning”,这意味着仍在创建终结点。 如果是这样,请等待几秒钟,并运行以下命令来检查终结点的状态。 重复此操作,直到 provisioningState 显示“Succeeded”。

az dt endpoint show --dt-name <your-Azure-Digital-Twins-instance> --endpoint-name <your-Azure-Digital-Twins-endpoint> 

保存终结点的名称,稍后需要使用。

创建路由

接下来,创建 Azure 数字孪生路由,以便将事件发送到创建的事件网格终结点。

使用以下 CLI 命令,根据需要填写上一步中终结点的名称和其他占位符字段。 此命令将转发孪生体图中发生的所有事件。

提示

如果需要,可以使用筛选器将事件仅筛选为特定事件。

az dt route create --dt-name <your-Azure-Digital-Twins-instance> --endpoint-name <your-Azure-Digital-Twins-endpoint> --route-name <name-for-your-Azure-Digital-Twins-route>

此命令的输出是一些有关已创建的路由的信息。

注意

必须先完成终结点(来自上一步)的预配工作,然后才能设置使用这些终结点的事件路由。 如果由于终结点未就绪而导致路由创建失败,请等待几分钟,然后重试。

连接 Azure 函数

接下来,将 ProcessDTRoutedData Azure 函数订阅到前面创建的事件网格主题,让遥测数据可通过事件网格主题从 thermostat67 孪生体流向该函数,该函数会返回到 Azure 数字孪生并相应地更新 room21。

为此,需要创建一个事件网格订阅,将之前创建的事件网格主题中的数据发送到 ProcessDTRoutedData Azure 函数。

使用以下 CLI 命令创建事件订阅。 有一个占位符可用于输入事件订阅的名称,还有一些占位符可用于输入订阅 ID、资源组、事件网格主题名称和函数应用的名称。

az eventgrid event-subscription create --name <name-for-topic-event-subscription> --event-delivery-schema eventgridschema --source-resource-id /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.EventGrid/topics/<your-event-grid-topic> --endpoint-type azurefunction --endpoint /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.Web/sites/<your-function-app>/functions/ProcessDTRoutedData

运行模拟并查看结果

现在,事件应该能够从模拟设备流入 Azure 数字孪生,并通过 Azure 数字孪生图适当地更新孪生。 在本部分中,你将再次运行设备模拟器以启动已设置的完整事件流,并查询 Azure 数字孪生以查看实时结果

转到在“DeviceSimulator\DeviceSimulator”文件夹中打开的控制台窗口,然后使用 dotnet run 运行设备模拟器项目。

与首次运行设备模拟器一样,项目将开始运行并显示模拟温度遥测消息。 这些事件将经过之前设置的流来更新 thermostat67 孪生,然后经过最近设置的流来更新 room21 孪生以进行匹配 。

设备模拟器的控制台输出的屏幕截图,其中显示了正在发送的温度遥测。

你无需此控制台中执行任何其他操作,但在完成后续步骤时,需要让其保持运行状态。

若要查看 Azure 数字孪生端的数据,请转到在“AdtSampleApp\SampleClientApp”文件夹中打开的其他控制台窗口,然后使用 dotnet run 运行 SampleClientApp 项目。

项目运行并接受命令后,请运行以下命令,以获取 thermostat67 和 room21 这两个数字孪生所报告的温度。

ObserveProperties thermostat67 Temperature room21 Temperature

你应该会看到来自 Azure 数字孪生实例的实时更新温度每 2 秒被记录到控制台中一次。 注意,room21 的温度正在更新,以匹配 thermostat67 的更新 。

控制台输出的屏幕截图,其中显示了来自温控设备和房间的温度消息日志。

一旦验证实例的实时温度记录成功运行,就可以停止运行这两个项目。 你也可以关闭这两个控制台窗口,因为本教程现已完成。

检查

下面回顾了在本教程中生成的方案。

  1. Azure 数字孪生实例以数字方式表示楼层、房间和温控设备(如下图中 A 部分所示)
  2. 模拟设备遥测发送到 IoT 中心,其中 ProcessHubToDTEvents Azure 函数正在侦听遥测事件。 ProcessHubToDTEvents Azure 函数使用这些事件中的信息来设置 thermostat67(图中箭头 B)上的 Temperature 属性。
  3. Azure 数字孪生的属性更改事件会路由到事件网格主题,其中 ProcessDTRoutedData Azure 函数正在侦听事件。 ProcessDTRoutedData Azure 函数使用这些事件中的信息来设置 room21(图中箭头 C)上的 Temperature 属性。

文章开头的示意图,显示整个构建方案。

清理资源

完成本教程后,可以选择要删除的资源,具体取决于接下来要执行的操作。

  • 如果不再需要在本教程中创建的任何资源,可使用 az group delete CLI 命令从本文中删除 Azure 数字孪生实例及所有其他资源。 这会删除资源组中的所有 Azure 资源及资源组本身。

    重要

    删除资源组的操作不可逆。 资源组以及包含在其中的所有资源将被永久删除。 请确保不要意外删除错误的资源组或资源。

    打开 Azure Cloud Shell 或本地 CLI 窗口并运行以下命令,以删除资源组及其包含的所有内容。

    az group delete --name <your-resource-group>
    
  • 如果要继续使用本文中设置的 Azure 数字孪生实例,但清除其部分或全部模型、孪生体和关系,可以使用 az dt CLI 命令删除要删除的元素。

    此选项不会删除在本教程中创建的任何其他 Azure 资源(IoT 中心、Azure Functions 应用等)。 可以使用适用于每种资源类型的 dt 命令分别删除这些资源。

你可能还需要从本地计算机中删除项目文件夹。

后续步骤

在本教程中,你创建了一个端到端方案,它显示了由实时设备数据驱动的 Azure 数字孪生。

接下来,请开始查看概念文档,详细了解本教程中所用的元素: