1. Qiita
  2. 投稿
  3. Node.js

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

  • 1
    いいね
  • 0
    コメント

開発前提

・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に接続します。 」まで
完了したらそれ以降は「✕」ボタンを押して途中でやめます。

fullsizeoutput_1.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 の解決方法わかればリクください(笑)

スクリーンショット 2016-12-25 17.08.35.png