適用於:
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)新增至裝置連接字串中。
查看程式代碼以查看這兩個項目的實作方式。
在您的開發電腦上開啟 Visual Studio Code。
使用 檔案>開啟資料夾... 開啟 C:\source\IoTEdgeAndMlSample\DeviceHarness。
查看 Program.cs 中的 InstallCertificate() 方法。
請注意,如果程式代碼找到憑證路徑,它會呼叫 CertificateManager.InstallCACert 方法來在計算機上安裝憑證。
現在查看 TurbofanDevice 類別上的 GetIotHubDevice 方法。
當使用者使用 「-g」 選項指定閘道的 FQDN 時,該值會傳遞至此方法做為
gatewayFqdn變數,而變數會附加至裝置連接字串。connectionString = $"{connectionString};GatewayHostName={gatewayFqdn.ToLower()}";
建置並執行下游裝置
當 DeviceHarness 專案仍在 Visual Studio Code 中開啟時,請建置專案。 從 [ 終端機 ] 功能表中,選取 [ 執行建置工作 ],然後選取 [ 建置]。
在 Azure 入口網站中,導覽至您的 IoT Edge 裝置(Linux VM),並從概觀頁面複製 DNS 名稱 的值,來找到您的邊界閘道的完整網域名稱(FQDN)。
如果 IoT 裝置尚未執行,請啟動您的 IoT 裝置(Linux VM)。
開啟 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應用程式會嘗試將憑證安裝到您的開發計算機上。 當情況發生時,請接受安全警告。
當系統提示您輸入IoT中樞連接字串時,按兩下 Azure IoT 中樞裝置面板上的省略號 (...),然後選取 [ 複製IoT中樞連接字串]。 將值貼到終端機中。
您會看到如下的輸出:
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模組的輸出。
透過 SSH 連線到 IoT Edge 虛擬機。
尋找寫入磁碟的檔案。
find /data/avrofiles -type f命令輸出看起來會像下列範例:
/data/avrofiles/2019/4/18/22/10.avro視執行的時間而定,您可能有超過單一檔案。
請注意時間戳。 avroFileWriter 模組會在上次修改時間超過 10 分鐘之後,將檔案上傳至雲端(請參閱 avroFileWriter 模組中 uploader.py 中的MODIFIED_FILE_TIMEOUT)。
經過10分鐘之後,模組應該會上傳檔案。 如果上傳成功,它會從磁碟刪除檔案。
Azure 儲存服務
我們可以透過查看我們預期數據路由傳送的儲存帳戶,來觀察下游裝置傳送數據的結果。
在開發電腦上開啟 Visual Studio Code。
在 [探索] 視窗中的 [Azure 儲存體] 面板中,導覽樹狀檢視以尋找您的儲存體帳戶。
展開 Blob 容器 節點。
從我們在教學課程的上一部分中所做的工作,我們預期 ruldata 容器應該包含帶有 RUL 的訊息。 展開 ruldata 節點。
您會看到一或多個名為 的 Blob 檔案,例如:
<IoT Hub Name>/<partition>/<year>/<month>/<day>/<hour>/<minute>。以滑鼠右鍵按兩下其中一個檔案,然後選擇 [ 下載 Blob ] 將檔案儲存至您的開發電腦。
接下來展開 uploadturbofanfiles 節點。 在上一篇文章中,我們會將此位置設定為avroFileWriter模組所上傳檔案的目標。
以滑鼠右鍵按下檔案,然後選擇 [ 下載 Blob ] 以將它儲存到您的開發電腦。
讀取 Avro 檔案內容
我們包含一個簡單的命令行公用程式,用於讀取Avro檔案,並傳回檔案中訊息的JSON字串。 在本節中,我們將安裝並執行它。
在 Visual Studio Code 中開啟終端機(終端機>新終端機)。
安裝 hubavroreader:
pip install c:\source\IoTEdgeAndMlSample\HubAvroReader使用 hubavroreader 讀取您從 ruldata 下載的 Avro 檔案。
hubavroreader <avro file with ath> | more請注意,訊息本文會如預期般顯示裝置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" } }執行相同的命令,傳遞您從 uploadturbofanfiles 下載的 Avro 檔案。
如預期般,這些訊息包含來自原始訊息的所有感測器數據和作設定。 此數據可用來改善邊緣裝置上的 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>" }
清理資源
如果您打算探索此端對端教學課程所使用的資源,請等到您完成清除您所建立的資源為止。 否則,請使用下列步驟來刪除它們:
刪除建立以保存開發 VM、IoT Edge VM、IoT 中樞、記憶體帳戶、機器學習工作區服務的資源群組(以及建立的資源:容器登錄、Application Insights、密鑰保存庫、記憶體帳戶)。
刪除 Azure Notebooks 中的機器學習專案。
如果您在本機複製存放庫,請關閉參照本機存放庫的任何 PowerShell 或 VS Code 視窗,然後刪除存放庫目錄。
如果您在本機建立憑證,請刪除 c:\edgeCertificates 資料夾。
後續步驟
在本文中,我們使用開發 VM 來模擬下游裝置,將感測器和作數據傳送至 IoT Edge 裝置。 我們已檢查邊緣裝置的即時作業,並查看上傳至記憶體帳戶的檔案,來驗證裝置上的模組是否已路由、分類、保存及上傳數據。
若要繼續瞭解IoT Edge功能,請嘗試下一個教學課程: