分享方式:


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 隨插即用慣例。

裝置型號

針對IoT Central,裝置模型是使用 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 高可用性用戶端

下一步

部分建議後續步驟為: