如何在Amazon AWS Lambda函数中发布到MQTT主题?

mat*_*_55 10 publish amazon-web-services mqtt aws-lambda

我希望有一个简单的命令,就像我在bash中使用的那样,在AWS Lambda函数内的MQTT上发布一些主题.沿着这条线:mosquitto_pub -h my.server.com -t"light/set"-m"on"

背景:我想用Alexa打开和关闭一盏灯.Alexa可以启动一个Lambda函数,在这个Lambda函数内部我想开始一个MQTT发布,因为灯可以监听MQTT主题并对那里的消息作出反应.(也许有更简单的解决方案,但我们在复杂(大学)网络使许多其他方法更加困难)

小智 20

如果您使用的是Python,我可以使用AWS Lambo函数在我的处理函数中使用以下内容向AWS IoT发布消息:

import boto3
import json

client = boto3.client('iot-data', region_name='us-east-1')

# Change topic, qos and payload
response = client.publish(
        topic='$aws/things/pi/shadow/update',
        qos=1,
        payload=json.dumps({"foo":"bar"})
    )
Run Code Online (Sandbox Code Playgroud)

您还需要确保该角色(在你的LAMBDA功能配置)的连接,以允许访问物联网发布功能的策略.在IAM - > Roles下,您可以为Lambda函数添加内联策略,如:

{
   "Version": "2016-6-25",
   "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "iot:Publish"
        ],
        "Resource": [
            "*"
        ]
    }
   ]
}
Run Code Online (Sandbox Code Playgroud)


dpu*_*ton 8

AWS 开发工具包有两个用于 IoT 的类:Iot 和 IotData。IotData.publish是您正在寻找的方法。看起来 Iot 对象用于处理事物,而 IotData 用于处理 MQTT 和阴影。这应该在关于 MQTT 和阴影的文档中直接引用,但事实并非如此。

此服务 (IotData) 也可在 CLI 中使用


小智 6

如果您使用的是 Node.js,这将起作用-

var AWS = require('aws-sdk');
var iotdata = new AWS.IotData({ endpoint: '*****************.iot.us-east-1.amazonaws.com' });

exports.handler = async(event) => {
    console.log("Event => " + JSON.stringify(event));
    var params = {
        topic: "MyTopic",
        payload: JSON.stringify(event),
        qos: 0
    };

    return iotdata.publish(params, function(err, data) {
        if (err) {
            console.log("ERROR => " + JSON.stringify(err));
        }
        else {
            console.log("Success");
        }
    }).promise();
};
Run Code Online (Sandbox Code Playgroud)

请记住为此 lambda 函数使用的角色添加 iot:publish 权限。