本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
测试客户端设备通信
客户端设备可以使用Amazon IoT Device SDK来发现、连接和与核心设备通信。您 Greengrass 以在Amazon IoT Device SDK要使用的Greengrass Discovery API,它返回有关客户端设备可以连接到的核心设备的信息。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 的 v2
使用Amazon IoT Device SDKv2,设备必须运行 Python 3.6 或更高版本。
要测试通信 (Amazon IoT Device SDK用于 Python 的 v2)
-
下载并安装Amazon IoT Device SDK适用于 Python 的 v2
添加到Amazon IoT作为客户端设备连接的东西。 在客户端设备上,执行以下操作:
-
克隆Amazon IoT Device SDK为 Python 存储库下载它。
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
-
安装Amazon IoT Device SDK版本 2,适用于 Python。
python3 -m pip install --user ./aws-iot-device-sdk-python-v2
-
-
更改到Amazon IoT Device SDK版本 2,适用于 Python。
cd aws-iot-device-sdk-python-v2/samples
-
运行示例 Greengrass 发现应用程序。此应用程序需要指定客户端设备事件名称、要使用的 MQTT 主题和消息以及验证和保护连接的证书的参数。以下示例将 Hello World 消息发送给
clients/
主题。MyClientDevice1
/hello/world-
替换
我的客户端设备 1
替换为客户端设备的事物名称。 -
Replace
~/证书 /亚马逊rootca1.PEM
,并指向客户端设备上的 Amazon 根 CA 证书的路径。 -
Replace
〜/证书/设备 .pem.crt
与客户端设备上的设备证书的路径。 -
Replace
〜/证书/私有 .pem.key
替换客户端设备上私有密钥文件的路径。 -
Replace
us-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
\ --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-----\n
MIICiT...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适用于 C++ 的 v2
构建Amazon IoT Device SDKv2 对于 C ++,设备必须具有以下工具:
-
C++ 11 或更高版本
-
CMake 3.1 或更高版本
-
以下编译器之一:
-
GCC 4.8 或更高版本
-
Clone 3.9 或更高版本
-
2015 年或更高版本
-
要测试通信 (Amazon IoT Device SDKv2 适用于 C ++)
-
下载并构建Amazon IoT Device SDK适用于 C++ 的 v2
添加到Amazon IoT作为客户端设备连接的东西。 在客户端设备上,执行以下操作:
-
创建用于Amazon IoT Device SDKv2 用于 C ++ 工作区,然后更改为它。
cd mkdir iot-device-sdk-cpp cd iot-device-sdk-cpp
-
克隆Amazon IoT Device SDKv2 的 C ++ 存储库来下载它。这些区域有:
--recursive
标志指定下载子模块。git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
-
创建用于Amazon IoT Device SDKv2 用于 C ++ 构建输出,并更改为它。
mkdir aws-iot-device-sdk-cpp-v2-build cd aws-iot-device-sdk-cpp-v2-build
-
构建Amazon IoT Device SDKv2 适用于 C ++。
cmake -DCMAKE_INSTALL_PREFIX="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ../aws-iot-device-sdk-cpp-v2 cmake --build . --target install
-
-
在Amazon IoT Device SDKv2 适用于 C ++。执行以下操作:
-
更改到 Greengrass 发现示例文件夹中Amazon IoT Device SDKv2 适用于 C ++。
cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
-
为 Greengrass 发现示例生成输出创建一个文件夹,然后更改为该文件夹。
mkdir build cd build
-
构建 Greengrass 发现示例应用程序。
cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" .. cmake --build . --config "Release
-
-
运行示例 Greengrass 发现应用程序。此应用程序需要指定客户端设备事件名称、要使用的 MQTT 主题以及验证和保护连接的证书的参数。以下示例订阅
clients/
主题,并将您在命令行中输入的消息发布到同一主题。MyClientDevice1
/hello/world-
替换
我的客户端设备 1
替换为客户端设备的事物名称。 -
Replace
~/证书 /亚马逊rootca1.PEM
,并指向客户端设备上的 Amazon 根 CA 证书的路径。 -
Replace
〜/证书/设备 .pem.crt
与客户端设备上的设备证书的路径。 -
Replace
〜/证书/私有 .pem.key
替换客户端设备上私有密钥文件的路径。 -
Replace
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
发现示例应用程序订阅主题并提示您输入要发布的消息。
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 GreengrassCore 软件日志。
测试通信 (JavaScript)
在本节中,您将使用Amazon IoT Device SDK适用于 JavaScript 的 v2
使用Amazon IoT Device SDK对于 JavaScript,设备必须运行节点 v10.0 或更高版本。
要测试通信 (Amazon IoT Device SDK适用于 JavaScript 的 v2)
-
下载并安装Amazon IoT Device SDK适用于 JavaScript 的 v2
添加到Amazon IoT作为客户端设备连接的东西。 在客户端设备上,执行以下操作:
-
克隆Amazon IoT Device SDK对于 JavaScript 存储库来下载它。
git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
-
安装Amazon IoT Device SDK适用于 JavaScript 的开发工具包。
cd aws-iot-device-sdk-js-v2 npm install
-
-
更改到 Greengrass 发现示例文件夹中Amazon IoT Device SDK适用于 JavaScript 的开发工具包。
cd samples/node/basic_discovery
-
安装 Greengrass 发现示例应用程序。
npm install
-
运行示例 Greengrass 发现应用程序。此应用程序需要指定客户端设备事件名称、要使用的 MQTT 主题和消息以及验证和保护连接的证书的参数。以下示例将 Hello World 消息发送给
clients/
主题。MyClientDevice1
/hello/world-
替换
我的客户端设备 1
替换为客户端设备的事物名称。 -
Replace
~/证书 /亚马逊rootca1.PEM
,并指向客户端设备上的 Amazon 根 CA 证书的路径。 -
Replace
〜/证书/设备 .pem.crt
与客户端设备上的设备证书的路径。 -
Replace
〜/证书/私有 .pem.key
替换客户端设备上私有密钥文件的路径。 -
Replace
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 GreengrassCore 软件日志。
-
测试通信 (Java)
在本节中,您将使用Amazon IoT Device SDK适用于 Java 的 v2
构建Amazon IoT Device SDKv2,则设备必须具有以下工具:
-
Java 8 或更高版本,
JAVA_HOME
指向 Java 文件夹。 -
Apache Maven
要测试通信 (Amazon IoT Device SDK适用于 Java 的 v2)
-
下载并构建Amazon IoT Device SDK适用于 Java 的 v2
添加到Amazon IoT作为客户端设备连接的东西。 在客户端设备上,执行以下操作:
-
克隆Amazon IoT Device SDKv2 来下载它。
git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
-
将更改为Amazon IoT Device SDK对于 Java 文件夹的版本。
-
构建Amazon IoT Device SDKv2 适用于 Java。
cd aws-iot-device-sdk-java-v2 mvn versions:use-latest-versions -Dincludes="software.amazon.awssdk.crt*" mvn clean install
-
-
运行示例 Greengrass 发现应用程序。此应用程序需要指定客户端设备事件名称、要使用的 MQTT 主题以及验证和保护连接的证书的参数。以下示例订阅
clients/
主题,并将您在命令行中输入的消息发布到同一主题。MyClientDevice1
/hello/world-
替换
我的客户端设备 1
替换为客户端设备的事物名称。 -
Replace
美元首页/证书 /亚马逊罗特卡1.pem
,并指向客户端设备上的 Amazon 根 CA 证书的路径。 -
Replace
$首页/证单/设备.PEM.CRT
与客户端设备上的设备证书的路径。 -
Replace
$ 首页/证单/私人.PEM.Key
替换客户端设备上私有密钥文件的路径。 -
Replace
us-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
\ --regionus-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 发现问题疑难解答.
-
-
输入一条消息,例如
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 软件日志。