0%

IFTTTからBeagleBone BlackのCylon.jsでMQTTを受信する

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にブリッジできるようにしました。

~/docker_apps/ifft/app.js
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モジュールをインストールします。

~/node_modules/orion/.workspace/cylonjs/package.json
{
"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してメッセージを表示するだけの簡単なプログラムを書きます。

~/node_modules/orion/.workspace/cylonjs/app.js
/*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"}