Amazon Dash ButtonでGet Wild退勤する

# 記事タイトルがオチ
こんにちは、さのかずや [@sanokazuya0306](https://twitter.com/sanokazuya0306) と申します。

岐阜県大垣市にある[情報科学芸術大学院大学（IAMAS）](http://www.iamas.ac.jp/)という[精神と時の部屋](http://d.hatena.ne.jp/keyword/%C0%BA%BF%C0%A4%C8%BB%FE%A4%CE%C9%F4%B2%B0)で日々鍛錬を積んでいます。
先日は[Ogaki Mini Maker Faire](http://ommf.iamas.ac.jp/)の夜に、[地下駐車場](https://www.facebook.com/events/427667867356894/)でGet Wildから始まるDJをしたりしました。Qiita勢のみなさんが盛り上がってくれてよかったです。
【宣伝】卒展きてね→[IAMAS 2017](http://www.iamas.ac.jp/exhibit17/)


#Amazon Dashボタンハッキング
<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">hacking time <a href="https://t.co/T9mt6ZaOxu">https://t.co/T9mt6ZaOxu</a> <a href="https://t.co/6i6L9zmJLC">pic.twitter.com/6i6L9zmJLC</a></p>&mdash; さのかずや (@sanokazuya0306) <a href="https://twitter.com/sanokazuya0306/status/807164016749637632">2016年12月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[MacOSX&Node.jsでAmazon Dash Buttonを制御する](http://qiita.com/Sugima/items/39caa4f08ca022514a46) を参考にさせて頂きました。
すぐできました。

## WiFiアクセスポイント設定
[Amazon Dash ButtonをただのIoTボタンとして使う](http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4) をご参照ください
Amazonアプリをスマホにインストール
↓
ボタン長押しでスマホとボタンをペアリング
↓
ボタンに紐付けるWiFiの設定
↓
ボタンに紐付ける商品選択画面 **←ここでやめる！**

###Tips
- テザリングできるスマホと、そのスマホにつなげてAmazonアプリが使えるスマホが（つまり、スマホが2台）あれば、**テザリングでもWiFi設定でボタンに紐付けできます**
- この手順通りにやれば**何度でもボタンのWiFi設定は後でし直せます**
- （当然）連打を想定していないと思われるので、反応速度にはラグが出ます

#受信→動作側のあれこれ

## Node.jsをインストール
- [MacにNode.jsをインストールする](http://qiita.com/_daisuke/items/fb81f45314c571a678cc)
- [いまアツいJavaScript！ゼロから始めるNode.js入門〜5分で環境構築編〜](https://liginc.co.jp/web/programming/node-js/85318)

とかをご参照ください

## node-dash-buttonを導入
スムーズにいじれた

```
$ mkdir getWild // 任意のディレクトリを作成
$ cd getWild
$ npm init
$ npm install node-dash-button --save
```

## simplayerを導入
音再生用のnodeモジュール
[Nativeモジュール非依存な音声再生nodeモジュールを作った
](http://qiita.com/maxmellon/items/afe7497ef3b4976ee87d)多謝

```
$ npm install simplayer
```


## ボタンのMACアドレスを取得
```
$ cd node_modules/node-dash-button
$ sudo node bin/findbutton
```
<img width="672" alt="スクリーンショット 2016-12-10 17.51.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/8a14d29c-bd2d-a2db-2ea8-68e1498dd136.png">
findbuttonを走らせてボタンを押すと、こんな感じで出てくる。unknownっていうやつがボタンのMACアドレス。


## getWild.js
先人のコードを大いに参照させて頂いております

```js:getWild.js

const dash_button = require('node-dash-button');
const execSync = require('child_process').execSync;
// Dashボタンのアドレス(コピーしたMACアドレスをここに入力)
const dash = dash_button('34:d2:70:3e:**:**', null, null, 'all');

var simplayer = require('simplayer');

// ボタンをクリックしたときのアクション
// クリックしてから数秒遅延します。
dash.on('detected', () => {

  console.log("アスファルト タイヤを切りつけながら 暗闇走り抜ける");
  var getWildandTough = simplayer('getwild.mp3', function (error) {
    if (error) throw error;
    console.log('ひとりでは 解けない愛のパズルを抱いて');
  });

});
```


## 実行
```
$ sudo node getWild.js
```


# 華麗に退勤

<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">Amazon Dash ButtonでGet Wild退勤する <a href="https://t.co/PhCsXQmtTK">pic.twitter.com/PhCsXQmtTK</a></p>&mdash; さのかずや (@sanokazuya0306) <a href="https://twitter.com/sanokazuya0306/status/807513112513363968">2016年12月10日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## 退勤tips
- 連打すると重複して再生されていきます
- control+Cでキャンセルできます
- 歌詞は「タイヤを切りつけながら」だった



# 参考

- [MacOSX&Node.jsでAmazon Dash Buttonを制御する](http://qiita.com/Sugima/items/39caa4f08ca022514a46)
- [Amazon Dash ButtonをただのIoTボタンとして使う](http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4)
- [Nativeモジュール非依存な音声再生nodeモジュールを作った
](http://qiita.com/maxmellon/items/afe7497ef3b4976ee87d)
- [GetWild Advent Calender 2016](http://qiita.com/advent-calendar/2016/getwild)


# 修論
書かなきゃ