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

您正在查看Amazon IoT Greengrass Version 1.Amazon IoT Greengrass Version 2是最新的主要版本Amazon IoT Greengrass. 有关使用Amazon IoT Greengrass V2,请参阅Amazon IoT Greengrass Version 2开发人员指南.

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

测试通信

  1. 请确保您的计算机和Amazon IoT Greengrass核心设备使用同一个网络连接到 Internet。

    1. 在存储库的Amazon IoT Greengrass核心设备,运行以下命令以查找其 IP 地址。

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

      ping IP-address

      类似于下面的输出指示了计算机与Amazon IoT Greengrass核心设备(0% 数据包丢失):

      
                        成功的 ping 命令输出。
      注意

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

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

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

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

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

      
                Amazon IoT终端节点值。
      注意
  3. 在您的计算机上(而不是Amazon IoT Greengrass核心设备),打开两个命令行(终端或命令提示符)窗口。一个窗口代表 HelloWorld_Publisher 设备,另一个窗口代表 HelloWorld_Subscriber 设备。

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

    注意

    用于 MQTT 连接的客户端 ID 必须与客户端设备的事物名称匹配。这些区域有:basicDiscovery.py脚本将 MQTT 连接的客户端 ID 设置为您在运行脚本时指定的事物名称。

    运行以下命令,包含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} 的条目。

    注意

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

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

    
                            publisher 输出的屏幕截图。
  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脚本将连接到Amazon IoT Greengrass核心设备。

手动输入终端节点

  1. 在Amazon IoT控制台的导航窗格中,选择Greengrass经典 (V1)Groups.

  2. UNASOGreengrass 组,选择您的组。

  3. 选择 Settings

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

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

  6. 选择编辑,确保只有一个终端节点值。此值必须是您的端口 8883 的 IP 地址终端节点。Amazon IoT Greengrass核心设备(例如192.168.1.4)。

  7. 选择 Update