LoginSignup
1

More than 5 years have passed since last update.

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

Posted at

開発前提

・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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1