测试通信 - 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 核心设备使用相同的网络连接到互联网。

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

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

      ping IP-address

      类似于以下内容的输出表示计算机和 Amazon IoT Greengrass 核心设备之间成功通信(丢包 0%):

      成功的 ping 命令输出。
      注意

      如果您无法 ping 正在运行的 EC2 实例 Amazon IoT Greengrass,请确保该实例的入站安全组规则允许 ECHO 请求消息的 ICMP 流量。有关更多信息,请参阅 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 替换为您的端点。

    • 将两个发布者CertId实例替换为您的 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 替换为您的端点。

    • 将这两个订阅者CertId实例替换为您的 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. 选择更新