Edited at
GetWildDay 11

Amazon Dash Button.push(GetWild)

More than 1 year has passed since last update.

Get Wild Advent Calendar 2016 の11日目です。


tl;dr


  • Amazon Dash Buttonを押したらGet Wildが流れるぞ

  • Node.js初挑戦だったけど意外といけたぞ


動作環境


  • MacBook Pro

  • OS X 10.11.6

  • Xcode 8.1

  • node.js v6.9.2


内容


背景

Amazon Dash Buttonって出たじゃないですか。

アレを見た時にピンときたんですよね。 こいつは(GetWildに)使えると。

ということで、Amazon Dash Buttonを押したらGet Wildが流れるというのを試してみました。


Amazon Dash Buttonとは

DSC_1909.JPG


Amazon Dash Buttonのセットアップ


開発環境のセットアップ


Node.jsのインストール

$ curl -L git.io/nodebrew | perl - setup

$ export PATH=$HOME/.nodebrew/current/bin:$PATH //.bash_profileとかに書いたほうがいいかも
$ nodebrew help
nodebrew 0.9.6

Usage:
nodebrew help Show this message
nodebrew install <version> Download and install <version> (compile from source)
nodebrew install-binary <version> Download and install <version> (binary file)
nodebrew uninstall <version> Uninstall <version>
nodebrew use <version> Use <version>
nodebrew list List installed versions
nodebrew ls Alias for `list`
nodebrew ls-remote List remote versions
nodebrew ls-all List remote and installed versions
nodebrew alias <key> <value> Set alias
nodebrew unalias <key> Remove alias
nodebrew clean <version> | all Remove source file
nodebrew selfupdate Update nodebrew
nodebrew migrate-package <version> Install global NPM packages contained in <version> to current version
nodebrew exec <version> -- <command> Execute <command> using specified <version>

Example:
# install from binary
nodebrew install-binary v0.10.22

# use a specific version number
nodebrew use v0.10.22

# io.js
nodebrew install-binary io@v1.0.0
nodebrew use io@v1.0.0

// インストール可能なバージョンを確認

$ nodebrew ls-remote

// 公式の推奨版がv6.9.2LTSだった(2016/12/10現在)のでそれをインストール
$ nodebrew install-binary v6.9.2
Fetching: https://nodejs.org/dist/v6.9.2/node-v6.9.2-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully

// インストールチェック

$ nodebrew ls
v6.9.2

current: none

// v6.9.2を使用
$ nodebrew use v6.9.2
use v6.9.2

// バージョンチェック

$ node -v
v6.9.2
$ npm -v
3.10.9


node-dash-buttonのインストール

$ mkdir work_dir

$ cd work_dir
$ npm init
$ npm install node-dash-button --save


Dash Buttonを押した時の挙動確認


Dash Buttonを探す


  • では実際にDash Buttonをscanしてみましょう

  • findbutton実行中にDash Buttonを押せばOK

$ cd node_modules/node-dash-button

$ sudo node bin/findbutton

Watching for arp & udp requests on your local network, please try to press your dash now
Dash buttons should appear as manufactured by 'Amazon Technologies Inc.'

Possible dash hardware address detected: c0:25:a2:11:b3:f4 Manufacturer: NEC Platforms Protocol: arp


  • 今回はDashボタンを2つ用意してあります。しかし、両方とも同じボタン(ジレットのやつ)だったので、scanしてみても両方とも同じMacアドレスでした・・・

  • 2つのボタンでなにかをやりたい場合は別の種類を買ったほうが良さそうです(未確認)

$ sudo node bin/findbutton

Possible dash hardware address detected: c0:25:a2:11:b3:f4 Manufacturer: NEC Platforms Protocol: arp
Possible dash hardware address detected: c0:25:a2:11:b3:f4 Manufacturer: NEC Platforms Protocol: arp


ボタンが押されたことを検出する

$ vi sample.js

var dash_button = require('node-dash-button');
var mac_addr = "c0:25:a2:11:b3:f4";

var dash = dash_button(mac_addr, null, null, 'all');
dash.on("detected", function (){
console.log("Amazon Dash Button Pushed!!");
});

$ sudo node sample.js

Amazon Dash Button Pushed!!


  • なお、Dash Buttonを押したらAmazonショッピングアプリに通知がいくわけで・・・
    通知欄


Amazon Dash Buttonを押したらGet Wildを再生する


  • 必要なもの


    •  Node.jsでmp3を再生するためのライブラリ




Node.jsで音楽を再生するためのライブラリ

$ npm install simplayer -save


やってみた


  • app.jsを書いていきましょう

$ vi app.js

var simplayer = require('simplayer');
var dash_button = require('node-dash-button');
var mac_addr = "c0:25:a2:11:b3:f4";
var dash = dash_button(mac_addr, null, null, 'all'); //address from step above

dash.on("detected", function (){
console.log("\n" +
" .JMMMMMMMa, .... .MMM[ .MMMM .MMM% dMM] .MM# .MMM` \n" +
" .MMMM\"\"7\"HMMM[ .MM# .MMM] JMMMM .MMMt .\"\"9` dMMt JMMF \n" +
" JMM#' dMM@ .JgNNNJ. .&MMMN&, MMM] .MMdMN dMM$ (gg[ .MM# .(gNNa.MMM\\ \n" +
" JMM# .MMMY\"WMMM, TUMMM\"9` MMM] .MM^dMN JMMD .MMM> JMMF .MMMMHHMMMM# \n" +
" .MMM% dMMMMMM! .MM@ dMMF (MMF dMM].MMF dMN .MMF .MM# MMM! .MMM^ .MMM] \n" +
" ,MMM. \"\"\"WMMF .MMMMMMMMMMM] MMM! JMMbdMF dMN.MMF dMM] .MM# MMM] .MMM` \n" +
" ,MMMp .MMM% ,MM# ... .MM# (MMMM# dMNMMF .MMM dMM% .MMM; .dMMF \n" +
" TMMMMNggMMMMM# .MMMN..gMM#! dMMh., .MMMM` dMMMF JMMF .MM# MMMNa.&MMMM: \n" +
" .TMMMMMB= TMD TMMMMM\"' ?HMM# .MMM^ dMMD MMM' ?MMD TMMMM\"(MM8 \n"
);
console.log("\n" +
" .J++J. .JJJ \n" +
" .MMMMM| dMM] \n" +
" .MMMMMMb .... ..... ......MMM` \n" +
" .MMM'JMMN -MMNMMMMMMN. .uMMMMMMMMMF \n" +
" .MMM! ,MMM. MMMD` ,MMM` .MMMY WMMM\\ \n" +
" .MMM_...MMM] .MM# -MMF .MMM\\ .MM# \n" +
" .MMMMMMMMMMMb dMM] MMM% .MM# MMM] \n" +
" (MM#!~~~~~dMMN .MMM` .MM# -MMMa...MMMM \n" +
"JMM#` (MMM- (MMF dMMF 7MMMMM#dMMF \n"
);
console.log("\n" +
" +++++++++++++, .JJJ .JJJ. `.JJJ\n" +
".MMMMMMMMMMMMM` ` `dMM] gMM# .MMMF\n" +
" dMMF ..(J.,. .... .... ....,..... .MMM`..... .MMM% .MMM`\n" +
" .MMM\\ .gMMMMMMMMp dMMF MMM\\ .dMMMMMMdMM] (MMNMMMMMMN .MM# gMMF\n" +
" JMM# .MMM^ /MMM. .MMM` .MM# .MMM= WMMM` MMMD` (MMM -MM' MM#\n" +
" .MMM] .MMM` .MMM! (MMF dMM] .MMM' JMMF .MM# JMMF dMF MM'\n" +
" .MMM` JMM# JMMF MMM\\ .MMM` (MM# .MMM: dMM% .MMM\\ T9 .\"D\n" +
" dMMF (MMM,...dMMD .MMMa...MMMF (MMMm..JMMM# .MM# .MM# .ggg~ .ggm\n" +
" .MMM> 7MMMMMMMB^ WMMMMM9MMM\\ ?MMMMM\"dMM% JMMF dMM] .MM# dMMF\n" +
" ~` .... .MM#\n" +
" JMMMNggMMM@`\n" +
" ` 7\"\"\"\"\"^\n"
);
var musicProcess = simplayer('get_wild_and_tough.mp3', function (error) {
if (error) throw error;
});
process.exit();
});

$ sudo node app.js

getwild.jpg


最後に


  • 初のGDD(GetWild駆動開発)頑張りました

  • チープなスリルに身を任せると明日に怯えることになるぞ

  • Amazon Dash Buttonを押すとAWSリソースを全消ししてくれるアプリとかも簡単にできそう


参考