在组件中与客户端设备交互 - AWS IoT Greengrass

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

在组件中与客户端设备交互

您可以开发与连接到核心设备的客户端设备交互的自定义 Greengrass 组件。例如,您可以开发执行以下操作的组件:

  • 处理来自客户端设备的 MQTT 消息并将数据发送到AWS Cloud目的地。

  • 向客户端设备发送 MQTT 消息以启动操作。

客户端设备通过核心设备上运行的 MQTT 代理组件连接到核心设备并与之通信。默认情况下,客户端设备只能通过 MQTT 相互通信,而 Greengrass 组件无法接收这些 MQTT 消息或向客户端设备发送消息。

Greengrass 组件使用本地发布/订阅接口在核心设备上进行通信。要在 Greengrass 组件中与客户端设备通信,请将 MQTT 网桥组件配置为执行以下操作:

  • 将来自客户端设备的 MQTT 消息中继到本地发布/订阅。

  • 将来自本地发布/订阅的 MQTT 消息中继到客户端设备。

您还可以在 Greengrass 组件中与客户端设备阴影进行交互。有关更多信息,请参阅 与客户端设备影子进行交互并进行同步

配置和部署 MQTT 网桥组件

MQTT bridge 组件使用主题映射列表,每个主题映射都指定消息源和消息目的地。要与客户端设备通信,请部署 MQTT 网桥组件,并在组件配置中指定每个源和目标主题。

要将 MQTT 桥接组件部署到一台或一组核心设备,请创建包含该aws.greengrass.clientdevices.mqtt.Bridge组件的部署。在部署的 MQTT 网桥组件配置中指定主题映射。mqttTopicMapping

以下示例定义了一个部署,该部署将 MQTT 桥接组件配置为将clients/MyClientDevice1/hello/world主题从客户端设备中继到本地发布/订阅代理。merge配置更新需要序列化的 JSON 对象。有关更多信息,请参阅 更新组件配置

Console
{ "mqttTopicMapping": { "HelloWorldPubsub": { "topic": "clients/MyClientDevice1/hello/world", "source": "LocalMqtt", "target": "Pubsub" } } }
AWS CLI
{ "components": { "aws.greengrass.clientdevices.mqtt.Bridge": { "version": "2.0.0", "configurationUpdate": { "merge": "\"mqttTopicMapping\":{\"HelloWorldPubsub\":{\"topic\":\"clients/MyClientDevice1/hello/world\",\"source\":\"LocalMqtt\",\"target\":\"Pubsub\"}}}" } } ... } }

您可以使用 MQTT 主题通配符来中继与主题筛选条件匹配的主题上的消息。如果您使用 MQTT bridge v2.2.0 或更高版本,则当源代理为本地发布/订阅时,可以在主题过滤器中使用 MQTT 主题通配符。有关更多信息,请参阅 MQTT 网桥组件配置

从客户端设备接收 MQTT 消息

您可以订阅您为 MQTT bridge 组件配置的本地发布/订阅主题,以接收来自客户端设备的消息。

使用自定义组件从客户端设备接收 MQTT 消息
  1. 配置和部署 MQTT 桥接组件,将来自客户端设备发布的 MQTT 主题的消息中继到本地发布/订阅主题。

  2. 使用本地发布/订阅 IPC 接口订阅 MQTT 网桥中继消息的主题。有关更多信息,请参阅 发布/订阅本地消息SubscribeToTopic

Connect and test 客户端设备教程包括一个部分,您可以在其中开发一个用于订阅来自客户端设备的消息的组件。有关更多信息,请参阅 步骤 4:开发可与客户端设备通信的组件

向客户端设备发送 MQTT 消息

您可以发布到您为 MQTT bridge 组件配置的本地发布/订阅主题,以便向客户端设备发送消息。

使用自定义组件向客户端设备发布 MQTT 消息
  1. 配置和部署 MQTT 桥接组件,将来自本地发布/订阅主题的消息中继到客户端设备订阅的 MQTT 主题。

  2. 使用本地发布/订阅 IPC 接口发布到 MQTT 网桥中继消息的主题。有关更多信息,请参阅 发布/订阅本地消息PublishToTopic