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

Amazon IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 Amazon IoT Greengrass V1 维护策略。在此日期之后,将 Amazon IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 Amazon IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 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 控制台导航窗口中,选择设置

    2. 设备数据端点下,记下 端点的值。您可以使用此值在以下步骤中替换命令中的 AWS_IOT_ENDPOINT 占位符。

  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 替换为您的端点。

    • 将两个 publisherCertId 实例替换为 HelloWorld_Publisher 客户端设备的文件名中的证书 ID。

    cd path-to-certs-folder python basicDiscovery.py --endpoint AWS_IOT_ENDPOINT --rootCA AmazonRootCA1.pem --cert publisherCertId-certificate.pem.crt --key publisherCertId-private.pem.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 替换为您的端点。

    • 将两个 subscriberCertId 实例替换为 HelloWorld_Subscriber 客户端设备的文件名中的证书 ID。

    cd path-to-certs-folder python basicDiscovery.py --endpoint AWS_IOT_ENDPOINT --rootCA AmazonRootCA1.pem --cert subscriberCertId-certificate.pem.crt --key subscriberCertId-private.pem.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 核心设备的正确 IP 地址。

手动输入端点
  1. 在 Amazon IoT 控制台导航窗格的管理下,展开 Greengrass 设备,然后选择组 (V1)

  2. Greengrass 组下,选择您的组。

  3. 配置核心,以手动管理 MQTT 代理端点。执行以下操作:

    1. 在组配置页面上,选择Lambda 函数选项卡。

    2. 系统 Lambda 函数下,选择 IP 检测器,然后选择编辑

    3. 编辑 IP 检测器设置中,选择手动管理 MQTT 代理端点,然后选择保存

  4. 输入核心的 MQTT 代理端点。执行以下操作:

    1. 概述下,选择 Greengrass 核心

    2. MQTT 代理端点下,选择管理端点

    3. 选择添加端点,确保只有一个端点值。该值必须是 Amazon IoT Greengrass 核心设备的端口 8883 的 IP 地址端点(例如,192.168.1.4)。

    4. 选择更新