将IoT和Node.js连接到IFTTT

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。

按钮和RGB LED草图

设置制作者频道

首先,我们需要转到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灯泡。

制作食谱本身非常简单:

  1. 我们转到IFTTT上的“ 创建新食谱”页面。
  2. 选择“制造商”作为我们的触发频道。
  3. 点击“接收网络请求”作为我们的触发类型。
  4. 输入我们的事件名称light_switch
  5. 选择“ LIFX”作为我们的行动渠道。
  6. 单击“切换开/关灯”作为我们的操作类型。
  7. 选择我们要影响的LIFX灯。
  8. 给配方命名,然后单击“创建配方”!

在我们的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。

我们以另一种方式组合了配方:

  1. 我们转到IFTTT上的“ 创建新食谱”页面。
  2. 选择“ Twitter”作为我们的触发渠道。
  3. 单击“新提及您”作为我们的触发类型。
  4. 点击“创建触发器”。
  5. 选择“制造商”作为我们的行动渠道。
  6. 点击“提出网络请求”作为我们的操作类型。
  7. 输入您的POST请求设置(我们将在下面介绍),然后单击“创建操作”!

带有我们的HTTP请求设置的屏幕如下所示:

发出IFTTT JSON请求

  1. 为您的节点服务器输入可公开访问的URL。 我个人使用ngrok来测试所有这些。 我在“ 从任何地方访问Localhost”的文章中介绍了如何使用ngrok和类似的服务。 选择POST作为方法(如果您愿意,GET请求也应该起作用)。
  2. 为内容类型选择“ application / json”,因为我们的节点服务器将期望接收JSON。
  3. 最后,加入我们要发送的JSON消息。 我放下{"color":"#55acee", "text":Text}#55acee是我在Twitter的鸟吉祥物中发现的颜色,因此我认为这是最合适的选择!
  4. Text是由IFTTT动态填充的字段,其中包含来自发现您的推文中的文字。 这些字段称为IFTTT成分。 我们实际上并没有使用它来更改我们的LED颜色,但我想在其中包含IFTTT成分以展示其完成方式。
  5. 要将成分添加到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-fiveled.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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值