使用环境变量配置Greengrass部署

0

【以下的问题经过翻译处理】 我刚刚开始使用AWS GreenGrass,并尝试创建一个可以用于多个设备的部署。 我正在使用运行Greengrass的树莓派4,并通过运行在树莓派上的软件组件连接到一些能源计量仪表和传感器。 我创建了一个部署,使用了以下AWS提供的组件:

MQTT代理 MQTT桥接 认证 影子管理器 假设Greengrass核心设备称为 mainDevice01, 并且它应该通过MQTT桥接订阅所有包含mainDevice01/things/#的主题。最终用户可以将设备(能源计量仪表、传感器等)添加到mainDevice01,这些设备将作为设备上的一段软件运行。根据我的经验:

我必须为群集中的每个mainDevice创建一个单独的部署。正确吗? 连接到Greengrass核心设备的每个新设备应触发大量的部署更新(要收集的影子,新的MQTT桥接链接等)。 我想为许多mainDevice创建一个单一的部署,它们都订阅其各自的子主题。我尝试在MQTT桥接的合并配置中使用{iot:thingName}作为变量,但似乎不起作用。

{ "reset": [], "merge": { "ThingData": { "topic": "{iot:thingName}/things/#", "source": "IotCore", "target": "LocalMqtt" } } } 同样,如果可能的话,我希望自动配置影子管理器以收集属于核心设备或特定组的设备的影子。我不确定我的设计思路是否正确?有关如何正确执行此操作的任何建议都将不胜感激!

profile picture
专家
已提问 6 个月前0 查看次数
1 回答
0

【以下的回答经过翻译处理】

你好

感谢答复,对于回复晚了给你道歉。我找到了解决方案,我想在这里发布它,帮助其他人。

以下是与我上下文相关的一些有趣的事情:

  • 我完全是AWS的新手,通过阅读了解设计概念
  • 我是一个Typescript / javascript开发人员,所以我想使用Greengrass Core SDK for JS
  • 此SDK不支持IPC(本地发布/订阅),因此所有组件的通信需要通过本地的MQTT Broker组件进行

我试图做的事情:

  • 我希望在AWS控制台中创建一个单个部署,该部署将适用于所有未来的设备,并包含完整的组件配置
  • 所有核心设备 <-> IoT <-> 应用程序流量都使用此模式路由到每个设备 coreThingName / things / ….
  • 我试图从此部署动态配置MQTT Bridge
  • 我尝试进行的合并配置如下:

{ "reset": [], "merge": { "ThingQuestions": { "topic": "{iot:thingName}/things/request/#", "source": "IotCore", "target": "LocalMqtt" }, "ThingResponses": { "topic": "{iot:thingName}/things/responses/#", "source": "LocalMqtt", "target": "IotCore" } } } }

但是,像{iot:thingName}这样的参数似乎不受支持。

解决方案:

  • 设计指南似乎是:在控制台中创建的*部署包含所有全局配置,并且必要时,核心设备上的组件可以合并局部配置更新。
  • 我发现Java,C ++和Python Greengrass Core SDK具有从自定义Greengrass组件内部本地编辑组件配置的方法。
  • 这个功能尚未在Javascript SDK中实现
  • 因此,我使用exec函数从组件内部动态更改MQTT Bridge配置,运行greengrass-cli命令:

/**

  • Update the configuration of an existing GG component */ import { exec } from 'child_process'

/** *

  • @param {*} component aws.greengrass.clientdevices.mqtt.Bridge=2.1.0 COMPONENT_NAME=VERSION
  • @param {*} config
  • @returns */ export default async function updateConfig (component, config) { return new Promise( (resolve, reject) => { exec(/greengrass/v2/bin/greengrass-cli deployment create --merge ${component} --update-config '${JSON.stringify(config)}', (err, stdout, stderr) => { if (err) { reject(err) } else { resolve(stdout) } }) }) }

我希望这可以帮助其他新的Greengrass用户

最好的问候

Hacor

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则