教程:通过 MQTT 与本地 IoT 设备互动 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

教程:通过 MQTT 与本地 IoT 设备互动

您可以完成本教程来配置核心设备以与本地 IoT 设备进行交互,该设备称为客户端设备,通过 MQTT 连接到核心设备。在本教程中,您将配置Amazon IoT要使用的东西云发现将作为客户端设备连接到核心设备。配置云发现时,客户端设备可以向Amazon IoT Greengrass用于发现核心设备的云服务。来自的响应Amazon IoT Greengrass包括配置客户端设备要发现的核心设备的连接信息和证书。然后,客户端设备可以使用这些信息连接到可用的核心设备,在那里它可以通过 MQTT 进行通信。

在本教程中,您将执行以下操作:

  1. 如果需要,请查看并更新核心设备的权限。

  2. 将客户端设备与核心设备关联,以便他们可以使用云发现来发现核心设备。

  3. 将 Greengrass 组件部署到核心设备以启用客户端设备支持。

  4. 将客户端设备 Connect 到核心设备并测试与Amazon IoT Core云服务。

  5. 开发与客户端设备交互的自定义 Greengrass 组件。

本教程使用单个核心设备和单个客户端设备。您还可以按照教程进行操作,以连接和测试多个客户端设备。

您预计需要花费 30-50 分钟来完成本教程。

先决条件

要完成本教程,您需要:

  • 一个 Amazon Web Services 账户。如果没有,请参阅设置Amazon Web Services 账户

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon Identity and Access Management具有管理员权限的 (IAM) 用户。

  • Greengrass 核心设备。有关如何设置核心设备的更多信息,请参阅设置Amazon IoT Greengrass核心设备.

    • 核心设备必须与客户端设备位于同一网络上才能进行连接。

    • (可选)要完成开发与客户端设备交互的自定义组件的模块,核心设备必须运行 Greengrass CLI。有关更多信息,请参阅 安装 Greengrass CLI

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT本教程中要作为客户端设备连接的东西。有关更多信息,请参阅 。CreateAmazon IoT资源中的Amazon IoT Core开发人员指南.

    • 客户端设备的Amazon IoT策略必须允许greengrass:Discover许可。有关更多信息,请参阅 最低Amazon IoT客户端设备的策略

    • 客户端设备必须与核心设备位于同一网络上。

    • 客户端设备必须运行Python 3.

    • 客户端设备必须运行饭桶.

第 1 步:查看和更新核心设备Amazon IoT政策

为了支持客户端设备,核心设备Amazon IoT策略必须允许以下权限:

  • greengrass:PutCertificateAuthorities

  • greengrass:VerifyClientDeviceIdentity

  • greengrass:VerifyClientDeviceIoTCertificateAssociation

  • greengrass:GetConnectivityInfo

  • greengrass:UpdateConnectivityInfo—(可选)使用需要此权限才能使用IP 检测器组件,它将核心设备的网络连接信息报告给Amazon IoT Greengrass云服务。

有关更多信息,请参阅 数据层面操作的 Amazon IoT 策略最低Amazon IoT支持客户端设备的策略

在本节中,您将查看Amazon IoT适用于核心设备的策略,并添加缺少的所有必需权限。如果您使用Amazon IoT Greengrass核心软件安装程序来调配资源,核心设备上有Amazon IoT允许访问所有策略Amazon IoT Greengrass操作 (greengrass:*)。

查看和更新核心设备Amazon IoT政策

  1. Amazon IoT Greengrass控制台在导航菜单上,选择核心设备.

  2. 在存储库的核心设备页面中,选择要更新的核心设备。

  3. 在核心设备详细信息页面上,选择指向核心设备的链接Thing. 此链接将在Amazon IoT控制台。

  4. 在事物详细信息页面上,选择证书.

  5. 证书选项卡上,选择事物的活动证书。

  6. 在证书详细信息页面上,选择策略.

  7. 策略选项卡上,选择Amazon IoT要审查和更新的策略。您可以将所需的权限添加到附加到核心设备的活动证书的任何策略中。

    注意

    如果您使用Amazon IoT Greengrass核心软件安装程序来调配资源,你有两个Amazon IoT政策。建议您选择名为的策略。GreengrassV2IoTThingPolicy,如果存在的话。默认情况下,使用快速安装程序创建的核心设备使用此策略名称。如果向此策略添加权限,则还将这些权限授予使用此策略的其他核心设备。

  8. 在策略概述中,选择编辑活动版本.

  9. 查看策略以获取所需权限,然后添加缺少的所有必需权限。

  10. 要将新策略版本设置为活动版本,请在策略版本状态,选择将编辑后的版本设置为此策略的活动版本.

  11. 选择另存为新版本.

第 2 步:启用客户端设备支持

要使客户端设备使用云发现连接到核心设备,您必须关联这些设备。将客户端设备与核心设备关联时,可以使该客户端设备检索核心设备的 IP 地址和证书以用于连接。

使客户端设备能够安全地连接到核心设备并与 Greengrass 组件进行通信Amazon IoT Core,您将以下 Greengrass 组件部署到核心设备:

  • 客户端设备身份验证 (aws.greengrass.clientdevices.Auth)

    部署客户端设备身份验证组件以验证客户端设备并授权客户端设备操作。这个组件允许你Amazon IoT要连接到核心设备的东西。

    此组件需要一些配置才能使用它。您必须指定客户端设备组以及每个组有权执行的操作,例如通过 MQTT 进行连接和通信。有关更多信息,请参阅 。客户端设备身份验证组件配置.

  • MQTT 经纪商(模具) (aws.greengrass.clientdevices.mqtt.Moquette)

    部署 Moquette MQTT 经纪商组件来运行开源 Moquette MQTT 经纪商。Moquette MQTT 经纪商符合 MQTT 3.1.1 的要求,包括对 QoS 0、QoS 1、QoS 2、保留的消息、最后意志消息和持久订阅的本地支持。

    无需将此组件配置为使用。但是,您可以配置此组件运行 MQTT 代理的端口。默认情况下,它使用端口 8883。

  • MQTT 桥 (aws.greengrass.clientdevices.mqtt.Bridge)

    (可选)部署 MQTT 桥接组件以在客户端设备(本地 MQTT)、本地发布/订阅和Amazon IoT CoreMQTT。配置此组件以将客户端设备与Amazon IoT Core并与 Greengrass 组件中的客户端设备进行交互。

    此组件需要配置才能使用。您必须指定此组件在其中继消息的主题映射。有关更多信息,请参阅 。MQTT 桥接组件配置.

  • IP 探测器 (aws.greengrass.clientdevices.IPDetector)

    (可选)部署 IP 检测器组件以将核心设备的 MQTT 代理端点自动报告给Amazon IoT Greengrass云服务。如果您的网络设置复杂,例如路由器将 MQTT Broker 端口转发到核心设备的网络设置,则无法使用此组件。

    无需将此组件配置为使用。

在本部分中,您将使用Amazon IoT Greengrass控制台以关联客户端设备并将客户端设备组件部署到核心设备。

启用客户端设备支持

  1. 导航到 Amazon IoT Greengrass 控制台

  2. 在左侧导航菜单中,选择核心设备.

  3. 在存储库的核心设备页面中,选择要在其中启用客户端设备支持的核心设备。

  4. 在核心设备详细信息页面上,选择客户端设备选项卡。

  5. 在存储库的客户端设备选项卡上,选择配置云发现.

    这些区域有:配置核心设备发现页面随即打开。在此页面上,您可以将客户端设备与核心设备关联并部署客户端设备组件。本页面为你选择核心设备第 1 步:选择目标核心设备.

    注意

    您还可以使用此页面为事物组配置核心设备发现。如果选择此选项,则可以将客户端设备组件部署到事物组中的所有核心设备。但是,如果选择此选项,则必须在稍后创建部署后将客户端设备手动关联到每个核心设备。在本教程中,您将配置单个核心设备。

  6. In步骤 2: 关联客户端设备,关联客户端设备Amazon IoT核心设备的东西。这使客户端设备能够使用云发现来检索核心设备的连接信息和证书。执行以下操作:

    1. 选择关联客户端设备.

    2. 将客户端设备与核心设备关联模态下,输入名称Amazon IoT要关联的东西。

    3. 选择 Add(添加)。

    4. 选择 Associate

  7. In步骤 3: 配置和部署 Greengrass 组件,部署组件以启用客户端设备支持。如果目标核心设备有以前的部署,则此页面将修订该部署。否则,此页面会为核心设备创建一个新的部署。执行以下操作来配置和部署客户端设备组件:

    1. 核心设备必须运行Greengrass 核v2.2.0 或更高版本来支持客户端设备。如果核心设备运行的是早期版本,请选中该框以部署aws.greengrass.Nucleus组件。

      注意

      如果你从早期的次要版本升级 Greengrass 核心,并且核心设备运行公共组件取决于核心,您还必须将公共组件更新为较新的版本。在本教程后面的部署时,可以配置这些组件的版本。有关更多信息,请参阅 更新Amazon IoT Greengrass核心软件 (OTA)

    2. 对于aws.greengrass.clientdevices.Auth组件,选择编辑配置.

    3. 编辑配置对于客户端设备身份验证组件的模式,配置授权策略,允许客户端设备在核心设备上发布和订阅 MQTT 代理。执行以下操作:

      1. 配置,在要合并的配置代码块,输入以下配置,其中包含设备组授权策略. 每个设备组授权策略都指定了一组操作以及客户端设备可以在其上执行这些操作的资源。

        • 此策略允许名称以开头的客户端设备。MyClientDevice就所有 MQTT 主题进行连接和交流。Replace我的客户端设备 *使用的名字Amazon IoT作为客户端设备连接的东西。您还可以使用*与客户端设备名称匹配的通配符。这些区域有:*名称末端必须有通配符。

          如果你有第二台客户端设备要连接,请替换MyotherClient Device*使用该客户端设备的名称或与该客户端设备名称匹配的通配符模式。否则,您可以删除或保留选择规则的这一部分,该部分允许名称匹配的客户端设备MyOtherClientDevice*进行连接和沟通。

        • 此策略使用OR操作员还允许名称以开头的客户端设备MyOtherClientDevice就所有 MQTT 主题进行连接和交流。您可以在选择规则中删除此子句,也可以对其进行修改以匹配要连接的客户端设备。

        • 此策略允许客户端设备发布和订阅所有 MQTT 主题。要遵循最佳安全实践,请限制mqtt:publishmqtt:subscribe操作到客户端设备用于通信的最小主题集。

        { "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyDeviceGroup": { "selectionRule": "thingName: MyClientDevice* OR thingName: MyOtherClientDevice*", "policyName": "MyClientDevicePolicy" } }, "policies": { "MyClientDevicePolicy": { "AllowConnect": { "statementDescription": "Allow client devices to connect.", "operations": [ "mqtt:connect" ], "resources": [ "*" ] }, "AllowPublish": { "statementDescription": "Allow client devices to publish to all topics.", "operations": [ "mqtt:publish" ], "resources": [ "*" ] }, "AllowSubscribe": { "statementDescription": "Allow client devices to subscribe to all topics.", "operations": [ "mqtt:subscribe" ], "resources": [ "*" ] } } } } }

        有关更多信息,请参阅 。客户端设备身份验证组件配置.

      2. 选择 Confirm(确认)。

    4. 对于aws.greengrass.clientdevices.mqtt.Bridge组件,选择编辑配置.

    5. 编辑配置MQTT 桥接组件的模式,配置一个主题映射,该主题映射将 MQTT 消息从客户端设备中继到Amazon IoT Core. 执行以下操作:

      1. 配置,在要合并的配置代码块,输入以下配置。此配置指定将在clients/+/hello/world主题过滤器从客户端设备到Amazon IoT Core云服务。例如,此主题筛选器与clients/MyClientDevice1/hello/world主题。

        { "mqttTopicMapping": { "HelloWorldIotCoreMapping": { "topic": "clients/+/hello/world", "source": "LocalMqtt", "target": "IotCore" } } }

        有关更多信息,请参阅 。MQTT 桥接组件配置.

      2. 选择 Confirm(确认)。

  8. 选择审核和部署以查看此页面为您创建的部署。

  9. 如果您以前尚未设置Greengrass 服务角色在此区域中,控制台会打开一个模式来为您设置服务角色。客户端设备身份验证组件使用此服务角色验证客户端设备的身份,IP 检测器组件使用此服务角色来管理核心设备连接信息。选择 Grant permissions(授予权限)。

  10. 在存储库的审核页面上,选择部署以开始部署到核心设备。

  11. 要验证部署是否成功,请检查部署状态,然后检查核心设备上的日志。要查看核心设备上部署的状态,您可以选择目标在部署中概述. 有关更多信息,请参阅下列内容:

第 3 步:Connect 客户端设备

客户端设备可以使用Amazon IoT Device SDK以发现、连接核心设备并与其进行通信。在本节中,您将安装Amazon IoT Device SDKPython 的 v2然后从中运行 Greengrass 发现示例应用程序Amazon IoT Device SDK.

注意

这些区域有:Amazon IoT Device SDK此外,还提供其他编程语言版本。本教程使用Amazon IoT Device SDKv2 适用于 Python,但是你可以为你的使用案例探索其他 SDK。有关更多信息,请参阅 。Amazon IoT设备开发工具包中的Amazon IoT Core开发人员指南.

将客户端设备连接到核心设备

  1. 下载并安装Amazon IoT Device SDKPython 的 v2到Amazon IoT作为客户端设备连接的东西。

    在客户端设备上,执行以下操作:

    1. 克隆Amazon IoT Device SDKv2 对于 Python 存储库来下载它。

      git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
    2. 安装Amazon IoT Device SDKv2 适用于 Python。

      python3 -m pip install --user ./aws-iot-device-sdk-python-v2
  2. 更改到中的样本文件夹Amazon IoT Device SDKv2 适用于 Python。

    cd aws-iot-device-sdk-python-v2/samples
  3. 运行示例 Greengrass 发现应用程序。此应用程序需要参数来指定客户端设备事物名称、要使用的 MQTT 主题和消息以及对连接进行身份验证和保护的证书。以下示例将 Hello World 消息发送给clients/MyClientDevice1/hello/world主题。

    注意

    本主题与您配置 MQTT 桥接以将消息中继到的主题相同Amazon IoT Core早期。

    • 替换两个实例我的客户端设备 1使用客户端设备的事物名称。

    • Replace~/ Certs/amazonrootca1.peM包含客户端设备上的亚马逊根 CA 证书的路径。

    • Replace~/证书/device.pem.crt包含客户端设备上设备证书的路径。

    • Replace~/证书/私人.pem.key使用客户端设备上私有密钥文件的路径进行操作。

    • Replaceus-east-1使用Amazon客户端设备和核心设备运行的区域。

    python3 basic_discovery.py \ --thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --message 'Hello World!' \ --ca_file ~/certs/AmazonRootCA1.pem \ --cert ~/certs/device.pem.crt \ --key ~/certs/private.pem.key \ --region us-east-1 \ --verbosity Warn

    发现示例应用程序发送消息 10 次并断开连接。它还订阅了发布消息的同一主题。如果输出表明应用程序收到了有关该主题的 MQTT 消息,则客户端设备可以成功与核心设备进行通信。

    Performing greengrass discovery... awsiot.greengrass_discovery.DiscoverResponse(gg_groups=[awsiot.greengrass_discovery.GGGroup(gg_group_id='greengrassV2-coreDevice-MyGreengrassCore', cores=[awsiot.greengrass_discovery.GGCore(thing_arn='arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore', connectivity=[awsiot.greengrass_discovery.ConnectivityInfo(id='203.0.113.0', host_address='203.0.113.0', metadata='', port=8883)])], certificate_authorities=['-----BEGIN CERTIFICATE-----\nMIICiT...EXAMPLE=\n-----END CERTIFICATE-----\n'])]) Trying core arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore at host 203.0.113.0 port 8883 Connected! Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 0} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 0}' Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 1} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 1}' ... Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 9} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 9}'

    如果应用程序输出错误,请参阅排查 Greengrass 发现问题.

    您还可以查看核心设备上的 Greengrass 日志,以验证客户端设备是否成功连接并发送消息。有关更多信息,请参阅 显示器Amazon IoT Greengrass圆木

  4. 验证 MQTT 桥是否将来自客户端设备的消息中继到Amazon IoT Core. 您可以在中使用 MQTT 测试客户端Amazon IoT Core以订阅 MQTT 主题筛选条件。执行以下操作:

    1. 导航到 Amazon IoT 控制台

    2. 在左侧导航菜单中,在下测试,选择MQTT 测试客户端.

    3. 在存储库的订阅主题选项卡,主题筛选条件,输入clients/+/hello/world以订阅核心设备的客户端设备消息。

    4. 选择 Subscribe

    5. 再次在客户端设备上运行发布/订阅应用程序。

      MQTT 测试客户端显示您从客户端设备发送的与此主题筛选器匹配的主题的消息。

第 4 步:开发与客户端设备交互的组件

您可以开发与客户端设备交互的 Greengrass 组件。使用组件进程间通信 (IPC)本地发布/订阅界面在核心设备上进行通信。要与客户端设备进行交互,请将 MQTT 桥组件配置为在客户端设备和本地发布/订阅之间中继消息。

在本节中,您将更新 MQTT 桥接组件,以便将消息从客户端设备中继到本地发布/订阅界面。然后,开发一个组件,用于订阅这些消息,并在收到消息时打印消息。

开发与客户端设备交互的组件

  1. 修改对核心设备的部署并配置 MQTT 桥接组件以将消息从客户端设备中继到本地发布/订阅。执行以下操作:

    1. 导航到 Amazon IoT Greengrass 控制台

    2. 在左侧导航菜单中,选择核心设备.

    3. 在存储库的核心设备页面中,选择您在本教程中使用的核心设备。

    4. 在核心设备详细信息页面上,选择客户端设备选项卡。

    5. 在存储库的客户端设备选项卡上,选择配置云发现.

      这些区域有:配置核心设备发现页面随即打开。在此页面上,您可以更改或配置将哪些客户端设备组件部署到核心设备。

    6. In步骤 3,对于aws.greengrass.clientdevices.mqtt.Bridge组件,选择编辑配置.

    7. 编辑配置MQTT 桥组件的模式,配置一个主题映射,用于将客户端设备的 MQTT 消息中继到本地发布/订阅界面。执行以下操作:

      1. 配置,在要合并的配置代码块,输入以下配置。此配置指定将 MQTT 消息中继与clients/+/hello/world主题过滤器从客户端设备到Amazon IoT Core云服务和当地 Greengrass 发布/订阅经纪商。

        { "mqttTopicMapping": { "HelloWorldIotCoreMapping": { "topic": "clients/+/hello/world", "source": "LocalMqtt", "target": "IotCore" }, "HelloWorldPubsubMapping": { "topic": "clients/+/hello/world", "source": "LocalMqtt", "target": "Pubsub" } } }

        有关更多信息,请参阅 。MQTT 桥接组件配置.

      2. 选择 Confirm(确认)。

    8. 选择审核和部署以查看此页面为您创建的部署。

    9. 在存储库的审核页面上,选择部署以开始部署到核心设备。

    10. 要验证部署是否成功,请检查部署状态,然后检查核心设备上的日志。要查看核心设备上部署的状态,您可以选择目标在部署中概述. 有关更多信息,请参阅下列内容:

  2. 开发和部署用于订阅来自客户端设备的 Hello World 消息的 Greengrass 组件。有关更多信息,请参阅 CreateAmazon IoT Greengrass组件

    1. 使用以下内容创建组件配方。这个配方规定了安装Amazon IoT Device SDKv2 适用于 Python,并运行订阅主题并打印消息的脚本。

      { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.clientdevices.MyHelloWorldSubscriber", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that subscribes to Hello World messages from client devices.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.pubsub": { "com.example.clientdevices.MyHelloWorldSubscriber:pubsub:1": { "policyDescription": "Allows access to subscribe to all topics.", "operations": [ "aws.greengrass#SubscribeToTopic" ], "resources": [ "*" ] } } } } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "Install": "python3 -m pip install --user awsiotsdk", "Run": "python3 -u {artifacts:path}/hello_world_subscriber.py" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "Install": "py -3 -m pip install --user awsiotsdk", "Run": "py -3 -u {artifacts:path}/hello_world_subscriber.py" } } ] }
    2. 创建名为的 Python 脚本工件hello_world_subscriber.py包含以下内容。此应用程序使用发布/订阅 IPC 服务来订阅clients/MyClientDevice1/hello/world主题并打印收到的消息。Replace我的客户端设备 1使用客户端设备的名称。

      import concurrent.futures import sys import time import traceback import awsiot.greengrasscoreipc import awsiot.greengrasscoreipc.client as client from awsiot.greengrasscoreipc.model import ( SubscribeToTopicRequest, SubscriptionResponseMessage, UnauthorizedError ) topic = "clients/MyClientDevice1/hello/world" TIMEOUT = 10 class StreamHandler(client.SubscribeToTopicStreamHandler): def __init__(self): super().__init__() def on_stream_event(self, event: SubscriptionResponseMessage) -> None: try: message = str(event.binary_message.message, "utf-8") print("Received new message: " + message) except: traceback.print_exc() def on_stream_error(self, error: Exception) -> bool: print("Received a stream error.", file=sys.stderr) traceback.print_exc() return False # Return True to close stream, False to keep stream open. def on_stream_closed(self) -> None: print('Subscribe to topic stream closed.') try: ipc_client = awsiot.greengrasscoreipc.connect() request = SubscribeToTopicRequest() request.topic = topic handler = StreamHandler() operation = ipc_client.new_subscribe_to_topic(handler) future = operation.activate(request) try: future.result(TIMEOUT) print('Successfully subscribed to topic: ' + topic) except concurrent.futures.TimeoutError as e: print('Timeout occurred while subscribing to topic: ' + topic, file=sys.stderr) raise e except UnauthorizedError as e: print('Unauthorized error while subscribing to topic: ' + topic, file=sys.stderr) raise e except Exception as e: print('Exception while subscribing to topic: ' + topic, file=sys.stderr) raise e # Keep the main thread alive, or the process will exit. try: while True: time.sleep(10) except InterruptedError: print('Subscribe interrupted.') except Exception: print('Exception occurred when using IPC.', file=sys.stderr) traceback.print_exc() exit(1)
    3. 使用 Greengrass CLI 部署组件。

      Linux or Unix
      sudo /greengrass/v2/bin/greengrass-cli deployment create \ --recipeDir recipes \ --artifactDir artifacts \ --merge "com.example.clientdevices.MyHelloWorldSubscriber=1.0.0"
      Windows Command Prompt (CMD)
      C:\greengrass\v2/bin/greengrass-cli deployment create ^ --recipeDir recipes ^ --artifactDir artifacts ^ --merge "com.example.clientdevices.MyHelloWorldSubscriber=1.0.0"
      PowerShell
      C:\greengrass\v2/bin/greengrass-cli deployment create ` --recipeDir recipes ` --artifactDir artifacts ` --merge "com.example.clientdevices.MyHelloWorldSubscriber=1.0.0"
  3. 查看组件日志以验证组件是否成功安装并订阅了主题。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.clientdevices.MyHelloWorldSubscriber.log
    PowerShell
    gc C:\greengrass\v2/logs/com.example.clientdevices.MyHelloWorldSubscriber.log -Tail 10 -Wait

    您可以保持日志源打开状态,以验证核心设备是否收到消息。

  4. 在客户端设备上,再次运行示例 Greengrass 发现应用程序以向核心设备发送消息。

    python3 basic_discovery.py \ --thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --message 'Hello World!' \ --ca_file ~/certs/AmazonRootCA1.pem \ --cert ~/certs/device.pem.crt \ --key ~/certs/private.pem.key \ --region us-east-1 \ --verbosity Warn
  5. 再次查看组件日志以验证组件是否接收并打印来自客户端设备的消息。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.clientdevices.MyHelloWorldSubscriber.log
    PowerShell
    gc C:\greengrass\v2/logs/com.example.clientdevices.MyHelloWorldSubscriber.log -Tail 10 -Wait

您已完成本教程。客户端设备连接到核心设备并将 MQTT 消息发送到Amazon IoT Core和 Greengrass 组件。有关本教程中涵盖的主题的更多信息,请参阅以下内容: