測試用戶端裝置通訊 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

測試用戶端裝置通訊

用戶端裝置可以使用 AWS IoT Device SDK 來探索、連線核心裝置,以及與核心裝置通訊。您可以在 中使用 Greengrass 探索用戶端 AWS IoT Device SDK 來使用 Greengrass 探索 API,這會傳回用戶端裝置可連線之核心裝置的相關資訊。API 回應包含要連線的 MQTT 代理程式端點,以及用來驗證每個核心裝置的身分的憑證。然後,用戶端裝置可以嘗試每個端點,直到成功連接到核心裝置為止。

用戶端裝置只能探索與之建立關聯的核心裝置。在測試用戶端裝置與核心裝置之間的通訊之前,您必須將用戶端裝置與核心裝置建立關聯。如需詳細資訊,請參閱關聯用戶端裝置

Greengrass 探索 API 會傳回您指定的核心裝置 MQTT 代理程式端點。您可以使用 IP 偵測器元件來為您管理這些端點,也可以為每個核心裝置手動管理它們。如需詳細資訊,請參閱管理核心裝置端點

注意

若要使用 Greengrass 探索 API,用戶端裝置必須具有 greengrass:Discover許可。如需詳細資訊,請參閱用戶端裝置的最低 AWS IoT 政策

AWS IoT Device SDK 提供多種程式設計語言。如需詳細資訊,請參閱《 AWS IoT Core 開發人員指南AWS IoT 》中的 裝置SDKs

測試通訊 (Python)

在本節中,您會在適用於 AWS IoT Device SDK Python 的 v2 中使用 Greengrass 探索範例來測試用戶端裝置與核心裝置之間的通訊。

重要

若要使用 AWS IoT Device SDK v2 for Python,裝置必須執行 Python 3.6 或更新版本。

測試通訊 (AWS IoT Device SDK v2 for Python)
  1. 下載並安裝適用於 AWS IoT Device SDK Python 的 v2 至 AWS IoT 物件,以做為用戶端裝置進行連線。

    在用戶端裝置上,執行下列動作:

    1. 複製 AWS IoT Device SDK v2 for Python 儲存庫以進行下載。

      git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
    2. 安裝 AWS IoT Device SDK v2 for Python。

      python3 -m pip install --user ./aws-iot-device-sdk-python-v2
  2. 變更為 AWS IoT Device SDK v2 for Python 中的範例資料夾。

    cd aws-iot-device-sdk-python-v2/samples/greengrass
  3. 執行範例 Greengrass 探索應用程式。此應用程式需要指定用戶端裝置物件名稱的引數、要使用的 MQTT 主題和訊息,以及驗證和保護連線的憑證。下列範例會將 Hello World 訊息傳送至 clients/MyClientDevice1/hello/world主題。

    • MyClientDevice1 取代為用戶端裝置的物件名稱。

    • ~/certs/AmazonRootCA1.pem 取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。

    • ~/certs/device.pem.crt 取代為用戶端裝置上裝置憑證的路徑。

    • ~/certs/private.pem.key 取代為用戶端裝置上私有金鑰檔案的路徑。

    • us-east-1 取代為用戶端裝置和核心裝置操作所在的 AWS 區域。

    python3 basic_discovery.py \\ --thing_name MyClientDevice1 \\ --topic 'clients/MyClientDevice1/hello/world' \\ --message 'Hello World!' \\ --ca_file ~/certs/AmazonRootCA1.pem \\ --cert ~/certs/device.pem.crt \\ --key ~/certs/private.pem.key \\ --region us-east-1 \\ --verbosity Warn

    探索範例應用程式會傳送訊息 10 次並中斷連線。它也會訂閱發佈訊息的相同主題。如果輸出指出應用程式收到有關主題的 MQTT 訊息,用戶端裝置可以成功與核心裝置通訊。

    Performing greengrass discovery... awsiot.greengrass_discovery.DiscoverResponse(gg_groups=[awsiot.greengrass_discovery.GGGroup(gg_group_id='greengrassV2-coreDevice-MyGreengrassCore', cores=[awsiot.greengrass_discovery.GGCore(thing_arn='arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore', connectivity=[awsiot.greengrass_discovery.ConnectivityInfo(id='203.0.113.0', host_address='203.0.113.0', metadata='', port=8883)])], certificate_authorities=['-----BEGIN CERTIFICATE-----\ MIICiT...EXAMPLE=\ -----END CERTIFICATE-----\ '])]) Trying core arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore at host 203.0.113.0 port 8883 Connected! Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 0} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 0}' Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 1} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 1}' ... Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 9} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 9}'

    如果應用程式輸出錯誤,請參閱故障診斷 Greengrass 探索問題

    您也可以在核心裝置上檢視 Greengrass 日誌,以驗證用戶端裝置是否成功連線並傳送訊息。如需詳細資訊,請參閱監控 AWS IoT Greengrass 日誌

測試通訊 (C++)

在本節中,您會在適用於 AWS IoT Device SDK C++ 的 v2 中使用 Greengrass 探索範例來測試用戶端裝置與核心裝置之間的通訊。

若要建置適用於 C++ 的 AWS IoT Device SDK v2,裝置必須具有下列工具:

  • C++ 11 或更新版本

  • CMake 3.1 或更新版本

  • 下列其中一個編譯器:

    • GCC 4.8 或更新版本

    • Clang 3.9 或更新版本

    • MSVC 2015 或更新版本

測試通訊 (適用於 C++ 的AWS IoT Device SDK v2)
  1. 下載並建置適用於 AWS IoT Device SDK C++ 的 v2 至 AWS IoT 物件,以做為用戶端裝置進行連線。

    在用戶端裝置上,執行下列動作:

    1. 建立適用於 C++ 工作區的 AWS IoT Device SDK v2 資料夾,然後變更為該資料夾。

      cd mkdir iot-device-sdk-cpp cd iot-device-sdk-cpp
    2. 複製適用於 C++ 儲存庫的 AWS IoT Device SDK v2 以進行下載。--recursive 旗標指定 下載子模組。

      git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
    3. 為 AWS IoT Device SDK v2 建立 C++ 組建輸出的資料夾,然後變更為該資料夾。

      mkdir aws-iot-device-sdk-cpp-v2-build cd aws-iot-device-sdk-cpp-v2-build
    4. 建置適用於 C++ 的 AWS IoT Device SDK v2。

      cmake -DCMAKE_INSTALL_PREFIX="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ../aws-iot-device-sdk-cpp-v2 cmake --build . --target install
  2. 在適用於 C++ 的 AWS IoT Device SDK v2 中建置 Greengrass 探索範例應用程式。請執行下列操作:

    1. 變更為適用於 C++ 的 AWS IoT Device SDK v2 中的 Greengrass 探索範例資料夾。

      cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
    2. 建立 Greengrass 探索範例建置輸出的資料夾,然後變更為該資料夾。

      mkdir build cd build
    3. 建置 Greengrass 探索範例應用程式。

      cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" .. cmake --build . --config "Release"
  3. 執行範例 Greengrass 探索應用程式。此應用程式預期引數會指定用戶端裝置物件名稱、要使用的 MQTT 主題,以及驗證和保護連線的憑證。下列範例會訂閱clients/MyClientDevice1/hello/world主題,並將您在命令列中輸入的訊息發佈至相同的主題。

    • MyClientDevice1 取代為用戶端裝置的物件名稱。

    • ~/certs/AmazonRootCA1.pem 取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。

    • ~/certs/device.pem.crt 取代為用戶端裝置上裝置憑證的路徑。

    • ~/certs/private.pem.key 取代為用戶端裝置上私有金鑰檔案的路徑。

    • us-east-1 取代為用戶端裝置和核心裝置操作所在的 AWS 區域。

    ./basic-discovery \ --thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --ca_file ~/certs/AmazonRootCA1.pem \ --cert ~/certs/device.pem.crt \ --key ~/certs/private.pem.key \ --region us-east-1

    探索範例應用程式會訂閱主題,並提示您輸入要發佈的訊息。

    Connecting to group greengrassV2-coreDevice-MyGreengrassCore with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883 Connected to group greengrassV2-coreDevice-MyGreengrassCore, using connection to 203.0.113.0:8883 Successfully subscribed to clients/MyClientDevice1/hello/world Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.

    如果應用程式輸出錯誤,請參閱故障診斷 Greengrass 探索問題

  4. 輸入訊息,例如 Hello World!

    Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program. Hello World!

    如果輸出指出應用程式收到主題的 MQTT 訊息,用戶端裝置可以成功與核心裝置通訊。

    Operation on packetId 2 Succeeded Publish received on topic clients/MyClientDevice1/hello/world Message: Hello World!

    您也可以在核心裝置上檢視 Greengrass 日誌,以驗證用戶端裝置是否成功連線並傳送訊息。如需詳細資訊,請參閱監控 AWS IoT Greengrass 日誌

測試通訊 (JavaScript)

在本節中,您會在適用於 AWS IoT Device SDK JavaScript 的 v2 中使用 Greengrass 探索範例來測試用戶端裝置與核心裝置之間的通訊。

重要

若要使用 AWS IoT Device SDK v2 for JavaScript,裝置必須執行 Node v10.0 或更新版本。

測試通訊 (適用於 JavaScript 的AWS IoT Device SDK v2)
  1. 下載並安裝適用於 AWS IoT Device SDK JavaScript 的 v2 至 AWS IoT 物件,以做為用戶端裝置進行連線。

    在用戶端裝置上,執行下列動作:

    1. 複製 AWS IoT Device SDK v2 for JavaScript 儲存庫以進行下載。

      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
    2. 安裝適用於 JavaScript 的 AWS IoT Device SDK v2。

      cd aws-iot-device-sdk-js-v2 npm install
  2. 變更為適用於 JavaScript 的 AWS IoT Device SDK v2 中的 Greengrass 探索範例資料夾。

    cd samples/node/greengrass/basic_discovery
  3. 安裝 Greengrass 探索範例應用程式。

    npm install
  4. 執行範例 Greengrass 探索應用程式。此應用程式需要指定用戶端裝置物件名稱的引數、要使用的 MQTT 主題和訊息,以及驗證和保護連線的憑證。下列範例會將 Hello World 訊息傳送至 clients/MyClientDevice1/hello/world主題。

    • MyClientDevice1 取代為用戶端裝置的物件名稱。

    • ~/certs/AmazonRootCA1.pem 取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。

    • ~/certs/device.pem.crt 取代為用戶端裝置上裝置憑證的路徑。

    • ~/certs/private.pem.key 取代為用戶端裝置上私有金鑰檔案的路徑。

    • us-east-1 取代為您的用戶端裝置和核心裝置操作 AWS 的區域。

    node dist/index.js \ --thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --message 'Hello World!' \ --ca_file ~/certs/AmazonRootCA1.pem \ --cert ~/certs/device.pem.crt \ --key ~/certs/private.pem.key \ --region us-east-1 \ --verbose warn

    探索範例應用程式會傳送訊息 10 次並中斷連線。它也會訂閱發佈訊息的相同主題。如果輸出指出應用程式收到有關主題的 MQTT 訊息,用戶端裝置可以成功與核心裝置通訊。

    Discovery Response: {"gg_groups":[{"gg_group_id":"greengrassV2-coreDevice-MyGreengrassCore","cores":[{"thing_arn":"arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore","connectivity":[{"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}]}],"certificate_authorities":["-----BEGIN CERTIFICATE-----\nMIICiT...EXAMPLE=\n-----END CERTIFICATE-----\n"]}]} Trying endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""} [WARN] [2021-06-12T00:46:45Z] [00007f90c0e8d700] [socket] - id=0x7f90b8018710 fd=26: setsockopt() for NO_SIGNAL failed with errno 92. If you are having SIGPIPE signals thrown, you may want to install a signal trap in your application layer. Connected to endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":1} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":2} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":3} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":4} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":5} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":6} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":7} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":8} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":9} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":10} Complete!

    如果應用程式輸出錯誤,請參閱故障診斷 Greengrass 探索問題

    您也可以在核心裝置上檢視 Greengrass 日誌,以驗證用戶端裝置是否成功連線並傳送訊息。如需詳細資訊,請參閱監控 AWS IoT Greengrass 日誌

測試通訊 (Java)

在本節中,您會在適用於 AWS IoT Device SDK Java 的 v2 中使用 Greengrass 探索範例來測試用戶端裝置與核心裝置之間的通訊。

重要

若要建置適用於 Java 的 AWS IoT Device SDK v2,裝置必須具有下列工具:

  • Java 8 或更新版本,並JAVA_HOME指向 Java 資料夾。

  • Apache Maven

測試通訊 (AWS IoT Device SDK v2 for Java)
  1. 下載並建置適用於 AWS IoT Device SDK Java 的 v2 至 AWS IoT 物件,以做為用戶端裝置進行連線。

    在用戶端裝置上,執行下列動作:

    1. 複製 AWS IoT Device SDK v2 for Java 儲存庫以進行下載。

      git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
    2. 變更為 AWS IoT Device SDK v2 for Java 資料夾。

    3. 建置適用於 Java 的 AWS IoT Device SDK v2。

      cd aws-iot-device-sdk-java-v2 mvn versions:use-latest-versions -Dincludes="software.amazon.awssdk.crt*" mvn clean install
  2. 執行範例 Greengrass 探索應用程式。此應用程式需要指定用戶端裝置物件名稱的引數、要使用的 MQTT 主題,以及驗證和保護連線的憑證。下列範例會訂閱clients/MyClientDevice1/hello/world主題,並將您在命令列中輸入的訊息發佈至相同的主題。

    • 以用戶端裝置的物件名稱取代 MyClientDevice1 的兩個執行個體。

    • $HOME/certs/AmazonRootCA1.pem 取代為用戶端裝置上 Amazon 根 CA 憑證的路徑。

    • $HOME/certs/device.pem.crt 取代為用戶端裝置上裝置憑證的路徑。

    • $HOME/certs/private.pem.key 取代為用戶端裝置上的私有金鑰檔案路徑。

    • us-east-1 取代為您的用戶端裝置和核心裝置操作 AWS 區域 所在的 。

    DISCOVERY_SAMPLE_ARGS="--thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --ca_file $HOME/certs/AmazonRootCA1.pem \ --cert $HOME/certs/device.pem.crt \ --key $HOME/certs/private.pem.key \ --region us-east-1" mvn exec:java -pl samples/Greengrass/Discovery \ -Dexec.mainClass=greengrass.BasicDiscovery \ -Dexec.args="$DISCOVERY_SAMPLE_ARGS"

    探索範例應用程式會訂閱主題,並提示您輸入要發佈的訊息。

    Connecting to group ID greengrassV2-coreDevice-MyGreengrassCore, with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883 Started a clean session Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:

    如果應用程式輸出錯誤,請參閱故障診斷 Greengrass 探索問題

  3. 輸入訊息,例如 Hello World!

    Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program: Hello World!

    如果輸出指出應用程式收到主題的 MQTT 訊息,用戶端裝置可以成功與核心裝置通訊。

    Message received on topic clients/MyClientDevice1/hello/world: Hello World!

    您也可以在核心裝置上檢視 Greengrass 日誌,以驗證用戶端裝置是否成功連線並傳送訊息。如需詳細資訊,請參閱監控 AWS IoT Greengrass 日誌