共用方式為


教學課程:透過透明網關傳送數據

適用於:勾選圖示 IoT Edge 1.1

這很重要

IoT Edge 1.1 終止支援日期為 2022 年 12 月 13 日。 如需此產品、服務、技術或 API 的支援資訊,請參閱 Microsoft 產品生命週期。 如需更新至最新版 IoT Edge 的詳細資訊,請參閱 更新 IoT Edge

在本文中,我們再次使用開發 VM 作為模擬裝置。 不過,裝置並不會將數據直接傳送至 IoT 中樞,而是將數據傳送至設定為透明網關的 IoT Edge 裝置。

我們會在模擬裝置傳送數據時監視IoT Edge裝置的作業。 裝置完成執行之後,我們會查看記憶體帳戶中的數據,以驗證一切如預期般運作。

此步驟通常是由雲端或裝置開發人員執行。

在本教學課程的本節中,您將瞭解如何:

  • 建置並執行下游裝置。
  • 確認產生的數據正在您的 Azure Blob 記憶體中儲存。
  • 驗證機器學習模型是否已分類裝置數據。

先決條件

本文是一系列關於在 IoT Edge 上使用 Azure Machine Learning 的教學課程的一部分。 本系列中的每個文章都是以上一篇文章中的工作為基礎。 如果您已直接抵達本文,請瀏覽本系列的第一篇文章

檢查設備線束

重複使用 DeviceHarness專案 來模擬下游裝置。 連接到透明閘道需要兩個額外條件:

  • 註冊憑證,讓下游 IoT 裝置信任 IoT Edge 運行時間所使用的證書頒發機構單位。 在我們的案例中,下游裝置是開發 VM。
  • 將邊緣閘道的完全限定的網域名稱(FQDN)新增至裝置連接字串中。

查看程式代碼以查看這兩個項目的實作方式。

  1. 在您的開發電腦上開啟 Visual Studio Code。

  2. 使用 檔案>開啟資料夾... 開啟 C:\source\IoTEdgeAndMlSample\DeviceHarness。

  3. 查看 Program.cs 中的 InstallCertificate() 方法。

  4. 請注意,如果程式代碼找到憑證路徑,它會呼叫 CertificateManager.InstallCACert 方法來在計算機上安裝憑證。

  5. 現在查看 TurbofanDevice 類別上的 GetIotHubDevice 方法。

  6. 當使用者使用 「-g」 選項指定閘道的 FQDN 時,該值會傳遞至此方法做為 gatewayFqdn 變數,而變數會附加至裝置連接字串。

    connectionString = $"{connectionString};GatewayHostName={gatewayFqdn.ToLower()}";
    

建置並執行下游裝置

  1. 當 DeviceHarness 專案仍在 Visual Studio Code 中開啟時,請建置專案。 從 [ 終端機 ] 功能表中,選取 [ 執行建置工作 ],然後選取 [ 建置]。

  2. 在 Azure 入口網站中,導覽至您的 IoT Edge 裝置(Linux VM),並從概觀頁面複製 DNS 名稱 的值,來找到您的邊界閘道的完整網域名稱(FQDN)。

  3. 如果 IoT 裝置尚未執行,請啟動您的 IoT 裝置(Linux VM)。

  4. 開啟 Visual Studio Code 終端機。 從 [ 終端機 ] 功能表中,選取 [ 新增終端機 ],然後執行下列命令,並將 取代 <edge_device_fqdn> 為您從 IoT Edge 裝置複製的 DNS 名稱(Linux VM):

    dotnet run -- --gateway-host-name "<edge_device_fqdn>" --certificate C:\edgecertificates\certs\azure-iot-test-only.root.ca.cert.pem --max-devices 1
    
  5. 應用程式會嘗試將憑證安裝到您的開發計算機上。 當情況發生時,請接受安全警告。

  6. 當系統提示您輸入IoT中樞連接字串時,按兩下 Azure IoT 中樞裝置面板上的省略號 (...),然後選取 [ 複製IoT中樞連接字串]。 將值貼到終端機中。

  7. 您會看到如下的輸出:

    Found existing device: Client_001
    Using device connection string: HostName=<your hub>.azure-devices.net;DeviceId=Client_001;SharedAccessKey=xxxxxxx; GatewayHostName=iotedge-xxxxxx.<region>.cloudapp.azure.com
    Device: 1 Message count: 50
    Device: 1 Message count: 100
    Device: 1 Message count: 150
    Device: 1 Message count: 200
    Device: 1 Message count: 250
    

    請注意將 「GatewayHostName」 新增至裝置連接字串,這會導致裝置透過 IoT Edge 透明閘道透過 IoT 中樞進行通訊。

檢查輸出

IoT Edge 裝置輸出

透過查看IoT Edge裝置,即可輕鬆地觀察avroFileWriter模組的輸出。

  1. 透過 SSH 連線到 IoT Edge 虛擬機。

  2. 尋找寫入磁碟的檔案。

    find /data/avrofiles -type f
    
  3. 命令輸出看起來會像下列範例:

    /data/avrofiles/2019/4/18/22/10.avro
    

    視執行的時間而定,您可能有超過單一檔案。

  4. 請注意時間戳。 avroFileWriter 模組會在上次修改時間超過 10 分鐘之後,將檔案上傳至雲端(請參閱 avroFileWriter 模組中 uploader.py 中的MODIFIED_FILE_TIMEOUT)。

  5. 經過10分鐘之後,模組應該會上傳檔案。 如果上傳成功,它會從磁碟刪除檔案。

Azure 儲存服務

我們可以透過查看我們預期數據路由傳送的儲存帳戶,來觀察下游裝置傳送數據的結果。

  1. 在開發電腦上開啟 Visual Studio Code。

  2. 在 [探索] 視窗中的 [Azure 儲存體] 面板中,導覽樹狀檢視以尋找您的儲存體帳戶。

  3. 展開 Blob 容器 節點。

  4. 從我們在教學課程的上一部分中所做的工作,我們預期 ruldata 容器應該包含帶有 RUL 的訊息。 展開 ruldata 節點。

  5. 您會看到一或多個名為 的 Blob 檔案,例如: <IoT Hub Name>/<partition>/<year>/<month>/<day>/<hour>/<minute>

  6. 以滑鼠右鍵按兩下其中一個檔案,然後選擇 [ 下載 Blob ] 將檔案儲存至您的開發電腦。

  7. 接下來展開 uploadturbofanfiles 節點。 在上一篇文章中,我們會將此位置設定為avroFileWriter模組所上傳檔案的目標。

  8. 以滑鼠右鍵按下檔案,然後選擇 [ 下載 Blob ] 以將它儲存到您的開發電腦。

讀取 Avro 檔案內容

我們包含一個簡單的命令行公用程式,用於讀取Avro檔案,並傳回檔案中訊息的JSON字串。 在本節中,我們將安裝並執行它。

  1. 在 Visual Studio Code 中開啟終端機(終端機>新終端機)。

  2. 安裝 hubavroreader:

    pip install c:\source\IoTEdgeAndMlSample\HubAvroReader
    
  3. 使用 hubavroreader 讀取您從 ruldata 下載的 Avro 檔案。

    hubavroreader <avro file with ath> | more
    
  4. 請注意,訊息本文會如預期般顯示裝置ID和預測的剩餘使用壽命(RUL)。

    {
        "Body": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CycleTime": 1.0,
            "PredictedRul": 170.1723693909444
        },
        "EnqueuedTimeUtc": "<time>",
        "Properties": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CreationTimeUtc": "01/01/0001 00:00:00",
            "EnqueuedTimeUtc": "01/01/0001 00:00:00"
        },
        "SystemProperties": {
            "connectionAuthMethod": "{\"scope\":\"module\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "connectionDeviceGenerationId": "636857841798304970",
            "connectionDeviceId": "aaTurbofanEdgeDevice",
            "connectionModuleId": "turbofanRouter",
            "contentEncoding": "utf-8",
            "contentType": "application/json",
            "correlationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "enqueuedTime": "<time>",
            "iotHubName": "mledgeiotwalkthroughhub"
        }
    }
    
  5. 執行相同的命令,傳遞您從 uploadturbofanfiles 下載的 Avro 檔案。

  6. 如預期般,這些訊息包含來自原始訊息的所有感測器數據和作設定。 此數據可用來改善邊緣裝置上的 RUL 模型。

    {
        "Body": {
            "CycleTime": 1.0,
            "OperationalSetting1": -0.0005000000237487257,
            "OperationalSetting2": 0.00039999998989515007,
            "OperationalSetting3": 100.0,
            "PredictedRul": 170.17236328125,
            "Sensor1": 518.6699829101562,
            "Sensor10": 1.2999999523162842,
            "Sensor11": 47.29999923706055,
            "Sensor12": 522.3099975585938,
            "Sensor13": 2388.010009765625,
            "Sensor14": 8145.31982421875,
            "Sensor15": 8.424599647521973,
            "Sensor16": 0.029999999329447746,
            "Sensor17": 391.0,
            "Sensor18": 2388.0,
            "Sensor19": 100.0,
            "Sensor2": 642.3599853515625,
            "Sensor20": 39.11000061035156,
            "Sensor21": 23.353700637817383,
            "Sensor3": 1583.22998046875,
            "Sensor4": 1396.8399658203125,
            "Sensor5": 14.619999885559082,
            "Sensor6": 21.610000610351562,
            "Sensor7": 553.969970703125,
            "Sensor8": 2387.9599609375,
            "Sensor9": 9062.169921875
        },
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "70df0c98-0958-4c8f-a422-77c2a599594f",
            "CreationTimeUtc": "0001-01-01T00:00:00+00:00",
            "EnqueuedTimeUtc": "<time>"
    }
    

清理資源

如果您打算探索此端對端教學課程所使用的資源,請等到您完成清除您所建立的資源為止。 否則,請使用下列步驟來刪除它們:

  1. 刪除建立以保存開發 VM、IoT Edge VM、IoT 中樞、記憶體帳戶、機器學習工作區服務的資源群組(以及建立的資源:容器登錄、Application Insights、密鑰保存庫、記憶體帳戶)。

  2. 刪除 Azure Notebooks 中的機器學習專案。

  3. 如果您在本機複製存放庫,請關閉參照本機存放庫的任何 PowerShell 或 VS Code 視窗,然後刪除存放庫目錄。

  4. 如果您在本機建立憑證,請刪除 c:\edgeCertificates 資料夾。

後續步驟

在本文中,我們使用開發 VM 來模擬下游裝置,將感測器和作數據傳送至 IoT Edge 裝置。 我們已檢查邊緣裝置的即時作業,並查看上傳至記憶體帳戶的檔案,來驗證裝置上的模組是否已路由、分類、保存及上傳數據。

若要繼續瞭解IoT Edge功能,請嘗試下一個教學課程: