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高可用性用戶端。
下一步
一些建議的後續步驟是:
- 完成建立用戶端應用程式並將其連線至 Azure IoT Central 應用程式的教學課程
- 檢閱 IoT Central中的裝置驗證概念
- 瞭解如何 使用 Azure CLI 監視裝置連線能力
- 閱讀 Azure IoT Edge 裝置和 Azure IoT Central 的相關信息