amazon dash buttonを使ってデータの蓄積

#開発前提
・node.js のインストールが完了していること。
・mysqlのインストールが完了していること。

#開発環境
mac os x Sierra 10.12.2
node.js v6.2.0
mysql 5.7.16

#概要
技術者として、何かIoTに絡んだものを作ってみたいと思っていた矢先
先日　amazon dash buttonが発表されました。
発売されてから、数週間たった時点でdash buttonをハックしている
技術者の方たちがいたので私も挑戦しました。

参考として以下の皆様のを元に実施しております。ありがとうございます。
・http://qiita.com/takustaqu/items/8539b33780c9675c8657
・http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4

#開発のゴール
・amazon dash button　からの通知をキャッチしてDBとの接続を行う。

#手順
1．amazon dash buttonのセットアップ（wifiへの接続）
2．amazon dash buttonの通知を受けるためのライブラリのインストール
3．mysqlでテーブルの作成とデータの作成
4．node.jsによるpush通知の取得及びDBへの接続

#作業

##1. amazon dash butonのセットアップ
ここは大部分は、amazonサイトを参考に作成します。
(すみません。サイトURLが長すぎたので記載やめました。Google先生へ聞けばOKです。)

ここで注意する部分は、皆さんのサイトでも記載されている
最後までbuttonのセットアップを完了させないこと。
上記の手順の中では、「5．Dash ButtonをWi-Fiに接続します。 」まで
完了したらそれ以降は「✕」ボタンを押して途中でやめます。


<img width="320" alt="fullsizeoutput_1.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/154145/46aa0c9a-9b6c-282c-326b-37dbff8da8a6.jpeg">

##2．amazon dash buttonの通知を受けるためのライブラリのインストール

amazon dash buttonの通知を受けるためのライブラリをインストールします。
参考サイト確認して簡単に導入できそうなものを探した結果
ライブラリはDash Button for Nodeにしました。

まず、node.jsのプロジェクトを管理するための初期設定ファイルを作成します。
`$ npm init`

上記のコマンドにより、package.jsonが作成されます。
（対話形式の入力になりますが、全てEnterで進めると以下のファイルが作成される）

```package.json
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
```

上記ファイルの
 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },

の部分は、以下に修正してください。
 "scripts": {
      "scan": "dash-button scan"
  },

その後にnpmでamazon dash buttonのライブラリを導入します。
`$ npm install --save dash-button`

導入が完了したら、以下コマンドでamazon dash buttonのMACアドレスを取得しておきます。（ARP probe fromの後のものになりますのでメモっといてください。）
`$ sudo npm run scan`

#mysqlでテーブルの作成とデータの作成
すみません。今回は、mysqlのインストールとユーザの作成とかパスワードの設定は省略致します。

//Database作成
mysql > create database product01;

//このデータベースを利用する
mysql > use product01;

//tableの作成　ユーザ認証テーブル
mysql >  create table auth_users(
group_id varchar(4),
user_code varchar(4),
auth_flg char(1),
primary key(`group_id`, `user_code`)
);

//データインサート
mysql > insert into auth_users values (1,1000,'0');

#node.jsによるpush通知の取得及びDBへの接続
package.jsonやnode_modulesが置いてある場所に移動してください。
　
以下、DBへ接続するためのコネクションの環境設定ファイルと実際のmysqlとのコネクションを作成します。

```mysqlConnection.js
 var mysql = require('mysql');
 var dbConfig = {
       host: 'localhost',
       user: 'xxxxxx',
       password: 'xxxxxx',
       port: 3306,
       database: 'product01'
 };
  var connection = mysql.createConnection(dbConfig);
  module.exports = connection;
```

次はデータをSELECTするための関数を作成する。
コネクションの作成は、queryの処理に任せる。
逆にあると、連続でpush通知した際にエラーになります。

```authUsers.js

var connection = require('./mysqlConnection.js');

module.exports = {
   getData : function(){
       //connection.connect();
       connection.query('SELECT * from auth_users;', (err, rows, fields) => {
       if (err) throw err;
        console.log('Auth Data: ', rows);
       });
      //connection.end();
    }
}
```

以下、実際に起動するファイルを作成する。
XX:XX 〜の部分は、MACアドレスを入力してください。

```dash-button.js

const DashButton = require("dash-button");
var db = require('./authUsers.js');

const PHY_ADDR = "XX:XX:XX:XX:XX:XX";

let button = new DashButton(PHY_ADDR);

console.log("I'm listening'")
let i = 0;
button.addListener(() => {
       console.log("["+(i++)+"] push arrive!.");
       console.log(db.getData());
});
```

プログラム実行

`$ sudo node dash-button.js`

##実行結果
上手く行ったー！と思いきやundefindにやられてしまってる。。
調べたり質問させていただいたりしましたが解決せず。。。。
一応、dash buttonの通知を受けてデータの取得まで完了しました。
どなたか、undefind　の解決方法わかればリクください（笑）

<img width="637" alt="スクリーンショット 2016-12-25 17.08.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/154145/6bfe7e8c-330b-bd6f-925c-a65701bd4c7b.png">