IFTTTにYoをして任意のWebhookで通知を受け取ることができました。次はYoをトリガーにしてMQTTブローカーにメッセージをpublishします。手元にあるBeagleBone BlackのCylon.jsのMQTT Driverでsubscribeしてみます。
Webhook
RequestBinにフォワードしたWebhookのコードを修正してMQTTのpublishを追加します。webhookはExpressのミドルウェアなのでapp.jsは普通のExpressとして使えます。webhookに加えて通常のGETリクエストでもMQTTのpublishにブリッジできるようにしました。
var express = require('express')
, mqtt = require('mqtt')
, webhook = require('express-ifttt-webhook');
var client = mqtt.connect('mqtt://admin:password@10.3.0.230:1883');
var app = express();
app.set('port', 8080);
var mqtt_publish = function(json) {
client.publish('ifttt/bbb',JSON.stringify(json), function(){
console.log("Message is published");
});
}
app.get('/', function(req, res) {
var json = {"message": req.param('message')};
mqtt_publish(json);
res.send("Message received");
});
app.use(webhook(function(json,done){
mqtt_publish(json);
}));
var server = app.listen(app.get('port'), function() {
console.log('Server listening on port', server.address().port);
});
BeagleBone Black
BeagleBone BlackにはNode.jsをインストールしてあります。Eclipse Orionを起動してブラウザでコーディングをしていきます。BeagleBone Blackの操作はCylon.jsを使います。
Chromebook
BeagleBone BlackはHP Chromebook 11にUSB-Ethernet接続しています。Chromebookから電源供給とインターネット接続をします。
Cylon.js
Cylon.jsはマルチプラットフォームに対応したデバイス操作用のフレームワークです。Platformsのページを見るとIoT関連で使いたいデバイスやサービス、プロトコルがほとんどあります。
最初にpackage.jsonを記述して必要なnpmモジュールをインストールします。
{
"name": "cylon-test",
"version": "0.0.1",
"private": true,
"dependencies": {
"cylon-beaglebone": "*.*.*",
"cylon-mqtt": "*.*.*",
"mqtt": "*.*.*"
},
"scripts": {"start": "node app.js"}
}
Cylon.jsのMQTT Driverのページにあるサンプルを参考にします。MQTTをsubscribeしてメッセージを表示するだけの簡単なプログラムを書きます。
/*eslint-env node */
var Cylon = require('cylon');
Cylon.robot({
connections: {
server: { adaptor: 'mqtt', host: 'mqtt://xxx.xxx.xxx.xxx:1883' },
beaglebone: { adaptor: 'beaglebone' }
},
work: function(my) {
my.server.subscribe('ifttt/bbb');
my.server.on('message', function (topic, data) {
console.log(topic + ": " + data);
});
}
}).start();
テスト
BeableBone BlackにインストールしてあるEclipse OrionのShellを起動して必要なモジュールをインストールします。
$ npm install
インストールが終了したらnpm start
を実行してMQTTのsubscribeをします。AndroidのYoアプリからIFTTTにYoをすると、BeagleBone Blackでメッセージを受信して標準出力ができました。
$ npm start
> cylon-test@0.0.1 start /home/ubuntu/node_modules/orion/.workspace/cylonjs
> node app.js
I, [2015-02-18T06:53:22.388Z] INFO -- : Initializing connections.
I, [2015-02-18T06:53:24.595Z] INFO -- : Initializing devices.
I, [2015-02-18T06:53:24.608Z] INFO -- : Starting connections.
I, [2015-02-18T06:53:24.666Z] INFO -- : Starting devices.
I, [2015-02-18T06:53:24.669Z] INFO -- : Working.
ifttt/bbb: {"username":"username","password":"password","title":"Yo","description":"February 18, 2015 at 03:27PM<br>\nvia MA6ATO on Yo","categories":{"string":"http://requestb.in/pb4l5spb"},"tags":[{"string":"IFTTT"},{"string":"Yo"}],"post_status":"publish"}