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)
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 权限。
归档时间: |
|
查看次数: |
13909 次 |
最近记录: |