読者です 読者をやめる 読者になる 読者になる

きくらげ観察日記

好きなことを、適当に。

Amazon Dash Buttonが届いたのでとりあえずツイートボタンにしてみた

JavaScript

ついに我が家にもAmazon Dash Buttonが届きました。

f:id:cloudear8:20170111144526j:plain

そのまま使うのも面白くないので、npmのdash-buttonというライブラリを使ってツイートボタンにしてみたいと思います。

github.com


注意: dash-buttonはES2015の新文法をバリバリ使っているので、比較的新しめのnode.jsじゃないと動きません。この記事での動作環境は6.9.4ですが、それでもasyncやimport等が未対応なため、dash-buttonのドキュメントのサンプルはそのままでは動きません。

まずはdash-buttonとlibpcap-devをインストールします。

$ mkdir dash-button-example
$ cd $_
$ npm init
$ sudo apt install libpcap-dev
$ npm install --save dash-button

dash-buttonのドキュメントにある通り、package.jsonの"scripts"の値に"scan"を追加します。

{
  "scripts": {
    "scan": "dash-button scan"
  }
}

そして以下のコマンドを実行すると、Dash ButtonのMACアドレスをスキャンすることができます。

$ sudo npm run scan

上のコマンドを実行した状態で、Dash Buttonの設定を行います。
メニューの「アカウントサービス」から、「Dash端末」の「新しい端末をセットアップ」を選びます。

f:id:cloudear8:20170111145813p:plain

後は画面の指示に従うだけです。無線LANの設定が終わり、商品選択画面になったらXボタンで閉じるなりアプリを終了するなりしましょう。もし間違えて商品を選択してしまうと、動作確認にボタンを1回押す毎にサントリー天然水が1ケース届いてしまい悲惨なことになります。

無線LANの設定が終わったら、コンソールにDash ButtonのMACアドレスが表示されているはずです。

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

これを確認して、Ctrl+Cなどで実行を終了します。

以上で準備は完了です。とりあえず適当にコードを書いてみましょう。

var DashButton = require('dash-button');

const MAC_ADDR = '先ほどのMACアドレス';

var button = new DashButton(MAC_ADDR);

button.addListener(() => {
    console.log('button pushed');
});

実行

$ sudo node main.js
(ここでボタンを押す)
button pushed

Dash Buttonの押下を検知できていることが確認できました。

これだけでは面白くないので、twitterライブラリを使ってツイートボタンにしてみました。

$ npm install --save twitter
var DashButton = require('dash-button');
var Twitter = require('twitter');

const MAC_ADDR = '(MACアドレス)';

var button = new DashButton(MAC_ADDR);
var client = new Twitter({
    consumer_key: 'CONSUMER KEY',
    consumer_secret: 'CONSUMER SECRET',
    access_token_key: 'ACCESS TOKEN',
    access_token_secret: 'ACCESS TOKEN SECRET'
});

button.addListener(() => {
    const date = new Date();
    client.post('statuses/update',
                { status: `Dash Buttonが押されました。時刻: ${date}` },
                (err, tweet, resp) => {
                    if (err) {
                        console.log(err);
                    } else {
                        console.log('tweeted');
                    }
                });
});

これを実行した状態でDash Buttonを押すと、実際にツイートできているのが確認できます。

f:id:cloudear8:20170111165442p:plain