0

在过去的几天里,我一直在尝试使用 Greengrass v2 解决将消息从 Lambda 发布到 AWS 云的问题。

文档中甚至提供了 python 中的代码,只需要稍作修改。

当谈到文档中的 SDK v2 JS 时,AWS-CRT 库中很少提及发布功能。

我尝试使用该库中的组件创建代码,但看起来该库还需要一个带参数的脚本。

这是我的代码,需要安装 aws-iot-sdk-v2 js。

const iotsdk = require("aws-iot-device-sdk-v2");
const mqtt = iotsdk.mqtt;
const os = require("os");
const util = require("util");

const GROUP_ID = process.env.GROUP_ID;
const THING_NAME = process.env.AWS_IOT_THING_NAME;
const THING_ARN = process.env.AWS_IOT_THING_ARN;

(topic = "gg/message"),
(payload = JSON.stringify({ message: util.format("ping") }));

function greengrassHelloWorldRun() {
   mqtt.MqttClientConnection.prototype.publish(topic, payload);
  }
  console.log(topic);
    console.log(payload);

 setInterval(greengrassHelloWorldRun, 5000);

  exports.handler = function (event, context) {
   console.log("event: " + JSON.stringify(event));
  console.log("context: " + JSON.stringify(context));
  };

我收到有关参数和 NAPI 的错误。

将此函数用作 greengrass 日志中的 lambda 组件时也会出现相同的错误

也许有人有一些示例如何使用带有 sdk v2 的 Node lambda 发布有关主题的一些消息。

4

2 回答 2

0

克里斯托弗·塔尔

我还在使用适用于 JS 的 Greengrass SDK,实际上它们仍在进行中。但我能够IoTCore使用 JS SDK 向 Greengrass 发送消息。有几点要提:

  • 您似乎使用的aws-iot-device-sdk-v2是用于things
  • npm包aws-greengrass-core-sdk是为components

区分事物和组件并决定谁在做什么是很重要的。

要从事物发送数据IoTCore,您确实需要使用 MQTT。在 Greengrass 控制台的部署页面上,您需要修改部署并添加以下组件:

这样,您的事物通过客户端设备身份验证组件连接到本地 MQTT 代理,并且 MQTT 桥决定如何路由流量。您可以阅读上面链接中的所有信息。

mqtt我什至使用标准的npm 包实现了这一点。您需要使用 lambda 或控制台创建证书和事物,并使用这些证书来访问代理。

const mqtt = require('mqtt')
const fs = require('fs')

const ca = fs.readFileSync(locationOfTheCA)
const key = fs.readFileSync(locationOfThePrivateKey)
const cert = fs.readFileSync(locationOfTheCertificate)
console.log('Welcome to MQTT Connector')
const client  = mqtt.connect('mqtts://localhost:8883', {
  clientId: 'yourThingNameHere',
  ca: ca,
  key: key,
  cert: cert
})

client.on('connect', function () {
    console.log('Connected to MQTT')
    /* client.subscribe('$aws/*', function (err) {
    if (!err) {
      //client.publish('presence', 'Hello mqtt')
    }
  })*/
})

client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})

希望这可以帮助你!温暖的问候

哈科尔

于 2022-03-04T08:59:45.433 回答
0

联系 AWS Support 后,我​​知道这是不可能的。

AWS 尚不支持mqttProxy IPCSDK V2 JS。

于 2022-03-01T08:35:02.580 回答