Amazon Dash Buttonでおうちハックの準備

##ADB買ってみた
Amazon Dash Buttonといういいおもちゃが発売されたので、買ってみました。
おうちハックといいながらも、まずは接続して検知するところまで。
そういえば、海外で買ったDashButtonは、その地域のアカウントでWi-Fi接続設定が必要みたいですね。
アプリは同じもので、「.com」アカウントに切り替えられるみたいです。
グローバル対応がすごい！！

幸いにも[先人たちがたくさんいらっしゃる](http://qiita.com/tags/AmazonDashButton)ので、
コマンド打ちながら、試してみました。
主にはこちらの記事を参考に試しました。
[Amazon Dash Buttonを(正しくない方向で)使ってみた](http://qiita.com/takustaqu/items/8539b33780c9675c8657)

##動作環境
* iMac + macOS Sierra
* Node.js v7.3.0
* 無線LAN

##Dash ButtoｎをWi-Fiに接続する。
左上のメニューから
→アカウントサービス
→Dash端末→新しい端末をセットアップ
からWifiに接続しましょう。
例によって、商品選択の画面で作業を中断。
これでDashButtonがWi-Fiにつながりました。

Wi-Fiに接続設定されているときのボタン押下は白、
Wi-Fiに接続中が青、
Wi-Fiに接続されていないときボタン押下は赤。みたいな挙動でした。

##MacにNode.jsをインストールする
恥ずかしながら、我が家のiMacには、Node.jsが入っていなかったので、そこからスタート。

###1.Nodebrewをインストールする
```
$ curl https://raw.githubusercontent.com/hokaccha/nodebrew/master/nodebrew | perl - setup
$ nodebrew help
nodebrew 0.9.6

Usage:
    nodebrew help                         Show this message
    nodebrew install <version>            Download and install <version> (compile from source)
    nodebrew install-binary <version>     Download and install <version> (binary file)
    nodebrew uninstall <version>          Uninstall <version>
(省略)
```

###2.node.jsをインストールする
nodebrewをアップデートして、最新版をインストールします。
こちらを参考にしました。
[Macにnodebrew（node.js, npm）をインストールする手順](http://qiita.com/oreo3@github/items/622fd6a09d5c1593fee4)

自分は、ここinstallでめっちゃ時間がかかるので、放置していたのですが、
途中でiMacから確認画面が表示されてて、後続の処理が落ちてました。
どうやら、C+?C++?インストールでだめだったみたい。
再実行で大丈夫でした。

```
$ nodebrew selfupdate       //nodebrewをアップデートする
$ nodebrew install latest   //最新版のnode.jsをインストールする。
$ nodebrew use latest       //最新版のnode.jsを使用する
$ node -v
v7.3.0
$ npm -v
4.0.5
$ npm install -g npm        //npmをアップデート
```

##DashButtonのインストール

```
$ npm init
$ npm install --save dash-button
$ npm install date-utils
```
npm initでいろいろ聞かれるけど、全部空白にしてしまった。
調べてからコマンド発行しろよというかんじですが、
[ここ](http://qiita.com/sinmetal/items/395edf1d195382cfd8bc)を参考にさせてもらって、プロジェクト作成コマンドみたいです。
ああ、ホームディレクトリでinitしたから、ホームディレクトリにpackage.jsonが作成されたのですね。

ついでにdate-utilsもインストールしておきましょう。

##DashButtonの設定
上述の通り、initすると、package.jsonが生成されます。
installすると、dependencyが追記されるんでしょう、きっと。←
作成されたjsonファイルを

```
$ vim package.json
{
  "name": "user",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dash-button": "^2.0.1"
  }
}
```

から

```
$ vim package.json
{
  "name": "user",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "scan": "dash-button scan"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dash-button": "^2.0.1"
  }
}
```

へと書き換えます。
そして、scanを実行して、mac アドレスを取得しましょう。

```
$ sudo npm run scan
Password:

> user@1.0.0 scan /Users/user
> dash-button scan

Scanning for DHCP requests and ARP probes on en1...
Detected a DHCP request or ARP probe from f0:27:2d:89:38:e2
Detected a DHCP request or ARP probe from f0:27:2d:89:38:e2
Detected a DHCP request or ARP probe from f0:27:2d:05:c0:f4
```

手元にある2つのボタンを押したので、無事に2種類のマックアドレスが見えています。
これをメモしておきます。

## app.jsを作成して、起動させてみる。
先程までで下準備は終了です。

さっそくapp.jsを作成し、起動させてみましょう。
これも先人たちの知恵を借りました。ありがとうございます。

```js:app.js
require('date-utils');
const DashButton = require("dash-button");

const PHY_ADDR1 = "f0:27:2d:89:38:e2";
const PHY_ADDR2 = "f0:27:2d:05:c0:f4";

let button1 = new DashButton(PHY_ADDR1);
let button2 = new DashButton(PHY_ADDR2);

console.log("----Setup Start----")

let i = 0;

// 1つ目のボタン設定
button1.addListener(() => {
  var dt = new Date();
  console.log("button1 is  working."+dt.toFormat("YYYY/MM/DD HH24:MI:SS"));
});
console.log("----setup button1 complete----")

// ２つ目のボタン設定
button2.addListener(() => {
  console.log("button2 is  working."+dt.toFormat("YYYY/MM/DD HH24:MI:SS"));
});
console.log("----setup button2 complete----")
console.log("----Listening Start----")
```

そして実行します。
ボタンが押された時刻を記載するようにしてみました。
ですが、sudoじゃないとExceptionが発生。

```
$ sudo node ./app.js
----Setup Start----
----setup button1 complete----
----setup button2 complete----
----Listening Start----
button1 is  working.2016/12/24 11:35:21
```

とりあえず、無事にdash button のListenが実装できておりました。
簡単にサービスにリクエストとかも実装できそう。
やはりタイムラグがあるので、どんなおうちハックをするか。。。