模块标识和模块孪生 类似于 Azure IoT 中心设备标识和设备孪生,但提供更精细的粒度。 虽然 Azure IoT 中心设备标识和设备孪生使后端应用程序能够配置设备并提供设备条件的可见性,但模块标识和模块孪生为设备的各个组件提供这些功能。 在具有多个组件(如操作系统设备或固件设备)的设备上,模块标识和模块双胞胎允许对每个组件进行独立的配置和条件设定。
注释
本文中所述的功能仅在 IoT 中心的标准层中可用。 有关基本层和标准/免费 IoT 中心层的详细信息,请参阅 为解决方案选择正确的 IoT 中心层和大小。
在本文中,你将学习如何:
在门户中创建模块标识。
使用 .NET 设备 SDK 从你的设备更新模块孪生体。
注释
有关可用于生成设备和后端应用的 SDK 工具的详细信息,请参阅 Azure IoT SDK 。
先决条件
在门户中创建模块标识
在一个设备标识中,最多可以创建 20 个模块标识。 要添加身份,请按照以下步骤操作:
在 Azure 门户中的现有设备中,选择 “添加模块标识 ”以创建第一个模块标识。
输入名称 myFirstModule。 保存模块标识。
新的模块标识将显示在屏幕底部。 选择它以查看模块标识详细信息。
保存连接字符串(主键)。 在下一部分中,你将使用它在控制台应用中的设备上设置模块。
使用 .NET 设备 SDK 更新模块孪生
现在,让我们从模拟设备与云通信。 创建模块标识后,会在 IoT 中心隐式创建模块孪生。 在本部分中,将在模拟设备上创建一个 .NET 控制台应用,用于更新模块孪生报告属性。
创建 Visual Studio 项目
若要创建更新模块孪生、报告属性的应用,请执行以下步骤:
在 Visual Studio 中,选择“ 创建新项目”,然后选择 “控制台应用”(.NET Framework),然后选择“ 下一步”。
在 “配置新项目”中,输入 UpdateModuleTwinReportedProperties 作为 项目名称。 选择“下一步”继续操作。
保留默认的 .NET Framework,然后选择“ 创建”。
安装最新的 Azure IoT 中心 .NET 设备 SDK
模块标识和模块孪生仅在 IoT 中心预发行设备 SDK 中可用。 若要安装它,请执行以下步骤:
在 Visual Studio 中,打开 工具>NuGet 包管理器>管理解决方案的 NuGet 包。
选择 “浏览”,然后选择“ 包括预发行版”。 搜索 Microsoft.Azure.Devices.Client。 选择最新版本并安装。
现在,你有权访问所有模块功能。
创建 UpdateModuleTwinReportedProperties 控制台应用
若要创建应用,请执行以下步骤:
- 在
using文件的顶部添加以下语句:
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
- 将以下字段添加到 Program 类。 将占位符值替换为之前保存的模块连接字符串。
private const string ModuleConnectionString = "<Your module connection string>";
private static ModuleClient Client = null;
- 将以下 OnDesiredPropertyChanged 方法添加到 Program 类:
private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, object userContext)
{
Console.WriteLine("desired property change:");
Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
Console.WriteLine("Sending current time as reported property");
TwinCollection reportedProperties = new TwinCollection
{
["DateTimeLastDesiredPropertyChangeReceived"] = DateTime.Now
};
await Client.UpdateReportedPropertiesAsync(reportedProperties).ConfigureAwait(false);
}
- 最后,将 Main 方法替换为以下代码:
static void Main(string[] args)
{
Microsoft.Azure.Devices.Client.TransportType transport = Microsoft.Azure.Devices.Client.TransportType.Amqp;
try
{
Client = ModuleClient.CreateFromConnectionString(ModuleConnectionString, transport);
Client.SetConnectionStatusChangesHandler(ConnectionStatusChangeHandler);
Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null).Wait();
Console.WriteLine("Retrieving twin");
var twinTask = Client.GetTwinAsync();
twinTask.Wait();
var twin = twinTask.Result;
Console.WriteLine(JsonConvert.SerializeObject(twin));
Console.WriteLine("Sending app start time as reported property");
TwinCollection reportedProperties = new TwinCollection();
reportedProperties["DateTimeLastAppLaunch"] = DateTime.Now;
Client.UpdateReportedPropertiesAsync(reportedProperties);
}
catch (AggregateException ex)
{
Console.WriteLine("Error in sample: {0}", ex);
}
Console.WriteLine("Waiting for Events. Press enter to exit...");
Console.ReadKey();
Client.CloseAsync().Wait();
}
private static void ConnectionStatusChangeHandler(ConnectionStatus status, ConnectionStatusChangeReason reason)
{
Console.WriteLine($"Status {status} changed: {reason}");
}
可以使用 F5 生成并运行此应用。
现在,你已了解如何使用 AMQP 协议检索模块孪生并更新报告的属性。
后续步骤
若要继续开始使用 IoT 中心并探索其他 IoT 方案,请参阅: