如何透過 IoT Edge 透明網路閘道連接裝置
IoT Edge 裝置可作為閘道,建立區域網路上其他裝置與 IoT Central 應用程式之間的連線。 當裝置無法直接存取 IoT Central 應用程式時,您可使用閘道。
IoT Edge 支援透明和轉譯閘道模式。 本文摘要說明如何實作透明閘道模式。 在此模式中,閘道會將來自下游裝置的訊息傳遞至 IoT Central 應用程式中 IoT 中樞端點。 閘道不會在訊息通過時操作訊息。 在 IoT Central 中,每個下游裝置會顯示為閘道裝置的子系:
重要
本文包含使用共用存取簽章 (也稱為對稱金鑰驗證) 連線裝置的步驟。 此驗證方法方便進行測試和評估,但使用 X.509 憑證來驗證裝置是更安全的方法。 若要深入了解,請參閱安全性最佳做法>連線安全性。
簡單起見,本文會使用虛擬機器來裝載下游和閘道裝置。 在實際案例中,下游裝置和閘道會在您區域網路上的實體裝置上執行。
本文說明如何使用 IoT Edge 1.4 執行階段來實作案例。
必要條件
若要完成本文的步驟,您需要:
啟用中的 Azure 訂用帳戶。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
從 [自訂應用程式] 範本建立 Azure IoT Central 應用程式。 若要深入了解,請參閱建立 IoT Central 應用程式。
若要依照本文的步驟操作,請將下列檔案下載到您的電腦:
- 控溫器裝置型號 (thermostat-1.json) - 此檔案是下游裝置的裝置型號。
- 透明閘道資訊清單 (EdgeTransparentGatewayManifest.json) - 此檔案是閘道裝置的 IoT Edge 部署資訊清單。
匯入部署資訊清單
每個 IoT Edge 裝置都需要部署資訊清單來設定 IoT Edge 執行階段。 若要匯入 IoT Edge 透明閘道的部署資訊清單:
瀏覽至 [Edge 資訊清單]。
選取 [+ 新增],輸入部署資訊清單的名稱,例如「透明閘道」,然後上傳您先前下載的 EdgeTransparentGatewayManifest.json 檔案。
選取 [建立],將部署資訊清單儲存在您的應用程式中。
新增裝置範本
下游裝置和閘道裝置都可以在 IoT Central 中使用裝置範本。 IoT Central 可讓您建立下游裝置與閘道之間的關聯性模型,以便在連線之後檢視和管理。 不需要裝置範本,即可將下游裝置連線至閘道。
若要建立下游裝置的裝置範本,請建立標準裝置範本來建立裝置功能模型。 本文所列的範例會使用您下載的控溫器裝置型號。
若要建立下游裝置的裝置範本:
建立裝置範本,然後選擇 [IoT 裝置] 作為範本類型。
在精靈的 [自訂] 頁面中輸入裝置範本的名稱,例如「控溫器」。
建立裝置範本之後,請選取 [匯入模型]。 選取模型,例如您先前下載的 thermostat-1.json 檔案。
若要產生控溫器的部分預設檢視,請選取檢視,然後選擇 [產生預設檢視]。
發佈裝置範本。
若要為 IoT Edge 透明閘道裝置建立裝置範本:
建立裝置範本,然後選擇 [Azure IoT Edge] 作為範本類型。
在精靈的 [自訂] 頁面中,輸入裝置範本的名稱,例如「Edge 閘道」。
在精靈的 [自訂] 頁面中,勾選 [這是閘道裝置]。
在 [檢閱] 頁面上,選取 [建立]。
在 [建立模型] 頁面中,選取 [自訂模型]。
將 [關聯] 中的項目新增至下游裝置範本。
下列螢幕擷取畫面顯示 IoT Edge 閘道裝置的 [關聯] 頁面,以及使用 [控溫器] 裝置範本的下游裝置:
上一個螢幕擷取畫面顯示未定義任何模組的 IoT Edge 閘道裝置範本。 透明閘道不需要任何模組,因為 IoT Edge 執行階段會將訊息從下游裝置直接轉送到 IoT Central。 如果閘道本身需要傳送遙測、同步屬性或處理命令,您可以在根元件或模組中定義這些功能。
在發佈閘道和下游裝置範本之前,請先新增任何必要的雲端屬性和檢視。
新增裝置
當您將裝置新增至 IoT Central 應用程式時,您可以定義下游裝置與透明閘道之間的關聯性。
若要新增裝置:
瀏覽至 IoT Central 應用程式的 [裝置] 頁面。
新增透明閘道 IoT Edge 裝置的執行個體。 當您新增裝置時,請確定您選取 [透明閘道] 部署資訊清單。 在本文中,閘道裝置識別碼為
edgegateway
。新增下游裝置的一或多個執行個體。 在本文中,下游裝置是具有識別碼
thermostat1
和thermostat2
的控溫器。在裝置清單中,選取每個下游裝置,然後選取 [連結到閘道]。
下列螢幕擷取畫面顯示您可以在 [下游裝置] 頁面上檢視連結至閘道的裝置清單:
在透明閘道中,下游裝置會連線到閘道本身,而不是閘道所裝載的自訂模組。
部署裝置之前,您需要:
- IoT Central 應用程式的識別碼範圍
- 閘道和下游裝置的裝置識別碼值。
- 閘道和下游裝置的主索引鍵值。
若要尋找這些值,請瀏覽至裝置清單中的每個裝置,然後選取 [連線]。 繼續之前,請記下這些值。
提示
您可以連接裝置並建立關聯性,而不需要先建立裝置的裝置範本。 您可以將未指派的下游裝置連結至未指派的閘道裝置。
部署閘道和裝置
為了讓您試用此情節,下列步驟示範如何將閘道和下游裝置部署到 Azure 虛擬機器。
提示
若要深入了解如何將 IoT Edge 執行階段部署到實體裝置,請參閱 IoT Edge 文件中的 建立 IoT Edge 裝置。
若要試用透明閘道情節,請選取下列按鈕來部署兩部 Linux 虛擬機器。 一部虛擬機器已安裝 IoT Edge 1.4 執行階段,且是透明的 IoT Edge 網路閘道。 另一部虛擬機器是您執行程式碼以傳送模擬控溫器遙測的下游裝置:
部署並執行兩部虛擬機器時,請確認 IoT Edge 閘道裝置正在 edgegateway
虛擬機器上執行:
移至 IoT Central 應用程式中的 [裝置] 頁面。 如果 IoT Edge 閘道裝置已連線到 IoT Central,其狀態為 [已佈建]。
開啟 IoT Edge 閘道裝置,並確認 [模組] 頁面上模組的狀態。 如果 IoT Edge 執行階段已成功啟動,則 $edgeAgent 和 $edgeHub 模組的狀態為 [執行中]:
提示
在虛擬機器啟動時,您可能需要等候幾分鐘的時間,而裝置則佈建在 IoT Central 應用程式中。
設定閘道
若要讓 IoT Edge 裝置作為透明閘道運作,則需要部分憑證來向任何下游裝置證明其身分識別。 本文使用示範憑證。 在實際執行環境中,請使用憑證授權單位的憑證。
若要產生示範憑證,並將其安裝在您的閘道裝置上:
使用 SSH 連線至閘道裝置虛擬機器並登入。
執行下列命令來複製 IoT Edge 存放庫,並產生示範憑證:
# Clone the repo cd ~ git clone https://github.com/Azure/iotedge.git # Generate the demo certificates mkdir certs cd certs cp ~/iotedge/tools/CACertificates/*.cnf . cp ~/iotedge/tools/CACertificates/certGen.sh . ./certGen.sh create_root_and_intermediate ./certGen.sh create_edge_device_ca_certificate "mycacert"
執行先前的命令之後,下列檔案已準備好在後續步驟中使用:
- ~/certs/certs/azure-iot-test-only.root.ca.cert.pem - 用來讓其他示範憑證測試 IoT Edge 情節的根 CA 憑證。
- ~/certs/certs/iot-edge-device-mycacert-full-chain.cert.pem - 參考 IoT Edge 設定檔的裝置 CA 憑證。 在閘道案例中,此 CA 憑證是 IoT Edge 裝置向下游裝置驗證其身分識別的方式。
- ~/certs/private/iot-edge-device-mycacert.key.pem - 與裝置 CA 憑證相關聯的私密金鑰。
若要深入了解這些示範憑證,請參閱建立示範憑證以測試 IoT Edge 裝置功能。
在文字編輯器中開啟 config.toml 檔案。 例如:
sudo nano /etc/aziot/config.toml
在設定檔中找出下列設定。 新增憑證設定,如下所示:
trust_bundle_cert = "file:///home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem" [edge_ca] cert = "file:///home/AzureUser/certs/certs/iot-edge-device-ca-mycacert-full-chain.cert.pem" pk = "file:///home/AzureUser/certs/private/iot-edge-device-ca-mycacert.key.pem"
上述範例假設您已經以 AzureUser 身分登入,並建立名為「mycacert」的裝置 CA 憑證。
儲存變更並重新啟動 IoT Edge 執行階段:
sudo iotedge config apply
如果在變更之後 IoT Edge 執行階段順利啟動,IoT Central 中閘道裝置的 $edgeAgent 狀態和 $edgeHub 模組會變更為在 [模組] 頁面上執行。
如果執行階段未啟動,請檢查您在 IoT Edge 設定檔中所做的變更,並參閱針對 IoT Edge 裝置進行疑難排解。
已設定您的透明閘道,並準備好開始從下游裝置轉送遙測。
佈建下游裝置
IoT Central 依賴裝置佈建服務 (DPS) 在 IoT Central 中佈建裝置。 目前,IoT Edge 無法使用 DPS 將下游裝置佈建至 IoT Central 應用程式。 下列步驟說明如何手動佈建 thermostat1
裝置。 若要完成這些步驟,您需要已安裝 Python 和網際網路連線的環境。 如需目前的 Python 版本需求,請查看 Azure IoT Python SDK。 Azure Cloud Shell 已預先安裝 Python:
執行下列命令以安裝
azure.iot.device
模組:pip install azure.iot.device
執行下列命令以下載裝置佈建的 Python 指令碼:
wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/provision_device.py
若要在 IoT Central 應用程式中佈建
thermostat1
下游裝置,請執行下列命令,取代{your application id scope}
和{your device primary key}
。 將裝置新增至 IoT Central 應用程式時,請記下這些值:export IOTHUB_DEVICE_DPS_DEVICE_ID=thermostat1 export IOTHUB_DEVICE_DPS_ID_SCOPE={your application id scope} export IOTHUB_DEVICE_DPS_DEVICE_KEY={your device primary key} python provision_device.py
在您的 IoT Central 應用程式中,確認 thermostat1
裝置的 [裝置狀態] 現在為 [已佈建]。
設定下游裝置
在上一節中,您已使用示範憑證設定 edgegateway
虛擬機器,讓它以閘道身分執行。 leafdevice
虛擬機器已準備好安裝使用閘道連線到 IoT Central 的控溫器模擬器。
leafdevice
虛擬機器需要您在 edgegateway
虛擬機器上建立的根 CA 憑證複本。 將 /home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem 檔案從 edgegateway
虛擬機器複製到 leafdevice
虛擬機器的主目錄。 您可以使用 scp 命令在 Linux 虛擬機器之間複製檔案。 例如,從 leafdevice
機器:
scp AzureUser@edgegateway:/home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem .
若要深入了解如何檢查從下游裝置到閘道的連線,請參閱測試閘道連線。
若要在 leafdevice
虛擬機器上執行控溫器模擬器:
使用 SSH 連線至
leafdevice
虛擬機器並登入。將 Python 範例下載到您的主目錄:
cd ~ wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/simple_thermostat.py
安裝 Azure IoT 裝置 Python 模組:
sudo apt update sudo apt install python3-pip pip3 install azure.iot.device
設定環境變數來設定範例。 將
{your device shared key}
取代為您先前所記下thermostat1
的主要金鑰。 這些變數假設閘道虛擬機器的名稱是edgegateway
,而控溫器裝置的識別碼是thermostat1
:export IOTHUB_DEVICE_SECURITY_TYPE=connectionString export IOTHUB_DEVICE_CONNECTION_STRING="HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key}" export IOTEDGE_ROOT_CA_CERT_PATH=~/azure-iot-test-only.root.ca.cert.pem
請注意連接字串使用的是閘道裝置的名稱,而不是 IoT 中樞的名稱。
若要執行程式碼,請使用下列命令:
python3 simple_thermostat.py
此命令的輸出如下所示:
Connecting using Connection String HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key} Listening for command requests and property updates Press Q to quit Sending telemetry for temperature Sent message Sent message Sent message ...
提示
如果您在下游裝置嘗試連線時看到錯誤。 請嘗試重新執行裝置佈建步驟。
若要查看 IoT Central 中的遙測,請瀏覽至 thermostat1 裝置的 [概觀] 頁面:
在 [關於] 頁面中,您可以檢視從下游裝置傳送的屬性值,然後在 [命令] 頁面上,您可以在下游裝置呼叫命令。