教學課程:使用 IoT 中樞訊息路由,將裝置資料傳送至 Azure 儲存體

使用 Azure IoT 中樞內的訊息路由,從 IoT 裝置將遙測資料傳送至 Azure 服務,例如 Blob 儲存體、服務匯流排佇列、服務匯流排主題,以及事件中樞。 每個 IoT 中樞都有與事件中樞相容的預設內建端點。 您也可以藉由定義路由查詢,建立自訂端點,並將訊息路由傳送至其他 Azure 服務。 抵達 IoT 中樞的每個訊息都會路由傳送至其所符合之路由查詢的所有端點。 如果訊息不符合任何定義的路由查詢,就會將其路由傳送至預設端點。

在本教學課程中,您會執行下列工作:

  • 建立 IoT 中樞,並將裝置訊息傳送給它。
  • 建立儲存體帳戶。
  • 建立儲存體帳戶的自訂端點,並從 IoT 中樞將訊息路由傳送至該端點。
  • 檢視儲存體帳戶 Blob 中的裝置訊息。

先決條件

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

  • Azure 訂用帳戶中的 IoT 中樞。 如果您還沒有中樞,可遵循建立 IoT 中樞中的步驟。

  • 本教學課程使用 適用於 C# 的 Azure IoT SDK 中的範例程式碼。

    • 將 SDK 存放庫下載並複製到您的開發電腦。
    • 您的開發電腦必須有 .NET Core 3.0.0 或以上版本。 視需要執行 dotnet --version下載 .NET 以檢查版本。
  • 請確定您的防火牆已開啟連接埠 8883。 本教學課程中的範例會使用 MQTT 通訊協定,其會透過連接埠 8883 進行通訊。 某些公司和教育網路環境可能會封鎖此連接埠。 如需此問題的詳細資訊和解決方法,請參閱連線至 IoT 中樞 (MQTT)

  • 選擇性的安裝 Azure IoT 總管。 此工具可協助您觀察訊息抵達 IoT 中樞時。 本文使用 Azure IoT Explorer。

Azure 入口網站沒有其他必要條件。

註冊裝置並將訊息傳送至 IoT 中樞

在 IoT 中樞註冊新裝置。

  1. 登入 Azure 入口網站,然後瀏覽至 IoT 中樞。

  2. 從功能表的 [裝置管理] 區段中選取 [裝置]。

  3. 選取 [新增裝置]。

    顯示在Azure 入口網站中新增裝置的螢幕擷取畫面。

  4. 提供裝置識別碼,然後選取 [儲存]。

  5. 新裝置現在應該位於裝置清單中。 如果沒有,請重新整理頁面。 選取該裝置識別碼以開啟裝置詳細資料頁面。

  6. 複製其中一個裝置金鑰並加以儲存。 您將使用此值來設定產生模擬裝置遙測訊息的範例程式碼。

    顯示從裝置詳細資料頁面複製主鍵的螢幕擷取畫面。

既然您有裝置識別碼和金鑰,請使用範例程式碼開始將裝置遙測訊息傳送至IoT 中樞。

秘訣

如果您遵循本教學課程的 Azure CLI 步驟,請在個別會話中執行範例程式碼。 如此一來,您可以允許範例程式碼在遵循其餘 CLI 步驟時繼續執行。

  1. 如果您不是必要條件的一部分,請立即從 GitHub 下載或複製適用於 C# 存放庫的 Azure IoT SDK

  2. 從您下載或複製 SDK 的資料夾,瀏覽至 azure-iot-sdk-csharp\iothub\device\samples\how to guides\HubRoutingSample 資料夾。

  3. 安裝 Azure IoT C# SDK 和檔案中指定的 HubRoutingSample.csproj 必要相依性:

    dotnet restore
    
  4. 在您選擇的編輯器中開啟 Parameters.cs 檔案。 此檔案會顯示範例所支援的參數。 執行範例時,本文只會使用 PrimaryConnectionString 參數。 檢閱此檔案中的程式碼。 不需要任何變更。

  5. 使用下列命令建置和執行範例程式碼:

    以 IoT 中樞中裝置提供的主要連接字串取代 <myDevicePrimaryConnectionString>

    dotnet run --PrimaryConnectionString <myDevicePrimaryConnectionString>
    
  6. 您應該會在訊息傳送至 IoT 中樞時,開始看到列印到輸出的訊息。 讓此程式在教學課程期間保持執行。

設定 IoT 檔案總管以檢視訊息

設定 IoT Explorer 以連線到 IoT 中樞,並在訊息抵達內建端點時讀取訊息。

首先,擷取 IoT 中樞的連接字串。

  1. 在 Azure 入口網站中,瀏覽至您的 IoT 中樞。

  2. 從功能表的安全性設定區段中選取共用存取原則

  3. 選取 iothubowner 原則。

    開啟 iothubowner 共用存取原則。

  4. 複製主要連結字串

    複製 iothubowner 主要連接字串。

現在,使用該連接字串來設定 IoT 中樞的 IoT 總管。

  1. 在開發電腦上安裝 IoT 總管。

  2. 選取 [新增連線]。

    顯示在 IoT 總管中新增 IoT 中樞連線的螢幕擷取畫面。

  3. 將中樞的連接字串貼上至文字方塊中。

  4. 選取 [儲存]。

  5. 連線到 IoT 中樞後,您應該會看到裝置清單。 選取您為此教學課程建立的裝置識別碼。

  6. 選取 [遙測]。

  7. 當您的裝置仍在執行時,請選取 [啟動]。 如果您的裝置未執行,則不會看到遙測。

    開始在 IoT 總管中監視裝置遙測。

  8. 您應該會看到從裝置抵達的訊息,其中最近的訊息會顯示於頂端。

    檢視抵達內建端點上 IoT 中樞的訊息。

    觀察傳入訊息的特定時間,以確認您看到三種不同類型的訊息:一般、儲存和重要。 看到此遙測之後,即可停止裝置。

這些訊息全都會抵達 IoT 中樞的預設內建端點。 在下一節中,我們將建立自訂端點,並根據訊息屬性將其中部分訊息路由傳送至儲存體。 這些訊息將會停止出現在 IoT 總管中,因為訊息只會在訊息不符合 IoT 中樞的任何其他路由時,才會移至內建端點。

設定訊息路由

您將根據由模擬裝置附加至訊息的屬性,將訊息路由至不同的資源。 沒有自訂路由的訊息會傳送至預設的端點 (訊息/事件)。

本教學課程的範例應用程式會將 level 屬性指派給傳送至 IoT 中樞的每個訊息。 每個訊息都會隨機指派一個層級的一般儲存重要

第一個步驟是設定要作為資料路由傳送目的地的端點。 第二個步驟是設定會使用該端點的訊息路由。 設定好路由之後,您便可以在入口網站中檢視端點和訊息路由。

建立儲存體帳戶

建立 Azure 儲存體帳戶和該帳戶內的容器,會保存路由至該帳戶的裝置訊息。

  1. 在 Azure 入口網站中,搜尋儲存體帳戶

  2. 選取 [建立]。

  3. 為您的儲存體帳戶提供下列值:

    參數
    訂用帳戶 選取包含 IoT 中樞的相同訂閱。
    資源群組 選取包含 IoT 中樞的相同資源群組。
    儲存體帳戶名稱 為您的儲存體帳戶提供全域唯一名稱。
    效能 接受預設標準值。

    顯示建立儲存體帳戶的螢幕擷取畫面。

  4. 您可以選取 [檢閱 + 建立],接受所有其他預設值。

  5. 驗證完成時,選取 [建立]。

  6. 部署完成後,請選取 [前往資源]。

  7. 在儲存體帳戶功能表中,從 [資料儲存體] 中選取 [容器]。

  8. 選取 [+ 容器] 以建立新的容器。

    顯示建立儲存體容器的螢幕擷取畫面

  9. 為您的儲存體提供名稱,然後選取 [建立]。

路由傳送至儲存體帳戶

現在來設定儲存體帳戶的路由。 在本節中,您會定義指向您所建立儲存體帳戶的新端點。 然後,建立路由以篩選 level 屬性設定為 storage 的訊息,並將這些路由傳送至儲存體端點。

注意

資料可採用 Apache Avro (英文) 格式 (預設值) 或 JSON 寫入至 Blob 儲存體。

您只能在設定 Blob 儲存體端點時設定編碼格式。 已完成設定的端點就無法變更此格式。 在使用 JSON 編碼時,您必須在訊息系統屬性中將 contentType 設定為 JSON,並將 contentEncoding 設定為 UTF-8。

如需如何使用 Blob 儲存體端點的詳細資訊,請參閱路由傳送至儲存體的指引

  1. Azure 入口網站中,移至您的 IoT 中樞。

  2. 在 [中 樞設定] 底下的 [資源] 功能表中,選取 [ 訊息路由 ],然後選取 [ 新增]。

    顯示 [新增] 按鈕位置的螢幕擷取畫面,以在 IoT 中樞中新增路由。

  3. 在 [ 端點] 索引 標籤上,提供下列資訊來建立儲存體端點:

    參數
    端點類型 選取 [儲存體] 。
    端點名稱 提供此端點的唯一名稱。
    Azure 儲存體容器 選取 [挑選容器]。 遵循提示來選取您在上一節中建立的儲存體帳戶和容器。
    編碼方式 選取 [JSON]。 如果此欄位呈現灰色,則您的儲存體帳戶區域不支援 JSON。 在此情況下,請繼續進行預設 AVRO

    顯示 [新增儲存體端點] 窗格的螢幕擷取畫面,其中已選取正確的選項。

  4. 接受其餘參數的預設值,然後選取 [ 建立 + 下一步]。

  5. 在 [ 路由] 索引 標籤上,提供下列資訊來建立指向您所建立儲存體端點的路由:

    參數
    名稱 為路由建立名稱。
    資料來源 確認已從下拉式清單中選取 [裝置遙測訊息]。
    啟用路由 確認已核取此欄位。
    路由查詢 輸入 level="storage" 作為查詢字串。

    顯示使用路由查詢新增路由的螢幕擷取畫面。

  6. 選取 [建立 + 略過擴充]。

檢視路由訊息

在 IoT 中樞中建立路由並啟用後,它會立即開始路由訊息,以符合其查詢準則至儲存體端點。

使用 IoT 總管監視內建端點

返回開發電腦上的 IoT 總管工作階段。 回想一下,IoT 總管會監視 IoT 中樞的內建端點。 這表示您現在應該只會看到我們建立的自訂路由「未」路由的訊息。

執行程式碼,再次啟動範例。 觀察傳入的訊息一段時間,您應該只會看到 level 設定為 normalcritical 的訊息。

檢視儲存體容器中的訊息

確認訊息已抵達儲存體容器。

  1. Azure 入口網站中,瀏覽至您的儲存體帳戶。

  2. 從功能表的 [資料儲存體] 區段選取 [容器]。

  3. 選取您為此教學課程建立的容器。

  4. 應該會有具有 IoT 中樞名稱的資料夾。 向下鑽研檔案結構,直到您取得 .json 檔案為止。

    顯示尋找儲存體中路由訊息的螢幕擷取畫面。

  5. 選取 JSON 檔案,然後選取 [下載] 以下載 JSON 檔案。 確認檔案包含裝置中已將 level 屬性設定為 storage 的訊息。

  6. 停止執行範例。

清除資源

如果您想要移除本教學課程使用的的所有 Azure 資源,請刪除資源群組。 此動作會同時刪除群組內含的所有資源。 如果您不想要刪除整個資源群組,請使用 Azure 入口網站尋找和刪除個別資源。

如果您想要繼續進行下一個教學課程,請保留您在這裡建立的資源。

  1. 在 Azure 入口網站中,瀏覽至包含本教學課程 IoT 中樞和儲存體帳戶的資源群組。
  2. 檢閱資源群組中的所有資源,以判斷您要清除哪些資源。
    • 若要刪除所有資源,您可以選取 [刪除資源群組]。
    • 如果您只想要刪除特定資源,請使用每個資源名稱旁邊的核取方塊來選取您要刪除的資源。 然後選取 [刪除]。

後續步驟

在本教學課程中,您已了解如何建立 Azure 資源的自訂端點,然後建立路由將裝置訊息傳送至該端點。 繼續進行下一個教學課程,了解如何使用額外的資料擴充訊息,以簡化下游流程