分享方式:


如何透過 IoT Edge 透明網路閘道連接裝置

IoT Edge 裝置可作為閘道,建立區域網路上其他裝置與 IoT Central 應用程式之間的連線。 當裝置無法直接存取 IoT Central 應用程式時,您可使用閘道。

IoT Edge 支援透明轉譯閘道模式。 本文摘要說明如何實作透明閘道模式。 在此模式中,閘道會將來自下游裝置的訊息傳遞至 IoT Central 應用程式中 IoT 中樞端點。 閘道不會在訊息通過時操作訊息。 在 IoT Central 中,每個下游裝置會顯示為閘道裝置的子系:

Diagram that shows IoT Edge as a transparent gateway.

簡單起見,本文會使用虛擬機器來裝載下游和閘道裝置。 在實際案例中,下游裝置和閘道會在您區域網路上的實體裝置上執行。

本文說明如何使用 IoT Edge 1.4 執行階段來實作案例。

必要條件

若要完成本文的步驟,您需要:

若要依照本文的步驟操作,請將下列檔案下載到您的電腦:

匯入部署資訊清單

每個 IoT Edge 裝置都需要部署資訊清單來設定 IoT Edge 執行階段。 若要匯入 IoT Edge 透明閘道的部署資訊清單:

  1. 瀏覽至 [Edge 資訊清單]

  2. 選取 [+ 新增],輸入部署資訊清單的名稱,例如「透明閘道」,然後上傳您先前下載的 EdgeTransparentGatewayManifest.json 檔案。

  3. 選取 [建立],將部署資訊清單儲存在您的應用程式中。

新增裝置範本

下游裝置和閘道裝置都可以在 IoT Central 中使用裝置範本。 IoT Central 可讓您建立下游裝置與閘道之間的關聯性模型,以便在連線之後檢視和管理。 不需要裝置範本,即可將下游裝置連線至閘道。

若要建立下游裝置的裝置範本,請建立標準裝置範本來建立裝置功能模型。 本文所列的範例會使用您下載的控溫器裝置型號。

若要建立下游裝置的裝置範本:

  1. 建立裝置範本,然後選擇 [IoT 裝置] 作為範本類型。

  2. 在精靈的 [自訂] 頁面中輸入裝置範本的名稱,例如「控溫器」

  3. 建立裝置範本之後,請選取 [匯入模型]。 選取模型,例如您先前下載的 thermostat-1.json 檔案。

  4. 若要產生控溫器的部分預設檢視,請選取檢視,然後選擇 [產生預設檢視]

  5. 發佈裝置範本。

若要為 IoT Edge 透明閘道裝置建立裝置範本:

  1. 建立裝置範本,然後選擇 [Azure IoT Edge] 作為範本類型。

  2. 在精靈的 [自訂] 頁面中,輸入裝置範本的名稱,例如「Edge 閘道」

  3. 在精靈的 [自訂] 頁面中,勾選 [這是閘道裝置]

  4. [檢閱] 頁面上,選取 [建立]

  5. 在 [建立模型] 頁面中,選取 [自訂模型]

  6. 將 [關聯] 中的項目新增至下游裝置範本。

下列螢幕擷取畫面顯示 IoT Edge 閘道裝置的 [關聯] 頁面,以及使用 [控溫器] 裝置範本的下游裝置:

Screenshot showing IoT Edge gateway device template relationship with a thermostat downstream device template.

上一個螢幕擷取畫面顯示未定義任何模組的 IoT Edge 閘道裝置範本。 透明閘道不需要任何模組,因為 IoT Edge 執行階段會將訊息從下游裝置直接轉送到 IoT Central。 如果閘道本身需要傳送遙測、同步屬性或處理命令,您可以在根元件或模組中定義這些功能。

在發佈閘道和下游裝置範本之前,請先新增任何必要的雲端屬性和檢視。

新增裝置

當您將裝置新增至 IoT Central 應用程式時,您可以定義下游裝置與透明閘道之間的關聯性。

若要新增裝置:

  1. 瀏覽至 IoT Central 應用程式的 [裝置] 頁面。

  2. 新增透明閘道 IoT Edge 裝置的執行個體。 當您新增裝置時,請確定您選取 [透明閘道] 部署資訊清單。 在本文中,閘道裝置識別碼為 edgegateway

  3. 新增下游裝置的一或多個執行個體。 在本文中,下游裝置是具有識別碼 thermostat1thermostat2 的控溫器。

  4. 在裝置清單中,選取每個下游裝置,然後選取 [連結到閘道]

下列螢幕擷取畫面顯示您可以在 [下游裝置] 頁面上檢視連結至閘道的裝置清單:

Screenshot that shows the list of downstream devices connected to a transparent gateway.

在透明閘道中,下游裝置會連線到閘道本身,而不是閘道所裝載的自訂模組。

部署裝置之前,您需要:

  • IoT Central 應用程式的識別碼範圍
  • 閘道和下游裝置的裝置識別碼值。
  • 閘道和下游裝置的主索引鍵值。

若要尋找這些值,請瀏覽至裝置清單中的每個裝置,然後選取 [連線]。 繼續之前,請記下這些值。

提示

您可以連接裝置並建立關聯性,而不需要先建立裝置的裝置範本。 您可以將未指派的下游裝置連結至未指派的閘道裝置。

部署閘道和裝置

為了讓您試用此情節,下列步驟示範如何將閘道和下游裝置部署到 Azure 虛擬機器。

提示

若要深入了解如何將 IoT Edge 執行階段部署到實體裝置,請參閱 IoT Edge 文件中的 建立 IoT Edge 裝置

若要試用透明閘道情節,請選取下列按鈕來部署兩部 Linux 虛擬機器。 一部虛擬機器已安裝 IoT Edge 1.4 執行階段,且是透明的 IoT Edge 網路閘道。 另一部虛擬機器是您執行程式碼以傳送模擬控溫器遙測的下游裝置:

Deploy to Azure Button

部署並執行兩部虛擬機器時,請確認 IoT Edge 閘道裝置正在 edgegateway 虛擬機器上執行:

  1. 移至 IoT Central 應用程式中的 [裝置] 頁面。 如果 IoT Edge 閘道裝置已連線到 IoT Central,其狀態為 [已佈建]

  2. 開啟 IoT Edge 閘道裝置,並確認 [模組] 頁面上模組的狀態。 如果 IoT Edge 執行階段已成功啟動,則 $edgeAgent$edgeHub 模組的狀態為 [執行中]

    Screenshot showing the $edgeAgent and $edgeHub version 1.4 modules running on the IoT Edge gateway.

    提示

    在虛擬機器啟動時,您可能需要等候幾分鐘的時間,而裝置則佈建在 IoT Central 應用程式中。

設定閘道

若要讓 IoT Edge 裝置作為透明閘道運作,則需要部分憑證來向任何下游裝置證明其身分識別。 本文使用示範憑證。 在實際執行環境中,請使用憑證授權單位的憑證。

若要產生示範憑證,並將其安裝在您的閘道裝置上:

  1. 使用 SSH 連線至閘道裝置虛擬機器並登入。

  2. 執行下列命令來複製 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 裝置功能

  3. 在文字編輯器中開啟 config.toml 檔案。 例如:

    sudo nano /etc/aziot/config.toml
    
  4. 在設定檔中找出下列設定。 新增憑證設定,如下所示:

    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 憑證。

  5. 儲存變更並重新啟動 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 SDKAzure Cloud Shell 已預先安裝 Python:

  1. 執行下列命令以安裝 azure.iot.device 模組:

    pip install azure.iot.device
    
  2. 執行下列命令以下載裝置佈建的 Python 指令碼:

    wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/provision_device.py
    
  3. 若要在 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 虛擬機器上執行控溫器模擬器:

  1. 使用 SSH 連線至 leafdevice 虛擬機器並登入。

  2. 將 Python 範例下載到您的主目錄:

    cd ~
    wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/simple_thermostat.py
    
  3. 安裝 Azure IoT 裝置 Python 模組:

    sudo apt update
    sudo apt install python3-pip
    pip3 install azure.iot.device
    
  4. 設定環境變數來設定範例。 將 {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 中樞的名稱。

  5. 若要執行程式碼,請使用下列命令:

    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
    ...
    

    提示

    如果您在下游裝置嘗試連線時看到錯誤。 請嘗試重新執行上述裝置佈建步驟。

  6. 若要查看 IoT Central 中的遙測,請瀏覽至 thermostat1 裝置的 [概觀] 頁面:

    Screenshot showing telemetry from the downstream device.

    在 [關於] 頁面中,您可以檢視從下游裝置傳送的屬性值,然後在 [命令] 頁面上,您可以在下游裝置呼叫命令。

下一步

既然您已了解如何使用 IoT Central 設定透明閘道,建議您接下來繼續深入了解 IoT Edge