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

Amazon IoT Greengrass Version 1在 2023 年 6 月 30 日之前,不再接收功能更新,只会收到安全补丁和错误修复。有关更多信息,请参阅 。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 流量用于回显请求消息。有关更多信息,请参阅 。在安全组中添加规则中的适用于 Linx 实例的 Amazon EC2 用户指南.

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

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

    1. Amazon IoT控制台导航窗格,选择设置.

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

  3. 在计算机上(不是Amazon IoT Greengrass核心设备),打开两个命令行(终端或命令提示符)窗口。一个窗口代表 HelloWorld_Publisher 客户端设备,另一个代表 HelloWorld_订阅者客户端设备。

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

    注意

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

    从包含的文件夹运行以下命令basicDiscovery.py文件以获取详细的脚本使用信息:

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

    • Replacepath-to-certs-folder包含证书、密钥的文件夹的文件夹的路径,basicDiscovery.py.

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

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

    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 客户端设备窗口中,运行以下命令。

    • Replacepath-to-certs-folder包含证书、密钥的文件夹的文件夹的路径,basicDiscovery.py.

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

    • 替换两个subscriberCertId在文件名中包含证书 ID 的实例 HelloWorld_订阅者客户端设备。

    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_SubscriberWindows。

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

手动输入终端节点

  1. 在Amazon IoT控制台导航窗格,UN,Manage,展开Greengrass,然后选择组 (V1).

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

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

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

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

    3. 编辑 IP 探测器设置,选择手动管理 MQTT 代理终端节点,然后选择Save(保存).

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

    1. UN,,概述,选择Greengrass 核心.

    2. UN,,MQTT 代理终端节点,选择管理终端节点.

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

    4. 选择 Update(更新)。