IoT Central 的裝置實作和最佳做法

本文提供如何實作連線到IoT Central應用程式的裝置的相關信息。 它也包含一些最佳做法。 若要深入瞭解整體連線程式,請參閱 連線 裝置

如需範例裝置實作程序代碼,請參閱 教學課程:建立用戶端應用程式並將其連線至 Azure IoT Central 應用程式

實作裝置

線上到 IoT Central 的裝置應遵循 IoT 隨插即用 慣例。 其中一種慣例是裝置應該在連線時傳送 所實作之裝置型號的型號標識碼 。 模型標識碼可讓IoT Central 應用程式將裝置指派給正確的裝置範本。

IoT Central 裝置範本包含模型,指定該類型裝置應實作的行為。 行為包括遙測、屬性和命令。

每個模型都有唯 一的數字對應項模型識別碼 (DTMI),例如 dtmi:com:example:Thermostat;1。 當裝置連線到IoT Central時,它會傳送其實作之模型的 DTMI。 接著,IoT Central 可以將正確的裝置範本指派給裝置。

IoT 隨插即用 會定義裝置實作數字對應項定義語言 (DTDL) 模型時應遵循的一組慣例

Azure IoT 裝置 SDK 支援 IoT 隨插即用慣例。

裝置型號

裝置模型是使用 DTDL V2 模型語言來定義。 這個語言可讓您定義:

  • 裝置傳送的遙測。 定義包含遙測的名稱和數據類型。 例如,裝置會將溫度遙測傳送為雙精度浮點數。
  • 裝置向IoT Central報告的屬性。 屬性定義包含其名稱和數據類型。 例如,裝置會將閥的狀態報告為布爾值。
  • 裝置可以從IoT Central接收的屬性。 您可以選擇性地將屬性標示為可寫入。 例如,IoT Central 會將目標溫度當做雙精度浮點數傳送至裝置。
  • 裝置所回應的命令。 定義包含命令的名稱,以及任何參數的名稱和數據類型。 例如,裝置會回應重新啟動命令,指定重新啟動前要等候的秒數。

注意

IoT Central 會定義 DTDL v2 語言的一些延伸模組。 若要深入瞭解,請參閱 IoT Central擴充功能

DTDL 模型可以是 無元件多元件 模型:

  • 無元件模型:簡單模型不使用內嵌或串聯元件。 所有遙測、屬性和命令都會定義單 一根元件。 如需範例,請參閱 控溫器 模型。
  • 多元件模型。 更複雜的模型,其中包含兩個或多個元件。 這些元件包括單一根元件,以及一或多個巢狀元件。 如需範例,請參閱 溫度控制器 模型。

提示

您可以將 完整的裝置型號或個別介面 從 IoT Central 裝置樣本匯入和匯出為 DTDL v2 檔案。

若要深入瞭解裝置型號,請參閱 IoT 隨插即用 模型化指南

慣例

當裝置與IoT Central交換數據時,裝置應遵循 IoT 隨插即用慣例。 慣例包括:

  • 線上到 IoT Central 時,傳送 DTMI。
  • 將格式正確的 JSON 承載和元數據傳送至 IoT Central。
  • 從 IoT Central 正確回應可寫入的屬性和命令。
  • 遵循元件命令的命名慣例。

注意

目前,IoT Central 並不完全支援 DTDL 陣列地理空間 數據類型。

若要深入瞭解 IoT 隨插即用 慣例,請參閱 IoT 隨插即用 慣例

若要深入瞭解裝置與IoT Central交換的JSON訊息格式,請參閱 遙測、屬性和命令承載

裝置 SDK

使用其中 一個 Azure IoT 裝置 SDK 來實作裝置的行為。 程式代碼應該:

  • 向 DPS 註冊裝置,並使用來自 DPS 的資訊,連線到 IoT Central 應用程式中的內部 IoT 中樞。
  • 宣佈裝置所實作之模型的 DTMI。
  • 以裝置模型指定的格式傳送遙測。 IoT Central 會使用裝置範本中的模型來判斷如何使用遙測進行視覺效果和分析。
  • 同步處理裝置與IoT Central之間的屬性值。 模型會指定屬性名稱和數據類型,讓IoT Central可以顯示資訊。
  • 為模型中指定的命令實作命令處理程式。 該模型指定裝置應使用的命令名稱和參數。

如需裝置範本角色的詳細資訊,請參閱 什麼是裝置範本?

下表摘要說明 Azure IoT Central 裝置功能如何對應至 IoT 中樞 功能:

Azure IoT Central Azure IoT 中樞
遙測 裝置到雲端傳訊
離線命令 雲端到裝置傳訊
屬性 裝置對應項報告屬性
屬性 (可寫入) 裝置對應項所需和報告屬性
Command 直接方法

通訊協定

裝置可用來連線到IoT Central的通訊協定包括 MQTT、AMQP 和 HTTPS。 在內部,IoT Central 會使用IoT中樞來啟用裝置連線。 如需 IoT 中樞 支援裝置連線之通訊協定的詳細資訊,請參閱選擇通訊協定

如果您的裝置無法使用任何支援的通訊協定,請使用 Azure IoT Edge 進行通訊協議轉換。 IoT Edge 支援其他邊緣智慧案例,以從 Azure IoT Central 應用程式卸載處理。

遙測時間戳

根據預設,IoT Central 會在儀錶板和圖表上顯示遙測時,使用訊息加入佇列的時間。 IoT Central 從裝置接收訊息時,會在內部設定訊息加入佇列的時間。

裝置可以在建立要傳送至IoT Central的訊息時設定 iothub-creation-time-utc 屬性。 如果此屬性存在,IoT Central 會在儀錶板和圖表上顯示遙測時使用它。

您可以從IoT Central 應用程式匯出遙測時,匯出加入佇列的時間和 iothub-creation-time-utc 屬性。

若要深入瞭解訊息屬性,請參閱裝置到雲端的系統屬性 IoT 中樞 訊息

最佳作法

這些建議示範如何實作裝置,以利用 IoT Central中的內建高可用性、災害復原和自動調整

處理連線失敗

為了調整或災害復原的目的,IoT Central 可能會更新其基礎 IoT 中樞。 若要維護連線,您的裝置程式代碼應該藉由建立與新 IoT 中樞 端點的連線,來處理特定的連線錯誤。

如果裝置在連線時收到下列任何錯誤,則應使用 DPS 重新佈建裝置,以取得新的 連接字串。 這些錯誤表示 連接字串 不再有效:

  • 無法連線 IoT 中樞 端點。
  • 過期的安全性令牌。
  • IoT 中樞中的裝置已停用。

如果裝置在連線時收到下列任何錯誤,則應該使用退後策略重試連線。 這些錯誤表示 連接字串 仍然有效,但暫時性狀況正在停止裝置連線:

  • 操作員封鎖的裝置。
  • 來自服務的內部錯誤 500。

若要深入瞭解裝置錯誤碼,請參閱 針對裝置連線進行疑難解答。

若要深入瞭解如何實作自動重新連線,請參閱 管理裝置重新連線以建立復原的應用程式

測試故障轉移功能

Azure CLI 可讓您測試裝置程式代碼的故障轉移功能。 CLI 命令的運作方式是暫時將裝置註冊切換至不同的內部IoT中樞。 若要確認裝置故障轉移是否正常運作,請檢查裝置是否仍會傳送遙測並回應命令。

若要執行裝置的故障轉移測試,請執行下列命令:

az iot central device manual-failover \
    --app-id {Application ID of your IoT Central application} \
    --device-id {Device ID of the device you're testing} \
    --ttl-minutes {How to wait before moving the device back to it's original IoT hub}

提示

若要尋找 應用程式識別碼,請流覽至 IoT Central應用程式中的應用程式 > 管理

如果命令成功,您會看到類似下列範例的輸出:

Command group 'iot central device' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
  "hubIdentifier": "6bd4...bafa",
  "message": "Success! This device is now being failed over. You can check your device'’'s status using 'iot central device registration-info' command. The device will revert to its original hub at Tue, 18 May 2021 11:03:45 GMT. You can choose to failback earlier using device-manual-failback command. Learn more: https://aka.ms/iotc-device-test"
}

若要深入瞭解 CLI 命令,請參閱 az iot central device manual-failover

您現在可以檢查來自裝置的遙測仍會連線到您的 IoT Central 應用程式。

提示

若要查看以各種程式設計語言處理故障轉移的範例裝置程式代碼,請參閱 IoT Central高可用性用戶端

下一步

一些建議的後續步驟是: