AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

测试通信

  1. 确保您的计算机和 AWS IoT Greengrass Core 设备已使用同一个网络连接到 Internet。

    1. 在 AWS IoT Greengrass Core 设备上,运行以下命令以查找其 IP 地址。

      hostname -I
    2. 在计算机上,使用核心的 IP 地址运行以下命令。可以使用 Ctrl + C 停止 ping 命令。

      ping IP-address

      类似于下面的输出指示了计算机与 AWS IoT Greengrass Core设备之间的通信成功(数据包丢失为 0%):

      
                        成功的 ping 命令输出。

      注意

      如果您无法对正在运行 AWS IoT Greengrass 的 EC2 实例进行 ping 操作,请确保该实例的入站安全组规则允许 ICMP 流量用于回显请求消息。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的向安全组添加规则

      在 Windows 主机上,在具有高级安全性应用程序的 Windows 防火墙中,您可能还需要启用一个允许入站回显请求的入站规则(例如,File and Printer Sharing (Echo Request - ICMPv4-In) (文件和打印机共享 (回显请求 - ICMPv4-In))),或创建一个。

  2. 获取您的 AWS IoT 终端节点。

    1. AWS IoT 控制台的导航窗格中,选择 Settings (设置)

    2. 设置 下方,记录终端节点的值。您可以使用此值在以下步骤中替换命令中的 AWS_IOT_ENDPOINT 占位符。

      
                AWS IoT 终端节点值。

      注意

      确保您的终端节点与证书类型对应

  3. 在您的计算机(不是 AWS IoT Greengrass Core 设备)上,打开两个 command-line(终端或命令提示符)窗口。一个窗口代表 HelloWorld_Publisher 设备,另一个窗口代表 HelloWorld_Subscriber 设备。

    执行时,basicDiscovery.py 尝试在其终端节点处 AWS IoT Greengrass Core 的位置上收集信息。在设备发现并成功连接到核心后,将会存储此信息。这将允许未来的消息收发和操作可以在本地执行(无需 Internet 连接)。

    注意

    您可以从包含 basicDiscovery.py 文件的文件夹运行以下命令,以查看详细的脚本使用信息:

    python basicDiscovery.py --help
  4. 从 HelloWorld_Publisher 设备窗口运行以下命令。

    • path-to-certs-folder 替换为包含证书、密钥和 basicDiscovery.py 的文件夹的路径。

    • AWS_IOT_ENDPOINT 替换为您的终端节点。

    • 将两个 publisher 实例替换为 HelloWorld_Publisher 设备的文件名中的哈希值。

    cd path-to-certs-folder python basicDiscovery.py --endpoint AWS_IOT_ENDPOINT --rootCA root-ca-cert.pem --cert publisher.cert.pem --key publisher.private.key --thingName HelloWorld_Publisher --topic 'hello/world/pubsub' --mode publish --message 'Hello, World! Sent from HelloWorld_Publisher'

    您应该看到类似于以下内容的输出,其中包括诸如 Published topic 'hello/world/pubsub': {"message": "Hello, World! Sent from HelloWorld_Publisher", "sequence": 1} 的条目。

    
                            publisher 输出的屏幕截图。

    注意

    如果脚本返回 error: unrecognized arguments 消息,请针对 --topic--message 参数将单引号更改为双引号,并再次运行该命令。

    要排查连接问题,您可以尝试使用手动 IP 检测

  5. 从 HelloWorld_Subscriber 设备窗口运行以下命令。

    • path-to-certs-folder 替换为包含证书、密钥和 basicDiscovery.py 的文件夹的路径。

    • AWS_IOT_ENDPOINT 替换为您的终端节点。

    • 将两个 subscriber 实例替换为 HelloWorld_Subscriber 设备的文件名中的哈希值。

    cd path-to-certs-folder python basicDiscovery.py --endpoint AWS_IOT_ENDPOINT --rootCA root-ca-cert.pem --cert subscriber.cert.pem --key subscriber.private.key --thingName HelloWorld_Subscriber --topic 'hello/world/pubsub' --mode subscribe

    您应该看到以下输出,其中包括诸如 Received message on topic hello/world/pubsub: {"message": "Hello, World! Sent from HelloWorld_Publisher", "sequence": 1} 的条目。

    
                            subscriber 输出的屏幕截图。

关闭 HelloWorld_Publisher 可停止在 HelloWorld_Subscriber 窗口中产生额外的消息。

在公司网络上进行测试可能会干扰与核心的连接。作为解决方法,您可以手动输入终端节点。这可确保 basicDiscovery.py 脚本能连接到 AWS IoT Greengrass Core 设备的正确 IP 地址。

手动输入终端节点

  1. 依次选择 Greengrass和您的组。

  2. 选择 Settings

  3. 对于 Local connection detection (本地连接检测),选择 Manually manage connection information (手动管理连接信息),然后选择 View Cores for specific endpoint information (查看核心的特定终端节点信息)

  4. 选择您的核心,然后选择连接

  5. 选择编辑,确保只有一个终端节点值。该值必须是 AWS IoT Greengrass Core 设备的端口 8883 的 IP 地址终端节点(例如,192.168.1.4)。

  6. 选择 Update