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
相关内容
- AWS 官方已更新 1 年前