选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

测试客户端设备通信

聚焦模式
测试客户端设备通信 - AWS IoT Greengrass

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

客户端设备可以使用 AWS IoT Device SDK 来发现、连接核心设备并与之通信。您可以使用中的 Greengrass 发现客户端 AWS IoT Device SDK 来使用 Greengras s 发现 API,它会返回有关客户端设备可以连接的核心设备的信息。API 响应包括要连接的 MQTT 代理端点和用于验证每台核心设备身份的证书。然后,客户端设备可以尝试连接每个端点,直至其成功连接核心设备。

客户端设备仅能发现您与之关联的核心设备。在测试客户端设备与核心设备之间的通信之前,必须将客户端设备与核心设备相关联。有关更多信息,请参阅 关联客户端设备

Greengrass Discovery API 会返回您指定的核心设备 MQTT 代理端点。您可以使用 IP 检测器组件为您管理这些端点,也可以手动管理每台核心设备的端点。有关更多信息,请参阅 管理核心设备端点

注意

要使用 Greengrass Discovery API,客户端设备必须拥有 greengrass:Discover 权限。有关更多信息,请参阅 客户端设备的最低 AWS IoT 政策

AWS IoT Device SDK 有多种编程语言版本。有关更多信息,请参阅《AWS IoT Core 开发者指南》 SDKs中的AWS IoT 设备

测试通信(Python)

在本节中,您将使用适用于 Python 的AWS IoT Device SDK v2 中的 Greengrass Discovery 示例来测试客户端设备与核心设备之间的通信。

重要

要使用适用于 Python 的 AWS IoT Device SDK v2,设备必须运行 Python 3.6 或更高版本。

测试通信(适用于 Python 的AWS IoT Device SDK v2)
  1. 下载适用于 Python 的AWS IoT Device SDK v2 并将其安装到要作为客户端设备连接的设备上。 AWS IoT

    在客户端设备上,执行以下操作:

    1. 克隆适用于 Python 的 AWS IoT Device SDK v2 版本库进行下载。

      git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
    2. 安装适用于 Python 的 AWS IoT Device SDK v2。

      python3 -m pip install --user ./aws-iot-device-sdk-python-v2
  2. 在 python 版 AWS IoT Device SDK v2 中切换到示例文件夹。

    cd aws-iot-device-sdk-python-v2/samples
  3. 运行示例 Greengrass Discovery 应用程序。此应用程序需要指定客户端设备事物名称、要使用的 MQTT 主题和消息以及用于验证和保护连接的证书的参数。以下示例向 clients/MyClientDevice1/hello/world 主题发送“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++)

在本节中,您将使用适用于 C++ 的AWS IoT Device SDK v2 中的 Greengrass Discovery 示例来测试客户端设备与核心设备之间的通信。

要构建 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. 下载并构建 C++ 版AWS IoT Device SDK v2 以 AWS IoT 将其作为客户端设备进行连接。

    在客户端设备上,执行以下操作:

    1. 为 AWS IoT Device SDK v2 for C++ 工作区创建一个文件夹,然后更改为该文件夹。

      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 for 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. 在 v2 中构建 C++ 版 Greengrass 发现示例应用程序。 AWS IoT Device SDK 执行以下操作:

    1. 切换到 C++ 版 v2 中的 Greengrass 发现示例文件夹。 AWS IoT Device SDK

      cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
    2. 为 Greengrass Discovery 示例构建输出创建一个文件夹,然后更改为该文件夹。

      mkdir build cd build
    3. 构建 Greengrass Discovery 示例应用程序。

      cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" .. cmake --build . --config "Release"
  3. 运行示例 Greengrass Discovery 应用程序。此应用程序需要指定客户端设备事物名称、要使用的 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

    Discovery 示例应用程序订阅主题并提示您输入要发布的消息。

    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)

在本节中,您将使用 v2 JavaScript 中的AWS IoT Device SDK Greengrass 发现示例来测试客户端设备与核心设备之间的通信。

重要

要将 AWS IoT Device SDK v2 用于 JavaScript,设备必须运行 Node v10.0 或更高版本。

测试通信(AWS IoT Device SDK v2 适用于 JavaScript)
  1. 下载并安装该设备的AWS IoT Device SDK JavaScript v2 以作为客户端设备进行连接。 AWS IoT

    在客户端设备上,执行以下操作:

    1. 克隆 AWS IoT Device SDK v2 以供 JavaScript 存储库下载。

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

      cd aws-iot-device-sdk-js-v2 npm install
  2. 切换到 v2 中的 Greengrass 发现示例文件夹。 AWS IoT Device SDK JavaScript

    cd samples/node/basic_discovery
  3. 安装 Greengrass Discovery 示例应用程序。

    npm install
  4. 运行示例 Greengrass Discovery 应用程序。此应用程序需要指定客户端设备事物名称、要使用的 MQTT 主题和消息以及用于验证和保护连接的证书的参数。以下示例向 clients/MyClientDevice1/hello/world 主题发送“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)

在本节中,您将使用适用于 Java 的AWS IoT Device SDK v2 中的 Greengrass Discovery 示例来测试客户端设备与核心设备之间的通信。

重要

要构建 Java 版 AWS IoT Device SDK v2,设备必须具有以下工具:

  • Java 8 或更高版本,JAVA_HOME 指向 Java 文件夹。

  • Apache Maven

测试通信(适用于 Java 的AWS IoT Device SDK v2)
  1. 下载并编译适用于 Java 的AWS IoT Device SDKAWS IoT v2,将其作为客户端设备进行连接。

    在客户端设备上,执行以下操作:

    1. 克隆适用于 Java 的 AWS IoT Device SDK v2 存储库进行下载。

      git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
    2. 切换到适用于 Java 的 AWS IoT Device SDK v2 文件夹。

    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 Discovery 应用程序。此应用程序需要指定客户端设备事物名称、要使用的 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 \ -Dexec.mainClass=greengrass.BasicDiscovery \ -Dexec.args="$DISCOVERY_SAMPLE_ARGS"

    Discovery 示例应用程序订阅主题并提示您输入要发布的消息。

    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 日志

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。