测试客户端设备通信 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

测试客户端设备通信

客户端设备可以使用 Amazon IoT Device SDK 来发现、连接和与核心设备通信。您 Greengrass 以在 Amazon IoT Device SDK 要使用的Greengrass Discovery,它返回有关客户端设备可以连接到的核心设备的信息。API 响应包括要连接的 MQTT 代理终端节点和用于验证每个核心设备身份的证书。然后,客户端设备可以尝试每个端点,直到它成功连接到核心设备。

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

Greengrass 发现 API 返回您指定的核心设备 MQTT 代理终端节点。您可以将IP 检测器组件为您管理这些终端节点,也可以为每个核心设备手动管理它们。有关更多信息,请参阅 管理核心设备终端节点

注意

要使用 Greengrass 发现 API,客户端设备必须具有greengrass:Discover权限。有关更多信息,请参阅 最低Amazon IoT策略适用于客户端设备

这些区域有: Amazon IoT Device SDK 有多种编程语言版本。有关更多信息,请参阅 。Amazon IoT设备开发工具包中的 Amazon IoT Core 开发人员指南

测试通信 (Python)

在本节中,您将使用 Amazon IoT Device SDK 用于的 Python来测试客户端设备与核心设备之间的通信。

重要

使用 Amazon IoT Device SDK v2 中,设备必须运行 Python 3.6 或更高版本。

要测试通信 ( Amazon IoT Device SDK 用于 Python 的 v2)

  1. 下载并安装 Amazon IoT Device SDK 用于的 Python添加到Amazon IoT作为客户端设备连接的东西。

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

    1. 克隆 Amazon IoT Device SDK v2 来下载它。

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

      python3 -m pip install --user ./aws-iot-device-sdk-python-v2
  2. 更改到 Amazon IoT Device SDK 版本 2,适用于 Python。

    cd aws-iot-device-sdk-python-v2/samples
  3. 运行示例 Greengrass 发现应用程序。此应用程序需要指定客户端设备事件名称、要使用的 MQTT 主题和消息以及验证和保护连接的证书的参数。以下示例将向clients/MyClientDevice1/hello/world主题。

    • 替换我的客户端设备 1替换为客户端设备的事物名称。

    • Replace~/证书 /亚马逊rootca1.PEM,并指向客户端设备上的 Amazon 根 CA 证书的路径。

    • Replace〜/证书/设备 .pem.crt与客户端设备上设备证书的路径。

    • Replace〜/证书/私有 .pem.key私有密钥文件的路径。

    • Replaceus-east-1使用Amazon您的客户端设备和核心设备运行的区域。

    python3 basic_discovery.py \ --thing-name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --message 'Hello World!' \ --root-ca ~/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-----\nMIICiT...EXAMPLE=\n-----END CERTIFICATE-----\n'])]) 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 日志,以验证客户端设备是否成功连接并发送消息。有关更多信息,请参阅 查看Amazon IoT GreengrassCore 软件日志

测试通信 (C++)

在本节中,您将使用 Amazon IoT Device SDK 用于的 v2来测试客户端设备与核心设备之间的通信。

重要

构建 Amazon IoT Device SDK v2 对于 C ++,设备必须具有以下工具:

  • C++ 11 或更高版本

  • CMake 3.1 或更高版本

  • 以下编译器之一:

    • GCC 4.8 或更高版本

    • CLang 3.9 或更高版本

    • 2015 年或更高版本

要测试通信 ( Amazon IoT Device SDK v2 适用于 C ++)

  1. 下载并构建 Amazon IoT Device SDK 用于的 v2添加到Amazon IoT作为客户端设备连接的东西。

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

    1. 创建用于 Amazon IoT Device SDK v2 用于 C ++ 工作区,并更改为它。

      cd mkdir iot-device-sdk-cpp cd iot-device-sdk-cpp
    2. 克隆 Amazon IoT Device SDK v2 的 C ++ 存储库来下载它。这些区域有:--recursive标志指定下载子模块。

      git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
    3. 创建用于 Amazon IoT Device SDK v2 用于 C ++ 构建输出,并更改为它。

      mkdir aws-iot-device-sdk-cpp-v2-build cd aws-iot-device-sdk-cpp-v2-build
    4. 构建 Amazon IoT Device SDK v2 适用于 C ++。

      cmake -DCMAKE_INSTALL_PREFIX="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ../aws-iot-device-sdk-cpp-v2 cmake --build . --target install
  2. 构建 Greengrass 发现示例应用程序在 Amazon IoT Device SDK v2 适用于 C ++。执行以下操作:

    1. 更改到 Greengrass 发现示例文件夹中的 Amazon IoT Device SDK v2 适用于 C ++。

      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主题,并将您在命令行中输入的消息发布到同一主题。

    • 替换我的客户端设备 1替换为客户端设备的事物名称。

    • Replace~/证书 /亚马逊rootca1.PEM,并指向客户端设备上的 Amazon 根 CA 证书的路径。

    • Replace〜/证书/设备 .pem.crt与客户端设备上设备证书的路径。

    • Replace〜/证书/私有 .pem.key私有密钥文件的路径。

    • Replaceus-east-1使用Amazon您的客户端设备和核心设备运行的区域。

    ./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 日志,以验证客户端设备是否成功连接并发送消息。有关更多信息,请参阅 查看Amazon IoT GreengrassCore 软件日志

测试 JavaScript 信

在本节中,您将使用 Amazon IoT Device SDK 用于的 v2来测试客户端设备与核心设备之间的通信。

重要

使用 Amazon IoT Device SDK 对于 JavaScript,设备必须运行节点 v10.0 或更高版本。

要测试通信 ( Amazon IoT Device SDK 适用于 JavaScript 的版本)

  1. 下载并安装 Amazon IoT Device SDK 用于的 v2添加到Amazon IoT作为客户端设备连接的东西。

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

    1. 克隆 Amazon IoT Device SDK 对于 JavaScript 存储库来下载它。

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

      cd aws-iot-device-sdk-js-v2 npm install
  2. 更改到 Greengrass 发现示例文件夹中的 Amazon IoT Device SDK 适用于 JavaScript 的 v2。

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

    npm install
  4. 运行示例 Greengrass 发现应用程序。此应用程序需要指定客户端设备事件名称、要使用的 MQTT 主题和消息以及验证和保护连接的证书的参数。以下示例将向clients/MyClientDevice1/hello/world主题。

    • 替换我的客户端设备 1替换为客户端设备的事物名称。

    • Replace~/证书 /亚马逊rootca1.PEM,并指向客户端设备上的 Amazon 根 CA 证书的路径。

    • Replace〜/证书/设备 .pem.crt与客户端设备上设备证书的路径。

    • Replace〜/证书/私有 .pem.key私有密钥文件的路径。

    • Replaceus-east-1使用Amazon您的客户端设备和核心设备运行的区域。

    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 日志,以验证客户端设备是否成功连接并发送消息。有关更多信息,请参阅 查看Amazon IoT GreengrassCore 软件日志

测试通信 (Java)

在本节中,您将使用 Amazon IoT Device SDK 用于的 v2来测试客户端设备与核心设备之间的通信。

重要

构建 Amazon IoT Device SDK v2,则设备必须具有以下工具:

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

  • Apache Maven

要测试通信 ( Amazon IoT Device SDK 适用于 Java 的 v2)

  1. 下载并构建 Amazon IoT Device SDK 用于的 v2添加到Amazon IoT作为客户端设备连接的东西。

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

    1. 克隆 Amazon IoT Device SDK v2 来下载它。

      git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
    2. 将更改为 Amazon IoT Device SDK 对于 Java 文件夹的版本。

    3. 构建 Amazon IoT Device SDK v2 适用于 Java。

      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主题,并将您在命令行中输入的消息发布到同一主题。

    • 替换我的客户端设备 1替换为客户端设备的事物名称。

    • Replace美元首页/证书 /亚马逊罗特卡1.pem,并指向客户端设备上的 Amazon 根 CA 证书的路径。

    • Replace$首页/证单/设备.PEM.CRT与客户端设备上设备证书的路径。

    • Replace$ 首页/证单/私人.PEM.Key私有密钥文件的路径。

    • Replaceus-east-1使用 Amazon Web Services 区域 您的客户端设备和核心设备在哪里运行。

    DISCOVERY_SAMPLE_ARGS="--thingName MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --rootca $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"

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

    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 日志,以验证客户端设备是否成功连接并发送消息。有关更多信息,请参阅 查看Amazon IoT GreengrassCore 软件日志