使用 Azure Cosmos DB 排序來自 Azure IoT 中樞的裝置連線事件

Azure 事件方格可協助您建置以事件為基礎的應用程式,並輕鬆將 IoT 事件整合至商業解決方案中。 本文將逐步引導您使用 Cosmos DB、邏輯應用程式、IoT 中樞事件和模擬 Raspberry Pi,來收集和儲存裝置的連線和中斷連線事件。

從裝置執行時起,作業順序就會啟動:

  1. 使用 IoT 中樞裝置金鑰的 Pi 裝置已啟動並停止

  2. IoT 中樞事件會擷取裝置活動,然後將 HTTP 要求傳送至邏輯應用程式

  3. 邏輯應用程式會根據您設定的條件來處理 HTTP 要求

  4. 邏輯應用程式會將連線或中斷連線事件記錄到 Cosmos DB 中的新文件

    我們將為此文章建立的設定螢幕擷取畫面。此設定會顯示所有服務和裝置的連線方式。

必要條件

  • 作用中的 Azure Cosmos DB for NoSQL 帳戶。 如果您尚未建立此帳戶,請參閱建立資料庫帳戶以取得逐步解說。

  • 您資料庫中的集合。 請參閱新增集合以取得逐步解說。 當您建立集合時,請使用 /id 作為分割區索引鍵。

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

  • Azure 訂用帳戶下的 IoT 中樞。 使用 CLIAzure 入口網站建立一個。

建立邏輯應用程式

讓我們建立邏輯應用程式,並新增可監視您虛擬機器資源群組的事件方格觸發程序。

建立邏輯應用程式資源

  1. Azure 入口網站中,依序選取 [+建立資源]、[整合] 和 [邏輯應用程式]。

    如何在 Azure 入口網站中尋找和選取邏輯應用程式的螢幕擷取畫面。

  2. 完成表單以建立新的邏輯應用程式,其中包含:

    • 您的訂用帳戶

    • 您的資源群組 (或建立新的資源群組)

    • 訂用帳戶中唯一的邏輯應用程式名稱

    • IoT 中樞的區域

    • 啟用記錄分析的 [否]

    • 使用量的方案類型

      注意

      使用量方案類型是在 UI 中啟用邏輯應用程式設計工具的選項。 如果您選擇 [標準] (預設),則必須建立新的工作流程,邏輯應用程式設計工具才會變成可用。

    如何在 Azure 入口網站中建立邏輯應用程式的螢幕擷取畫面。

  3. 選取 [檢閱 + 建立] 以檢閱設定,然後選取 [建立] 以建立邏輯應用程式。

  4. 您現在已經為您的應用程式邏輯建立一項 Azure 資源。 在 Azure 部署您的邏輯應用程式之後,請選取 [移至資源]。 邏輯應用程式設計工具會顯示常見模式的範本,以便您更快開始使用。

  5. 邏輯應用程式設計工具中,捲動直到您看到 [範本] 區段,然後選擇 [空白邏輯應用程式],以便從頭開始建置邏輯應用程式。

選取觸發程序

觸發程序是啟動邏輯應用程式的特定事件。 在本教學課程中,啟動工作流程的觸發程序會透過 HTTP 接收要求。

  1. 在連接器和觸發程序搜尋列中,輸入 HTTP 並且按 Enter 鍵。

  2. 選取要求 [收到 HTTP 要求時] 作為觸發程序。

    如何尋找 [選取 HTTP 要求觸發程序] 的螢幕擷取畫面。

  3. 選取 [使用範例承載來產生結構描述]。

    如何使用範例承載來產生結構描述的螢幕擷取畫面。

  4. 將下列 JSON 程式碼範例貼到文字方塊中,然後選取 [完成]。

    此 JSON 僅用於範本,因此確切的值並不重要。

    [{
     "id": "fbfd8ee1-cf78-74c6-dbcf-e1c58638ccbd",
     "topic":
       "/SUBSCRIPTIONS/DEMO5CDD-8DAB-4CF4-9B2F-C22E8A755472/RESOURCEGROUPS/EGTESTRG/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/MYIOTHUB",
     "subject": "devices/Demo-Device-1",
     "eventType": "Microsoft.Devices.DeviceConnected",
     "eventTime": "2018-07-03T23:20:11.6921933+00:00",
     "data": {
       "deviceConnectionStateEventInfo": {
         "sequenceNumber":
           "000000000000000001D4132452F67CE200000002000000000000000000000001"
       },
       "hubName": "MYIOTHUB",
       "deviceId": "48e44e11-1437-4907-83b1-4a8d7e89859e",
       "moduleId": ""
     },
     "dataVersion": "1",
     "metadataVersion": "1"
    }]
    

    貼到 Azure 文字方塊中的範例 JSON 承載螢幕擷取畫面。

建立條件

條件有助於在特定條件通過後,執行特定動作。 在本文中,條件是要檢查 eventType 是裝置連線還是中斷連線。 當 eventType 為 true 時所執行的動作,是在 Azure Cosmos DB 中建立的文件。 此條件是在邏輯應用程式設計工具中建立。

  1. 依序選取 [+ 新增步驟]、[內建] 索引標籤,接著尋找和選取名為 [條件] 的控制項。

  2. 在條件中,將 And 變更為 Or,因為我們想要在單一剖析中擷取連線事件或中斷連線事件。

  3. 在 [選擇一個值] 方塊內選取,將會出現快顯,其中顯示動態內容 -- 可以選取的欄位。

    • 選擇 eventType。 快顯隨即關閉,您會看到 [本文] 自動放在 [選取先前步驟的輸出] 中。 選取 [條件] 以重新開啟條件陳述式。

    • 保留 [等於] 值。

    • 輸入 Microsoft.Devices.DeviceConnected 作為該資料列的最後一個值。

    • 選取 [+ 新增] 以新增另一個資料列。

    • 第二個資料列類似於第一個資料列,但我們會尋找中斷連線事件。

      針對資料列值使用 eventType等於Microsoft.Devices.DeviceDisconnected

      完整 For Each 條件的螢幕擷取畫面。

  4. 在 [若為 true] 對話方塊中,按一下 [新增動作]。

    Azure 中 [如果為 true] 方塊的螢幕擷取畫面。

  5. 搜尋 Cosmos DB 並選取 [Azure Cosmos DB - 建立或更新文件 (V3)]

    搜尋 Azure Cosmos DB 的螢幕擷取畫面。

  6. 您會看到 [建立或更新文件 (V3)] 面板。 輸入欄位的這些值:

    Azure Cosmos DB 帳戶名稱:{新增帳戶名稱}

    資料庫識別碼:ToDoList

    集合識別碼:項目

    文件:從動態內容參數清單中選擇 Current item

    此螢幕擷取畫面顯示執行預存程序 (V3) 項目 (已選取新增參數)。

  7. 儲存您的邏輯應用程式。

複製 HTTP URL

離開 Logic Apps 設計工具之前,為觸發程序複製邏輯應用程式正在接聽的 URL。 您可以使用此 URL 來設定 Event Grid。

  1. 透過選取以展開 [收到 HTTP 要求時] 觸發程序設定方塊。

  2. 選取 [HTTP POST URL] 旁的複製按鈕來複製其值。

    尋找要複製之 HTTP URL 位置的螢幕擷取畫面。

  3. 儲存這個 URL,以便在下一節加以使用。

設定 IoT 中樞事件的訂用帳戶

在本節中,您可將 IoT 中樞設定為在事件發生時進行發佈。

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

  2. 選取 [事件]。

    [事件] 按鈕位於 IoT 中樞功能表中位置的螢幕擷取畫面。

  3. 選取 [+ 事件訂用帳戶]。

    建立新的事件訂用帳戶

  4. 填寫 [事件訂閱詳細資料]:提供描述性的 [名稱],然後選取 [事件方格結構描述] 作為 [事件結構描述]。

  5. 為 IoT 中樞資源建立系統主題名稱

  6. 填妥 [事件種類] 欄位。 在下拉式清單中,僅從功能表中選取 [已連線的裝置] 和 [已中斷連線的裝置]。 按一下畫面上的任意處,以關閉清單並儲存您的選取項目。

    設定要尋找的事件類型

  7. 針對 [端點詳細資料],選取 [Web Hook] 作為 [端點類型],然後點選端點,再貼上您從邏輯應用程式複製的 URL,並確認您的選取。

    選取端點 URL

  8. 表單現在看起來應該會類似下列範例:

    建立事件訂閱之表單的螢幕擷取畫面。

    選取 [建立] 以儲存事件訂用帳戶。

    重要

    請稍候幾分鐘,讓事件在執行裝置之前進行處理。 每當建立或變更 Azure 服務時,管線中下一步的起始速度太快可能會導致不必要的錯誤。 例如,如果 IoT 中樞未處於作用中狀態,則無法接收事件。 檢查 IoT 中樞 [概觀] 頁面,以查看 IoT 中樞是否處於作用中狀態。 如果不是,您會在頁面頂端看到警告。

    IoT 中樞錯誤的螢幕擷取畫面,指出其不在作用中狀態。

執行裝置並觀察事件

現在您已設定事件訂用帳戶,接下來我們將連接裝置以進行測試。

在 IoT 中樞登錄裝置

  1. 從 IoT 中樞選取 [裝置]。

  2. 在窗格頂端選取 [+新增裝置]。

  3. 在 [裝置識別碼] 中,輸入 Demo-Device-1

  4. 選取 [儲存]。

    [新增裝置] 按鈕位置的螢幕擷取畫面。

  5. 再次按一下裝置;現在會填入連接字串和索引鍵。 複製並儲存 [主要連接字串] 以供稍後使用。

    裝置主要連接字串位置的螢幕擷取畫面。

啟動 Raspberry Pi 模擬器

我們將使用 Raspberry Pi Web 模擬器來模擬裝置連線。

啟動 Raspberry Pi 模擬器

在 Raspberry Pi Web 模擬器上執行範例應用程式

此樣本應用程式將會觸發裝置連線事件。

  1. 在編碼區域中,將行 15 中的預留位置取代為您在上一節結尾儲存的 Azure IoT 中樞裝置連接字串。

    在 Raspberry Pi 指令碼中新增主要連接字串位置的螢幕擷取畫面。

  2. 選取 [執行] 以執行應用程式。

    您會看見如下所示的輸出,其中顯示傳送至 IoT 中樞的感應器資料和訊息。

    當您執行 Raspberry Pi 時,在輸出主控台中預期出現內容的螢幕擷取畫面。

  3. 您可以檢查邏輯應用程式 [概觀] 頁面,以檢查邏輯是否已觸發。 其會表示已成功已失敗。 如果需要疑難排解,查看這裡可讓您知道邏輯應用程式的狀態。 當觸發程序執行時,預期會有 15-30 秒的延遲。 如果您需要針對邏輯應用程式進行疑難排解,請檢視此疑難排解錯誤一文。

    邏輯應用程式 [概觀] 頁面上狀態更新的螢幕擷取畫面。

  4. 選取 [停止] 以停止模擬器,其會觸發 [裝置中斷連線] 事件。 此事件將會記錄在邏輯應用程式 [概觀] 頁面上,就像記錄在該處的連線事件一樣。

您現在已執行應用程式範例來收集裝置的連線和中斷連線事件,這些事件會移至 IoT 中樞。

觀察 Azure Cosmos DB 中的事件

您可以在 Cosmos DB 文件中查看執行邏輯應用程式的結果。 當您重新整理頁面時,該文件會出現在 Items 集合中。 每個連線狀態事件都會產生新的文件,該文件會被指派唯一 id。 下圖顯示裝置啟動 (連線) 時所建立的文件。 連接的事件類型會列在 JSON 輸出中。

Cosmos DB 集合中新產生的連線狀態事件的螢幕擷取畫面。

使用 Azure CLI

您不必使用 Azure 入口網站,可改用 Azure CLI 來完成 IoT 中樞步驟。 如需詳細資訊,請參閱 Azure CLI 頁面:建立事件訂用帳戶建立 IoT 裝置

清除資源

本教學課程使用了會使您的 Azure 訂用帳戶產生費用的資源。 完成教學課程試用和結果測試時,請停用或刪除不想保留的資源。

邏輯應用程式

如果不想遺失您在應用程式邏輯上所做的工作,請將它停用,而非刪除它。

  1. 瀏覽至您的邏輯應用程式。

  2. 在 [概觀] 刀鋒刀鋒視窗上選取 [刪除] 或 [停用]。

    每個訂用帳戶都可以有一個免費的 IoT 中樞。 如果您為本教學課程建立了免費中樞,則不必為了避免費用而將它刪除。

IoT 中樞或事件方格

  1. 瀏覽至您的 IoT 中樞。

  2. 在 [概觀] 刀鋒視窗上選取 [刪除]。

  3. 即使要保留 IoT 中樞,您也可以刪除您所建立的事件訂用帳戶。 在 IoT 中樞中,選取 [Event Grid]。

  4. 選取您想要移除的事件訂閱,然後選取 [刪除]。

Cosmos DB

若要從 Azure 入口網站中移除 Azure Cosmos DB 帳戶,請移至資源,然後從頂端功能表列選取 [刪除帳戶]。 請參閱刪除 Azure Cosmos DB 帳戶中的詳細指示。

後續步驟