使用 Azure 入口網站 和 .NET 裝置開始使用IoT 中樞模組身分識別和模組對應項

模組身分識別與模組對應項類似於 Azure IoT 中樞裝置身分識別與裝置對應項,但提供更精細的細微性。 雖然 Azure IoT 中樞裝置身分識別與裝置對應項可讓後端應用程式設定裝置並提供裝置狀況的可見性,但模組身分識別和模組對應項可提供裝置個別元件的上述功能。 在具有多個元件的支援裝置 (例如作業系統裝置或韌體裝置) 上,模組身分識別和模組對應項允許每個元件使用獨立的設定和條件。

注意

本文中所述的功能僅適用於 IoT 中樞的標準層。 如需基本和標準/免費IoT 中樞層的詳細資訊,請參閱為您的解決方案選擇正確的IoT 中樞層

在本文中,您將了解如何:

  • 在入口網站中建立模組身分識別。

  • 使用 .NET 裝置 SDK 更新裝置的模組對應項。

注意

如需可用來建置裝置和後端應用程式的 SDK 工具詳細資訊,請參閱 Azure IoT SDK

必要條件

模組驗證

您可以使用對稱金鑰或 X.509 憑證來驗證模組身分識別。 針對 X.509 憑證驗證,模組的憑證 必須 具有其一般名稱, (CN) 格式如下 CN=<deviceid>/<moduleid> 。 例如:

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

在入口網站中建立模組身分識別

在一個裝置身分識別內,您可以建立最多 20 個模組身分識別。 若要新增身分識別,請遵循下列步驟:

  1. 從 Azure 入口網站現有的裝置,選擇 [新增模組身分識別] 建立您的第一個模組身分識別。

  2. 輸入 myFirstModule 名稱。 儲存模組身分識別。

    顯示「模組識別詳細資料」頁面的螢幕擷取畫面。

    新的模組身分識別會出現在畫面底部。 加以選取以查看模組身分識別詳細資料。

    顯示模組身分識別詳細資料功能表的螢幕擷取畫面。

儲存連接字串 (主索引鍵)。 在下一節中,您會使用此資訊,在主控台應用程式中設定模組。

使用 .NET 裝置 SDK 更新模組對應項

接著,我們要從模擬裝置與雲端通訊。 一旦建立模組身分識別,模組對應項會隱含地建立於 IoT 中樞中。 在這一節中,您會在模擬裝置上建立 .NET 主控台應用程式,以便更新模組對應項報告的屬性。

建立 Visual Studio 專案

若要建立應用程式更新模組對應項、報告屬性,請遵循下列步驟:

  1. 在 Visual Studio 中,選取 [建立新專案],然後選擇 [主控台應用程式 (.NET Framework)],並選取 [下一步]。

  2. 在 [設定新專案] 中,輸入 UpdateModuleTwinReportedProperties 作為專案名稱。 選取 [下一步] 以繼續操作。

    顯示「設定新專案」快顯的螢幕擷取畫面。

  3. 保留預設 .NET Framework,然後選取 [建立]。

安裝最新的 Azure IoT Hub .NET 裝置 SDK

模組身分識別和模組對應項僅適用於 IoT 中樞發行前版本的裝置 SDK。 若要加以安裝,請遵循這些步驟:

  1. 在 Visual Studio 中,依序開啟 [工具] > [NuGet 套件管理員] > [管理解決方案的 NuGet 套件]。

  2. 選取 [瀏覽],然後選取 [包括發行前版本]。 搜尋 Microsoft.Azure.Devices.Client。 選取最新版本並安裝。

    顯示安裝 Microsoft.Azure.Devices.Client 方式的螢幕擷取畫面。

    您現在可以存取所有的模組功能。

建立 UpdateModuleTwinReportedProperties 主控台應用程式

若要建立應用程式,請遵循下列步驟:

  1. Program.cs 檔案開頭處新增下列 using 陳述式:
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
  1. 將下列欄位新增到 Program 類別。 以您之前儲存的模組連接字串,取代預留位置值。
private const string ModuleConnectionString = "<Your module connection string>";
private static ModuleClient Client = null;
  1. 將下列方法 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);
    }
  1. 最後,將 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 案例,請參閱︰