IFTTT具有快速,轻松连接设备的巨大潜力。 它已经缺少了一段时间,它具有发送和接收通用HTTP GET和POST请求的功能。 如果您想将IFTTT用于某些用途,则必须由IFTTT定义其特定用途,并将其发布在其频道内的站点上。 也就是说,直到现在!
IFTTT最近发布了Maker Channel 。 这正是开发人员一直在等待的! 它使您可以定义在收到HTTP请求时触发的触发器,以及可以向定义的位置发出HTTP请求的操作。 这打开了IFTTT几乎可用于任何东西。 现在,这完全取决于开发人员社区的想象力。
为了展示Maker通道的功能,我们将设置一个简单的Arduino,以通过Node.js与IFTTT来回通信。 为了尝试将触发器发送到IFTTT,我们将通过Arduino供电的电灯开关打开和关闭LIFX灯泡。 要尝试执行IFTTT Maker操作,我们将RGB LED连接到我们的Arduino,只要在Twitter上提及我们,它就会随时更改颜色。 不喜欢Twitter或没有LIFX灯泡? 完全不是问题,用IFTTT上的其他按钮切换动作/触发。 使用Facebook频道而不是Twitter,或者在手机上而不是灯泡上触发操作。 修补这很有趣。
如果您是IFTTT的新手,那么我以前在我的文章“ 使用IFTTT将LIFX灯泡连接到IoT”中介绍了基础知识。 本文假定您了解触发器和操作的所有知识,现在可以将其带入新的高度!
编码
如果您热衷于直接学习代码并进行尝试,可以在GitHub上找到它。
这将如何工作
我们将要有一个本地Node.js服务器,该服务器运行通过USB连接的Arduino。 按下Arduino设置上的按钮将触发一个向IFTTT的HTTP请求,告诉它切换我们的LIFX指示灯。 我们的Node.js服务器还将运行Express来处理所有传入的HTTP请求。 每当IFTTT在Twitter上看到新的提及我们时,它都会向我们的服务器发出POST请求,以触发Arduino的LED。
我们的Arduino素描
我们将连接一个简单的按钮和RGB LED到Arduino。
设置制作者频道
首先,我们需要转到IFTTT上的“ 制作者频道 ”,然后点击“连接”。 设置完成后,您将看到一个如下所示的屏幕:
在此屏幕上,它提供了您需要通过HTTP命令触发IFTTT操作的密钥。 当然,您不仅需要按键,还需要更多信息,我们需要一个POST URL才能触发操作。 要找到此内容,请单击“如何触发事件”链接。 它将打开一个页面,其中包含您要使用的URL,并附带了密钥。
我们将用于LIFX灯泡的URL如下所示: http://maker.ifttt.com/trigger/light_switch/with/key/{{yourkeyhere}}
://maker.ifttt.com/trigger/light_switch/with/key/ http://maker.ifttt.com/trigger/light_switch/with/key/{{yourkeyhere}}
yourkeyhere http://maker.ifttt.com/trigger/light_switch/with/key/{{yourkeyhere}}
。 表示light_switch
的URL部分是我们的事件名称。 我们在将我们的IFTTT配方组合在一起时会用到它。 如果您不触发LIFX灯泡,请选择一个与您的事件更加匹配的名称。
使用制作者触发器切换IFTTT
我们的Maker频道已启用,随时可以使用。 我们将开始研究如何切换IFTTT动作–使用Arduino的按钮来打开和关闭LIFX灯泡。
制作食谱本身非常简单:
- 我们转到IFTTT上的“ 创建新食谱”页面。
- 选择“制造商”作为我们的触发频道。
- 点击“接收网络请求”作为我们的触发类型。
- 输入我们的事件名称
light_switch
。 - 选择“ LIFX”作为我们的行动渠道。
- 单击“切换开/关灯”作为我们的操作类型。
- 选择我们要影响的LIFX灯。
- 给配方命名,然后单击“创建配方”!
在我们的Node.js代码中,我们使用johnny-five
访问Arduino。 当电路板准备就绪时,我们在btn
变量中定义连接到引脚7的按钮:
board.on('ready', function() {
console.log('Board ready');
btn = new five.Button(7);
在板的ready
事件中,我们为按钮的down
事件设置了一个监视。 如果我们检测到该按钮已被按下,我们会将单击该日志记录到控制台以进行调试(在面包板上的电线松动或沿这些方向走动的情况下,拥有这些控制台日志可以节省很多时间!)。 然后,我们使用npm模块request
对上面找到的URL进行HTTP POST请求。 成功后,我们还会获得控制台日志以用于调试。
btn.on('down', function(value) {
console.log('Light toggle pressed.');
request.post({
url: 'http://maker.ifttt.com/trigger/light_switch/with/key/{{yourkeyhere}}'
}, function(error, response, body) {
console.log('Body response was ', body);
console.log('Error was ', error);
});
});
运行代码后,当我们单击按钮并且请求成功时,它应该打开和关闭我们的LIFX灯泡! IFTTT将返回一个很好的消息,在我们的console.log中看起来像这样:
Body response was Congratulations! You've fired the light_switch event
这是非常简单的放在一起,但有很大的潜力。
需要注意的一件事–如果要通过HTTPS调用IFTTT服务,则也需要一台安全的HTTPS服务器。 使用本地测试服务器时出现错误,因此它可能需要具有未自签名的证书。
响应IFTTT触发器
现在,我们可以通过Node.js和Arduino触发IFTTT操作。 让我们看看如何以相反的方式做事-使我们的Arduino响应IFTTT触发器。 每当在Twitter上被提及时,我们都将设置IFTTT告诉我们的Node.js服务器和Arduino。
我们以另一种方式组合了配方:
- 我们转到IFTTT上的“ 创建新食谱”页面。
- 选择“ Twitter”作为我们的触发渠道。
- 单击“新提及您”作为我们的触发类型。
- 点击“创建触发器”。
- 选择“制造商”作为我们的行动渠道。
- 点击“提出网络请求”作为我们的操作类型。
- 输入您的POST请求设置(我们将在下面介绍),然后单击“创建操作”!
带有我们的HTTP请求设置的屏幕如下所示:
- 为您的节点服务器输入可公开访问的URL。 我个人使用ngrok来测试所有这些。 我在“ 从任何地方访问Localhost”的文章中介绍了如何使用ngrok和类似的服务。 选择POST作为方法(如果您愿意,GET请求也应该起作用)。
- 为内容类型选择“ application / json”,因为我们的节点服务器将期望接收JSON。
- 最后,加入我们要发送的JSON消息。 我放下
{"color":"#55acee", "text":Text}
。#55acee
是我在Twitter的鸟吉祥物中发现的颜色,因此我认为这是最合适的选择! -
Text
是由IFTTT动态填充的字段,其中包含来自发现您的推文中的文字。 这些字段称为IFTTT成分。 我们实际上并没有使用它来更改我们的LED颜色,但我想在其中包含IFTTT成分以展示其完成方式。 - 要将成分添加到JSON中,请单击body字段以输入JSON字符串,然后您会在右侧找到一个试管图标。 如果单击它,将打开一个菜单,您可以从中选择要包括的字段:
在Node代码中,我们设置了LED,以便我们的johnny-five
模块知道这一点,并设置了服务器以侦听该POST请求。 它将通过更改我们的LED做出响应。
在电路板的ready
事件中,我们将LED定义为连接到led
变量中的引脚9、10和11,如下所示:
led = new five.Led.RGB([11,10,9]);
由于引脚从11向下计数而不是向上计数,因此代码看起来可能很奇怪。 这样做的原因是,我希望自己的接线在Arduino板上自上而下依次为红色,绿色和蓝色(例如11、10和9)。
我们将其初始颜色设置为绿色:
led.color('#00ff00');
在板的ready
事件之外,我们使用express为/led
POST请求创建路由。 在此路由的回调函数中,我们获取req.body
内部从IFTTT发送的JSON数据,并在req.body
找到color
键。 我们将该颜色赋予johnny-five
的led.color()
函数,以将我们的LED的颜色更改为所给的颜色。 我们也将JSON数据记录在控制台中。
app.post('/led', function (req, res) {
var response = req.body;
console.log('Response was ', response);
led.color(response.color);
res.send('LED request successful!');
});
注意事项–如果将其放在可公开访问的服务器上,该服务器不仅可以用于测试,还可以使用,那么我建议您检查提供的JSON数据实际上是一种颜色,并且是合法请求。
如果您先运行Node服务器,然后在帐户上收到一条推文,则过了一会儿(这并不是立即发生的,因为IFTTT有时需要从Twitter刷新该信息),您的LED指示灯应呈Twitter蓝色! 在console.log
,您应该看到类似以下内容:
Response was { color: '#55acee', text: '@thatpatrickguy WOO HOO' }
然后,如果您沿相同的路线设置不同颜色的各种其他服务,则可以进行多种LED颜色更改!
结论
对于能够发送和接收HTTP请求的任何启用Internet的技术的制造商而言,拥有IFTTT生态系统及其所有渠道都是巨大的。 尽管我们已经能够做很长一段时间了,例如将Twitter API包含到Node.js应用程序中,但是这在API中提供了广泛的可能性,该API更加易于使用并且具有令人难以置信的模块化性。 切换Twitter进行其他操作,一切只需进行一些调整就可以正常工作!
如果您从本指南中创建了一些非常整洁的IFTTT制作者频道,请在评论中留下说明,或者在Twitter( @thatpatrickguy )上与我联系,我想看看!
From: https://www.sitepoint.com/connecting-the-iot-and-node-js-to-ifttt/