開始使用裝置管理 (.NET)
後端應用程式可使用 Azure IoT 中樞基元 (例如裝置對應項和直接方法),從遠端啟動並監視裝置上的裝置管理動作。 本文會示範後端應用程式和裝置應用程式如何共同運作,以使用 IoT 中樞初始化和監視遠端裝置重新啟動。
注意
本文中所述的功能僅適用於 IoT 中樞的標準層。 如需有關基本和標準/免費 Azure IoT 中樞階層的詳細資訊,請參閱為您的解決方案選擇適合的 Azure IoT 中樞階層。
使用直接方法從雲端中的後端應用程式起始裝置管理動作 (例如重新啟動、恢復出廠預設值,以及韌體更新)。 該裝置將負責:
處理從 IoT 中樞傳送的方法要求。
在裝置上起始對應的裝置專有動作。
透過針對 IoT 中樞的報告屬性提供狀態更新。
您可以在雲端中使用後端 App 來執行裝置對應項查詢,以報告裝置管理動作的進度。
本文說明如何建立:
SimulateManagedDevice:為模擬裝置應用程式,使用直接方法重新啟動裝置,並報告上次重新啟動時間。 直接方法是從雲端叫用。
TriggerReboot:為 .NET 應用程式,可透過您的 IoT 中樞在模擬裝置應用程式中呼叫直接方法。 會顯示回應和更新的回報屬性。
必要條件
Visual Studio。
IoT 中樞。 使用 CLI 或 Azure 入口網站建立一個。
已註冊的裝置。 在 Azure 入口網站中註冊一個。
請確定您的防火牆已開啟連接埠 8883。 本文中的裝置範例會使用 MQTT 通訊協定,其會透過連接埠 8883 進行通訊。 某些公司和教育網路環境可能會封鎖此連接埠。 如需此問題的詳細資訊和解決方法,請參閱連線至 IoT 中樞 (MQTT)。
使用直接方法建立裝置應用程式
在本節中,您會:
建立 .NET 主控台應用程式,以回應雲端所呼叫的直接方法。
觸發模擬裝置重新啟動。
使用回報的屬性來啟用裝置對應項查詢,以識別裝置及其上次重新啟動時間。
若要建立模擬裝置應用程式,請遵循下列步驟:
開啟 Visual Studio 並選取 [建立新專案] 中,然後尋找並選取 [主控台應用程式 (.NET Framework)] 專案範本,接著選取 [下一步]。
在 [設定新專案] 中,將專案命名為 SimulateManagedDevice,然後選取 [下一步]。
保留預設 .NET Framework 版本,然後選取 [建立]。
在 [方案總管] 中,以滑鼠右鍵按一下新的 [SimulateManagedDevice] 專案,然後選取 [管理 NuGet 套件]。
選取 [瀏覽],然後搜尋並選取 [Microsoft.Azure.Devices.Client]。 選取安裝。
此步驟會下載和安裝 Azure IoT 裝置 SDK NuGet 套件及其相依性,並新增其參考。
在 Program.cs 檔案開頭處新增下列
using
陳述式:using Microsoft.Azure.Devices.Client; using Microsoft.Azure.Devices.Shared;
將下列欄位新增到 Program 類別。 將
{device connection string}
預留位置值取代為您在 IoT 中樞註冊新裝置時看到的裝置連接字串:static string DeviceConnectionString = "{device connection string}"; static DeviceClient Client = null;
新增下列項目以在裝置上實作直接方法:
static Task<MethodResponse> onReboot(MethodRequest methodRequest, object userContext) { // In a production device, you would trigger a reboot // scheduled to start after this method returns. // For this sample, we simulate the reboot by writing to the console // and updating the reported properties. try { Console.WriteLine("Rebooting!"); // Update device twin with reboot time. TwinCollection reportedProperties, reboot, lastReboot; lastReboot = new TwinCollection(); reboot = new TwinCollection(); reportedProperties = new TwinCollection(); lastReboot["lastReboot"] = DateTime.Now; reboot["reboot"] = lastReboot; reportedProperties["iothubDM"] = reboot; Client.UpdateReportedPropertiesAsync(reportedProperties).Wait(); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); } string result = @"{""result"":""Reboot started.""}"; return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200)); }
最後,在 Main 方法中新增下列程式碼以開啟 IoT 中樞的連線,並啟動方法接聽程式︰
try { Console.WriteLine("Connecting to hub"); Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, TransportType.Mqtt); // setup callback for "reboot" method Client.SetMethodHandlerAsync("reboot", onReboot, null).Wait(); Console.WriteLine("Waiting for reboot method\n Press enter to exit."); Console.ReadLine(); Console.WriteLine("Exiting..."); // as a good practice, remove the "reboot" handler Client.SetMethodHandlerAsync("reboot", null, null).Wait(); Client.CloseAsync().Wait(); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); }
在 [方案總管] 中,以滑鼠右鍵按一下方案,然後選取 [設定啟始專案]。
針對 [通用屬性]>[啟始專案],選取 [單一啟始專案],然後選取 [SimulateManagedDevice] 專案。 選取 [確定] 以儲存您的變更。
選取 [組建]> [組建方案]。
注意
為了簡單起見,本文章不會實作任何重試原則。 在生產程式碼中,您應該如 暫時性錯誤處理中所建議來實作重試原則 (例如指數輪詢)。
取得 IoT 中樞連接字串
在本文中,您會建立後端服務,在裝置上叫用直接方法。 若要透過 IoT 中樞在裝置上叫用直接方法,則服務需要有服務連線權限。 根據預設,每個 IoT 中樞都是透過授與此權限且名為服務的共用存取原則所建立。
若要取得服務原則的 IoT 中樞連接字串,請遵循下列步驟:
在 Azure 入口網站中,選取 [資源群組]。 選取中樞所在的資源群組,然後從資源清單選取中樞。
在 IoT 中樞的左側窗格中,選取 [共用存取原則]。
從原則清單中,選取服務原則。
複製 [主要連接字串] 並儲存該值。
如需 IoT 中樞共用存取原則和權限的詳細資訊,請參閱存取控制及權限。
建立服務應用程式以觸發重新開機
在本節中,您會建立 .NET 主控台應用程式 (使用 C#),此應用程式會使用直接方法起始遠端重新開機。 應用程式使用裝置對應項查詢來探索該裝置的上次重新開機時間。
開啟 Visual Studio,然後選取 [建立新專案]。
在 [建立新專案] 中,尋找並選取 [主控台應用程式 (.NET Framework)] 專案範本,然後選取 [下一步]。
在 [設定新專案] 中,將專案命名為 TriggerReboot,然後選取 [下一步]。
接受預設版本的 .NET Framework,然後選取 [建立] 以建立專案。
在 [方案總管] 中,以滑鼠右鍵按一下 [TriggerReboot] 專案,然後選取 [管理 NuGet 套件]。
選取 [瀏覽],然後搜尋並選取 [Microsoft.Azure.Devices]。 選取 [安裝] 以安裝 Microsoft.Azure.Devices 套件。
此步驟會下載及安裝 Azure IoT 服務 SDK NuGet 套件與其相依性,並加入對它的參考。
在 Program.cs 檔案開頭處新增下列
using
陳述式:using Microsoft.Azure.Devices; using Microsoft.Azure.Devices.Shared;
將下列欄位新增到 Program 類別。 將
{iot hub connection string}
預留位置值取代為先前在 取得 IoT 中樞連接字串內複製的 IoT 中樞連接字串。static RegistryManager registryManager; static string connString = "{iot hub connection string}"; static ServiceClient client; static string targetDevice = "myDeviceId";
將下列方法新增至 Program 類別。 此程式碼會取得用於重新啟動裝置的裝置對應項,並輸出報告屬性。
public static async Task QueryTwinRebootReported() { Twin twin = await registryManager.GetTwinAsync(targetDevice); Console.WriteLine(twin.Properties.Reported.ToJson()); }
將下列方法新增至 Program 類別。 此程式碼會使用直接方法在裝置上起始重新啟動。
public static async Task StartReboot() { client = ServiceClient.CreateFromConnectionString(connString); CloudToDeviceMethod method = new CloudToDeviceMethod("reboot"); method.ResponseTimeout = TimeSpan.FromSeconds(30); CloudToDeviceMethodResult result = await client.InvokeDeviceMethodAsync(targetDevice, method); Console.WriteLine("Invoked firmware update on device."); }
最後,將下列幾行新增至 Main 方法:
registryManager = RegistryManager.CreateFromConnectionString(connString); StartReboot().Wait(); QueryTwinRebootReported().Wait(); Console.WriteLine("Press ENTER to exit."); Console.ReadLine();
選取 [組建]> [組建方案]。
注意
本文只針對裝置的回報屬性執行單一查詢。 在生產環境程式碼中,建議您進行輪詢以偵測回報屬性中的變更。
執行應用程式
您現在可開始執行應用程式。
若要執行 .NET 裝置應用程式 SimulateManagedDevice,請在 [方案總管] 中,以滑鼠右鍵按一下 [SimulateManagedDevice] 專案,選取 [偵錯],然後選取 [開始新執行個體]。 應用程式應該會開始接聽來自 IoT 中樞的方法呼叫。
連線到裝置並等候方法引動過程之後,請以滑鼠右鍵按一下 TriggerReboot 專案,選取 [偵錯],然後選取 [開始新執行個體]。
您應該會看到「正在重新啟動!」顯示在 SimulatedManagedDevice 主控台中,以及看到回報的裝置屬性顯示在 TriggerReboot 主控台中,其中包括上次重新啟動時間。
自訂及延伸裝置管理動作
您的 IoT 解決方案可以透過使用裝置對應項和雲端到裝置方法基元,擴充一組已定義的裝置管理模式或啟用自訂模式。 其他裝置管理動作範例還包括恢復出廠預設值、韌體更新、軟體更新、電源管理、網路和連線管理,以及資料加密。
裝置維護期間
一般而言,您會設定讓裝置在產生最短中斷和停機時間的時機執行動作。 裝置維護期間是用來定義裝置組態更新時機的常用模式。 您的後端解決方案可以使用所需的裝置對應項 (twin) 屬性,在您的裝置上定義可啟用維護期間的原則並啟用該原則。 當裝置收到維護期間原則時,它可以使用回報的裝置對應項 (twin) 屬性來回報原則的狀態。 接著,後端 App 便可使用裝置對應項 (twin) 查詢來證明是否符合裝置及每個原則的規定。
下一步
在本文中,您使用了直接方法在裝置上觸發遠端重新啟動。 您已使用報告屬性來從裝置回報上次重新開機時間,以及查詢裝置對應項來從雲端探索裝置的上次重新開機時間。
若要繼續開始使用 IoT 中樞和裝置管理模式,例如端對端映像型更新,請參閱 Azure IoT 中樞裝置更新文章,使用 Raspberry Pi 3 B+ 參考映像。
若要了解如何擴充 IoT 解決方案,以及在多部裝置上排程方法呼叫,請參閱排程及廣播作業。