本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
测试客户端设备通信
客户端设备可以使用 Amazon IoT Device SDK 来发现、连接核心设备并与之通信。您可以通过 Amazon IoT Device SDK 中的 Greengrass Discovery 客户端来使用 Greengrass Discovery API,它会返回有关客户端设备可以连接的核心设备的信息。API 响应包括要连接的 MQTT 代理端点和用于验证每台核心设备身份的证书。然后,客户端设备可以尝试连接每个端点,直至其成功连接核心设备。
客户端设备仅能发现您与之关联的核心设备。在测试客户端设备与核心设备之间的通信之前,必须将客户端设备与核心设备相关联。有关更多信息,请参阅 关联客户端设备。
Greengrass Discovery API 会返回您指定的核心设备 MQTT 代理端点。您可以使用 IP 检测器组件为您管理这些端点,也可以手动管理每台核心设备的端点。有关更多信息,请参阅 管理核心设备端点。
注意
要使用 Greengrass Discovery API,客户端设备必须拥有 greengrass:Discover
权限。有关更多信息,请参阅 客户端设备的最低 Amazon IoT 策略。
Amazon IoT Device SDK 有多种编程语言。有关更多信息,请参阅Amazon IoT Core 开发人员指南中的 Amazon IoT Device 软件开发工具包。
测试通信(Python)
在本节中,您将使用适用于 Python 的 Amazon IoT Device SDK v2
重要
要使用适用于 Python 的 Amazon IoT Device SDK v2,设备必须使用 Python 3.6 或更高版本。
测试通信(适用于 Python 的 Amazon IoT Device SDK v2)
-
下载适用于 Python 的 Amazon IoT Device SDK v2
并将其安装到要作为客户端设备连接的 Amazon IoT 事物上。 在客户端设备上,执行以下操作:
-
克隆适用于 Python 的 Amazon IoT Device SDK v2 存储库以将其下载。
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
-
安装适用于 Python 的 Amazon IoT Device SDK v2。
python3 -m pip install --user ./aws-iot-device-sdk-python-v2
-
-
更改为适用于 Python 的 Amazon IoT Device SDK v2 中的示例文件夹。
cd aws-iot-device-sdk-python-v2/samples
-
运行示例 Greengrass Discovery 应用程序。此应用程序需要指定客户端设备事物名称、要使用的 MQTT 主题和消息以及用于验证和保护连接的证书的参数。以下示例向
clients/
主题发送“Hello World”消息。MyClientDevice1
/hello/world-
将
myClientDevice1
替换为客户端设备的事物名称。 -
将
~/certs/AmazonRootCA1.pem
替换为客户端设备上的 Amazon 根 CA 证书的路径。 -
将
~/certs/device.pem.crt
替换为客户端设备上的设备证书的路径。 -
将
~/certs/private.pem.key
替换为客户端设备上的私钥文件的路径。 -
将
us-east-1
替换为客户端设备和核心设备在其中运行的 Amazon 区域。
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
\\ --regionus-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 日志,以验证客户端设备是否成功连接和发送消息。有关更多信息,请参阅 监控 Amazon IoT Greengrass 日志。
-
测试通信(C++)
在本节中,您将使用适用于 C++ 的 Amazon IoT Device SDK v2
要构建适用于 C++ 的 Amazon IoT Device SDK v2,设备必须具有以下工具:
-
C++ 11 或更高版本
-
CMake 3.1 或更高版本
-
以下编译器之一:
-
GCC 4.8 或更高版本
-
Clang 3.9 或更高版本
-
MSVC 2015 或更高版本
-
测试通信(适用于 C++ 的 Amazon IoT Device SDK v2)
-
下载适用于 C++ 的 Amazon IoT Device SDK v2
并将其构建至要作为客户端设备连接的 Amazon IoT 事物上。 在客户端设备上,执行以下操作:
-
为适用于 C++ 的 Amazon IoT Device SDK v2 工作区创建一个文件夹,然后更改为该文件夹。
cd mkdir iot-device-sdk-cpp cd iot-device-sdk-cpp
-
克隆适用于 C++ 的 Amazon IoT Device SDK v2 存储库以将其下载。
--recursive
标记指定下载子模块。git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
-
为适用于 C++ 的 Amazon IoT Device SDK v2 构建输出创建一个文件夹,然后更改为该文件夹。
mkdir aws-iot-device-sdk-cpp-v2-build cd aws-iot-device-sdk-cpp-v2-build
-
构建适用于 C++ 的 Amazon 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
-
-
在适用于 C++ 的 Amazon IoT Device SDK v2 中构建 Greengrass Discovery 示例应用程序。执行以下操作:
-
更改为适用于 C++ 的 Amazon IoT Device SDK v2 中的 Greengrass Discovery 示例文件夹。
cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
-
为 Greengrass Discovery 示例构建输出创建一个文件夹,然后更改为该文件夹。
mkdir build cd build
-
构建 Greengrass Discovery 示例应用程序。
cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" .. cmake --build . --config "Release"
-
-
运行示例 Greengrass Discovery 应用程序。此应用程序需要指定客户端设备事物名称、要使用的 MQTT 主题以及用于验证和保护连接的证书的参数。以下示例订阅了
clients/
主题,并将您在命令行中输入的消息发布至同一主题。MyClientDevice1
/hello/world-
将
myClientDevice1
替换为客户端设备的事物名称。 -
将
~/certs/AmazonRootCA1.pem
替换为客户端设备上的 Amazon 根 CA 证书的路径。 -
将
~/certs/device.pem.crt
替换为客户端设备上的设备证书的路径。 -
将
~/certs/private.pem.key
替换为客户端设备上的私钥文件的路径。 -
将
us-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
\ --regionus-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 发现问题疑难解答。
-
-
输入一条消息,例如
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 Greengrass 日志。
测试通信(JavaScript)
在本节中,您将使用适用于 JavaScript 的 Amazon IoT Device SDK v2
重要
要使用适用于 JavaScript 的 Amazon IoT Device SDK v2,设备必须运行 Node v10.0 或更高版本。
测试通信(适用于 JavaScript 的 Amazon IoT Device SDK v2)
-
下载适用于 JavaScript 的 Amazon IoT Device SDK v2
并将其安装到要作为客户端设备连接的 Amazon IoT 事物上。 在客户端设备上,执行以下操作:
-
克隆适用于 JavaScript 的 Amazon IoT Device SDK v2 存储库以将其下载。
git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
-
安装适用于 JavaScript 的 Amazon IoT Device SDK V2
cd aws-iot-device-sdk-js-v2 npm install
-
-
更改为适用于 JavaScript 的 Amazon IoT Device SDK v2 中的 Greengrass Discovery 示例文件夹。
cd samples/node/basic_discovery
-
安装 Greengrass Discovery 示例应用程序。
npm install
-
运行示例 Greengrass Discovery 应用程序。此应用程序需要指定客户端设备事物名称、要使用的 MQTT 主题和消息以及用于验证和保护连接的证书的参数。以下示例向
clients/
主题发送“Hello World”消息。MyClientDevice1
/hello/world-
将
myClientDevice1
替换为客户端设备的事物名称。 -
将
~/certs/AmazonRootCA1.pem
替换为客户端设备上的 Amazon 根 CA 证书的路径。 -
将
~/certs/device.pem.crt
替换为客户端设备上的设备证书的路径。 -
将
~/certs/private.pem.key
替换为客户端设备上的私钥文件的路径。 -
将
us-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
\ --regionus-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-----\n
MIICiT...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 Greengrass 日志。
-
测试通信(Java)
在本节中,您将使用适用于 Java 的 Amazon IoT Device SDK v2
重要
要构建适用于 Java 的 Amazon IoT Device SDK v2,设备必须具有以下工具:
-
Java 8 或更高版本,
JAVA_HOME
指向 Java 文件夹。 -
Apache Maven
测试通信(适用于 Java 的 Amazon IoT Device SDK v2)
-
下载适用于 Java 的 Amazon IoT Device SDK v2
并将其构建至要作为客户端设备连接的 Amazon IoT 事物上。 在客户端设备上,执行以下操作:
-
克隆适用于 Java 的 Amazon IoT Device SDK v2 存储库以将其下载。
git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
-
更换至适用于 Java 的 Amazon IoT Device SDK v2 文件夹。
-
构建适用于 Java 的 Amazon IoT Device SDK v2。
cd aws-iot-device-sdk-java-v2 mvn versions:use-latest-versions -Dincludes="software.amazon.awssdk.crt*" mvn clean install
-
-
运行示例 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
替换为客户端设备和核心设备在其中运行的 Amazon Web Services 区域。
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
\ --regionus-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 发现问题疑难解答。
-
-
输入一条消息,例如
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 Greengrass 日志。