Amazon Dash Buttonとは
要はボタン押すだけでアマゾンの商品を注文できるボタン。ボタンが押されてから商品が届くまで、次の注文ができないので、連打は無効になっている。
ただし、なんでも注文できるわけではなく、洗剤やシャンプーなどの何回も買い替えが生じる消耗品が対象。1つのボタンに設定できるのは1商品だが、個数とか別の種類も選択可。アメリカでは2015年に発売されており、日本では2016年12月上旬に販売された。現時点(2016年12月10日)では、42種のボタンが販売されており、人気なものに関しては最長2ヶ月待ちとなっている。(AmazonDashButtonの購入ページ)
余談になるが、Amazonの最初の社名は「Cadabra.com」だったが、あるとき電話口で「Cadaver(死体の意)?」と聞き返されたため、社名を変更したという。
環境
・Mac OS Sierra 10.12.1
流れ
1.Finkのダウンロード
2.libp-capをapt-get
3.nodebrewインストール
4.Nodeをインストール
5.パッケージインストール
6.Dash Button Wifiスキャン
7.Deploy
環境構築
1.Finkのダウンロード
ライブラリを使うときにapt-getでインストールしたいので、Finkを使います。(apt-getしないでインストール出来る方法わかる方いたら、教えてください。。。)
ここから入手できます。
XCode
がすでに入ってるのであれば、インストールしたfinkのフォルダから、ターミナルで./bootstrap
と打つと、基本設定を行います。結構時間かかります。30分くらい?
2.libp-capをapt-get
こちらのページを参考に、ライブラリをapt-getします。
sudo apt-get install libpcap-dev
3.nodebrewインストール
nodeのバージョン管理として有名なのが、nvmとnodebrew.
今回はnodebrewを使って管理します。
別にnvmでも可能.
↓のコマンドを叩きます
$ curl -L git.io/nodebrew | perl - setup
すると、nodebrewのインストールが始まります。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
100 24340 100 24340 0 0 6400 0 0:00:03 0:00:03 --:--:-- 166k
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew
========================================
Export a path to nodebrew:
export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
.zherc
に上記のexporet~部分を記載
export PATH=$HOME/.nodebrew/current/bin:$PATH
設定を読み込み
$ source ~/.zshrc
これでnodebrewのインストールが完了されたはずです。nodebrew -help
とかで確認してみましょう。コマンド一覧みたいなのが出てきます。
4.Nodeをインストール
続いてNode.jsのインストールします。
nodebrew ls-remote
これで取得可能なnodeのバージョン一覧が出てきます。
インストール方法ですが、2通りあって、nodebrew install <Version>
またはnodebrew install-binary <version>
というコマンドで、後者のうほうが早かったりするので、後者でインストールしてみてください。
その他、最新版をインストールするときは、nodebrew install latest
、安定版をインストールするときはnodebrew install stable
とします。
その後、nodeがインストールされてることを確認します。
nodebrew ls
v6.2.0
current: none
currentが現在使用しているnodeのバージョンを表しており、ここではまだ使えません。
使えるようにするにはuse
します。
nodebrew use v6.2.0
use v6.2.0
こうすると、node -v
やnpm -v
で現在入ってるバージョンの確認ができます。
5.パッケージインストール
↓のコマンドを打ちます。package.json
の中身は最初はデフォルトで構いません。
$ npm init
$ npm install --save dash-button
次にpackage.json
の中身のStrings部分を"dash-button scan"
に書き換えます。
最終的なpackage.json
は下記のようになります。
{
"name": "amazondash",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"scan": "dash-button scan"
},
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {},
"description": ""
}
6.Button Wifiスキャン
↓のコマンドを打ちます。
sudo npm run scan
ここで、エラーがでなければ電波の受信待ちになるので、Amazon Dash Buttonのほうで設定を行います。
Amazonアプリの設定
お持ちのスマホでAmazonアプリをインストールしてください。(パソコンでできないのか。。。)
次にメニューの「アカウントサービス」→「Dash端末」→「新しい端末をセットアップ」でスマホのほうで、Dash ButtonのBluetooth電波を受信してください。
商品選択画面が出ると思うので、そこで右上の✕ボタンを押して抜けてください。
ここまでやると、ターミナルの画面にAmazon Dash Buttonのフィジカルアドレスが表示されるはずです。
$ sudo npm run scan
> dash-button scan
Scanning for DHCP requests and ARP probes on en0...
Detected a DHCP request or ARP probe from 6c:40:08:81:aa:72 //←fromからフィジカルアドレス
実装
7.Deploy
こちらのページを参考にindex.jsを作成します。
仕様
・ターミナル上で、カウントする数字(秒)をいれる
・入力した秒数のタイミングでAmazon dash buttonを押す。
・入力した数字と、ボタンを押したタイミングの差分を結果表示
//定数の設定
const DashButton = require("dash-button"); // モジュール読み込み
const PHY_ADDR = "50:f5:da:51:dc:c4"; // ここでフィジカルアドレスを指定
//変数の設定
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let button = new DashButton(PHY_ADDR); // ボタンのアドレスを引数に渡してDashButtonクラスを呼び出し
let answer;
let count=-1;
let Timer;
let status=0;
rl.question("How long you count ?", function(number) {
// TODO: Log the answer in a database
rl.question("If you are ready, push return key",function(){
console.log("COUNT DOWN START!!");
Timer = setInterval(function(){
// console.log(answer);
count++;
console.log(count);
button.addListener(() => {
status = 1;
answer = number-count;
if(answer > 0){
console.log(answer+"秒早いです");
clearInterval(Timer);
}else if(answer == 0){
console.log("Conglaturation!");
clearInterval(Timer);
}else{
console.log(Math.abs(answer)+"秒遅いです");
clearInterval(Timer);
}
});
},1000);
rl.close();
});
});
いっけぇえええ〜!!
※6章で商品を登録してなければ、押しても商品は注文されません。
node index.js
How long you count ?5
If you are ready, push return key
COUNT DOWN START!!
0
1
2
3
4
5
Conglaturation!
Conglaturation!
Conglaturation!
Conglaturation!
Conglaturation!
Conglaturation!
あとがき
・ボタンを押してから、反映されるまで結構タイムラグがあるので、難しい。
・結果表示が複数出てしまうのが直せてない。
・1ゲームやったら、終了する、部分が直せていない。
といろいろとバグがまだあります。が、一応遊べます。