開発前提
・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に接続します。 」まで
完了したらそれ以降は「✕」ボタンを押して途中でやめます。
2.amazon dash buttonの通知を受けるためのライブラリのインストール
amazon dash buttonの通知を受けるためのライブラリをインストールします。
参考サイト確認して簡単に導入できそうなものを探した結果
ライブラリはDash Button for Nodeにしました。
まず、node.jsのプロジェクトを管理するための初期設定ファイルを作成します。
$ npm init
上記のコマンドにより、package.jsonが作成されます。
(対話形式の入力になりますが、全てEnterで進めると以下のファイルが作成される)
{
"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とのコネクションを作成します。
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通知した際にエラーになります。
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アドレスを入力してください。
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 の解決方法わかればリクください(笑)