2016-06-14 106 views
8

我想要一个简单的命令,就像我在bash中使用的那样,将某些内容发布到AWS Lambda函数中的MQTT主题上。沿着线: mosquitto_pub -h my.server.com -t“light/set”-m“on”如何在Amazon AWS Lambda函数中发布到MQTT主题?

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

回答

8

如果您正在使用Python,我能得到一个AWS lambda函数使用我的处理函数里面以下发布消息AWS物联网:

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"}) 
    ) 

您还需要确保角色(在您的Lambda函数配置中)具有附加的策略以允许访问IoT发布功能。在IAM - >角色,你可以添加一个内嵌的政策,像你的lambda表达式角色:

{ 
    "Version": "2016-6-25", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "iot:Publish" 
     ], 
     "Resource": [ 
      "*" 
     ] 
    } 
    ] 
} 
+0

感谢您的帮助罗伊。 最后,我们使用Ponte,通过发送给ponte的http请求退出了AWS lambda,然后将其转发给mqtt并将其发送给灯泡。 –

1

AWS的SDK有两个班,物联网的工作:物联网和IotData。 IotData.publish是你正在寻找的方法。它看起来像Iot对象用于处理事物,而IotData用于处理MQTT和阴影。这应该在关于MQTT和阴影的文档中直接引用,但事实并非如此。

此服务(IotData)也可用in the CLI

+1

感谢您的回答。它让我在正确的轨道上发布bash的事件:'aws iot-data publish --cli-input-json'{“topic”:“myTopic”,“qos”:0,“payload”:“{\ “myKey \”:54321,\“myOtherKey \”:12345“}''。有效载荷的键必须用双引号括起来并用反斜杠转义。 –

0

如果您使用Node.js,则需要安装mqtt库。以下步骤可帮助您下载并安装AWS Lambda上的mqtt库。

  1. Download and install Node.js and npm在您的PC上。

  2. Download MQTT library for node.js

  3. 将其解压到Node.js安装的nodejs目录中。 (在Windows 10 x64中,nodejs目录为C:\Program Files\nodejs

  4. 创建一个文件夹来存储安装的mqtt文件。例如,D:\lambda_function

  5. 运行命令以管理员身份提示,将目录切换到nodejs目录。

  6. 安装mqtt库到D:\lambda_function

    C:\Program Files\nodejs>npm install --prefix "D:\lambda_function” mqtt 
    

Here's a similar project