Amazon Dash Button でSlackにデータを送信する

  • 5
    いいね
  • 1
    コメント

Amazon Dash Buttonのハックが流行ってますね。
- Amazon Dash Buttonを(正しくない方向で)使ってみた
- Amazon Dash ButtonをただのIoTボタンとして使う

面白そうです。
わたしもこれらのサイトを参考にさせていただきながらやってみました。

ボタンを押したら、Slackに通知がくるようにする

result.png

たとえば子供が家に帰ったらフルグラのボタンを押させると、Slackに通知が来る、みたいなそんな使い方ができそうです。

構成

環境.png

家のLANにぶら下がったAmazon Dash Buttonと、そのボタン押下をフォークするdash-buttonというライブラリを起動してあるラズパイ(同じく家のLANにぶら下がっている)、でホントは直接Wehbook飛ばせばいいんでしょうけど、今回はIFTTTも使ってみたかったので、IFTTTの Maker ChannelでラズパイからのRequestをうけて、それをトリガーにSlackに通知してみました。

環境構築

Raspberry Pi に Node.js v6.9.1 がインストールされてる環境で試してます。Node.jsのインストールまではこんな感じ。

$ sudo apt-get install -y nodejs npm
$ node --version
v0.10.29

$ sudo npm cache clean
$ sudo npm install n -g
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
n@2.1.4 /usr/local/lib/node_modules/n
$ sudo n 6.9.1
$ node --version
v6.9.1
$ sudo apt-get install libpcap-dev

Node.jsのバージョン管理には n だったり nodebrew だったりいろいろあるようですが、今回は n を使いました。

dash-buttonのセットアップ

Dash Button for Node をインストールします。基本的にこの作者のサイトに従って、

npm init

で適当にプロジェクトを作成し、

npm install  --save dash-button

でモジュールのインストールは完了。続いて、作成されたpackage.jsonの一部を下記のように書き換えておきます。

package.json
 "scripts": {
   "scan": "dash-button scan"
 }

あとは下記のコマンドで、同一ネットワーク上のAmazon Dash Buttonを探しに行く処理が動き出します。

pi@raspberrypi:~/adb $ sudo npm run scan

> adb@0.0.0 scan /home/pi/adb
> dash-button scan

Scanning for DHCP requests and ARP probes on wlan0...
Detected a DHCP request or ARP probe from xx:xx:xx:xx:xx:xx
Detected a DHCP request or ARP probe from xx:xx:xx:xx:xx:xx

Amazon Dash Buttonのボタンを押すと、ボタンがLANに接続しにいく際に、ボタンのMacアドレスがネットワークを流れます。で、それを検知する仕組みになってるようです。

上記のようにMacアドレスが表示されれば、環境としては完成っぽいですね。

IFTTTのMaker Channelへイベントを送る

npm install  --save request

でHTTPのリクエストを投げるライブラリをインストールしておきます。

IFTTTのMaker Channelへリクエストを送るコードは以下のようにしました。

index.js
const DashButton = require('dash-button');
const DASH_BUTTON_MAC_ADDRESS = 'xx:xx:xx:xx:xx:xx'; //←検知されたMacアドレス。小文字で。

let button = new DashButton(DASH_BUTTON_MAC_ADDRESS);


const request = require('request');
const url = 'https://maker.ifttt.com/trigger/{event}/with/key/{your key}'
const headers = {
    'Content-Type': 'application/json'
}

const options = {
    url: url,
    method: 'GET',
    headers: headers,
    json: true,
    form: {"value1": "フルグラボタンが押されました!", "value2": "bb", "value3": "cc"}
}

console.log('listen...');
let subscription = button.addListener(function () {
    console.log('Clicked.. ' + new Date());

    request(options, function (error, response, body) {
        if (!error) {
            console.log(body);
        }
    });
});

下記のコマンドで起動しておきます。

sudo node index.js

Amazon Dash Buttonのボタンを押下すると、登録されたイベントハンドラが動き出し、IFTTTのMaker Channelへリクエストを送信します。Maker Channelは送信時にイベント名を指定しますが、そのイベント名は上記では{event}とプレースホルダのままです。実際は好きな値を設定しておきましょう。

IFTTT の設定。

IFTTT側は、this を Maker Channelにして、thatをSlackにしたレシピを作成します。

具体的には下記の通りです。

this の設定

右上のアイコン部分から New Applet を選択し、this には Makerを選択します。
this.png

さて作成する際には受信待ちするイベント名を指定しますが、その値は先ほど{event}に実際に設定した値を指定しておきます。

this_result_pre.png

以上で thisの設定はおしまいです。さきほどのラズパイからのリクエストを待ち受ける側が完成しました。

this_result.png

↑完成です。。

thatの設定

つづいてthatの設定つまり、Slackを設定していきます。Slackを検索して、、
that.png

送信したいチャンネルや、送信する際のメッセージなどを指定します。
that_result_pre.png

以上で設定完了です。
that_result.png

疎通確認する

ようやく疎通確認です。フルグラのボタンを押して、Slackに通知が来るか、それとも注文完了通知が来るかを確認します。

ビデオが開けなかった場合に表示されるテキスト

無事に、Slackに通知が来たようですね。。。