AmazonDashButtonで遊んでみた

# はじめに
こんにちは、皆さん
3連休楽しんでますか？
クリスマス？そんなものは無い。いいね？

# 今回作るもの
最近AmazonDashButtonを弄るのが流行っているらしいので便乗してみました。
ラズパイと接続して、ボタンを押すと某年末番組の「ででーん、○○アウト」と言わせます。
(ほぼほぼ参考文献以上の新しいことはしてないですが勘弁して。半分備忘録です)
用意したのは下の画像のように
- ラズパイ
- AmazonDashButton
- スピーカー
です。
![IMG_4740.JPG](https://qiita-image-store.s3.amazonaws.com/0/75859/98f298f3-4294-6e79-8c6b-5716b941a1c1.jpeg)

# ラズパイで音を出す
すいません、ラズパイのセットアップの部分はすっ飛ばします。
セットアップが出来てる体としてやります。

## 諸々インストール
http://qiita.com/aviscaerulea/items/a50c40f0a9e397c1ec2f
この方の記事を参考(ほぼパクリ)にして進めていきました。
apt-getでもいけると書かれてますが、何となく最新版を入れたかったので手動バージョンで。

```
$ mkdir /tmp/tts-install
$ cd !$
$ curl -L http://downloads.sourceforge.net/hts-engine/hts_engine_API-1.10.tar.gz | tar zxfv -
$ cd ./hts_engine_API-1.10
$ ./configure
$ make && sudo make install

$ cd /tmp/tts-install
$ curl -L http://downloads.sourceforge.net/open-jtalk/open_jtalk-1.09.tar.gz | tar zxfv -
$ cd ./open_jtalk-1.09
$ ./configure --with-charset=UTF-8
$ make && sudo make install

参考文献の方には無かったですが、pathが通ってなかったので
$ source ~/.bashrc
をしたらコマンドが通るようになりました

$ cd /tmp/tts-install
$ curl -L http://sourceforge.net/projects/open-jtalk/files/Dictionary/open_jtalk_dic-1.09/open_jtalk_dic_utf_8-1.09.tar.gz | tar zxfv -
$ sudo mkdir -p /usr/local/share/open_jtalk
$ sudo mv ./open_jtalk_dic_utf_8-1.09 !$/dic-1.09

↓最初はやらなかったのですが、おっさんが嫌になったので
$ curl -L -O http://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip
$ unzip MMDAgent_Example-1.6.zip
$ mkdir -p /usr/local/share/hts_voice
$ find ./MMDAgent_Example-1.6 -type f -name "*.htsvoice" -exec cp -v {} /usr/local/share/hts_voice/ \;

```

## 音を出すテスト
ここも参考にあるように
(というかこの部分はほぼ参考と一緒なので割愛)
一応シンボリックリンクの部分だけは自分でやった

```
$ sudo ln -s ~/say /usr/local/bin/say
```

## 某番組用のスクリプト
上記までの作業で

```
$ say ほにゃらら
```
で喋ってくれるのですが、スクリプト書いてみました。
ランダムで誰かケツバットです。

```
#!/bin/bash

names=("まつもと" "はまだ" "たなか" "えんどう" "やまさき")
say_count=$((RANDOM % (${#names[*]})))

#echo ${names[*]}
#echo ${say_count}

if [ ${say_count} -eq 0 ]; then
  #echo "全員"
  `aplay /home/pi/gakituka.wav && say ぜんいん、アウト`
else
  #echo "${names[${say_count}]}"
  `aplay /home/pi/gakituka.wav && say ${names[${say_count}]}、アウト`
fi
```

# AmazonDashButtonを使う
これでボタン押したときにスクリプトを実行してくれればオッケーです。

## セットアップ
これも先駆者の方々がいますが、画像多めにするから許して
スマホにAmazonのアプリをインストールしておく必要があります。

### ダッシュボタン設定の流れ
- 1.アプリ内のメニューから新しい端末のセットアップ
- 2.Wifiの設定
- 3.設定を途中でやめてボタンを押しても商品を買わないようにする
- 4.この画像みたいになったらオッケー

|1  |2  |3  |4  |
|---|---|---|---|
|![j.PNG](https://qiita-image-store.s3.amazonaws.com/0/75859/be3d44fe-6e9e-8ab6-25a7-5497cca1e340.png)|画面通りにwifiの設定 |![IMG_4737.PNG](https://qiita-image-store.s3.amazonaws.com/0/75859/b167d1b2-a6d4-433c-a4c6-c50c52c9ee19.png)|![IMG_4738.PNG](https://qiita-image-store.s3.amazonaws.com/0/75859/f1c92adf-bfdb-b545-5947-862dbabc1e4e.png)|

### ラズパイ側の設定
今回は[node-dash-button](https://github.com/hortinstein/node-dash-button)を使いました。
だいたいREADMEに書いてありますが、一応自分のやったコマンドを

```
$ sudo apt-get install libpcap-dev
$ mkdir amazon
$ cd amazon
$ npm init
$ npm install node-dash-button --save
```
で準備が出来ました。

```
$ sudo node node_modules/node-dash-button/bin/findbutton
```
でボタンを探します。(sudoじゃないと怒られました)
コマンドを打ったあとに、DashButtonをポチっと
んで、結果がこれ(自分の場合)
<img width="500" alt="スクリーンショット 0028-12-24 15.58.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/75859/ef8279f2-9739-430f-967d-a5c92a7216e2.png">
なんか思った以上にいっぱい出てきました。
Amazon Techってでるよとありますが、たぶんunknownってなってるのがそれ
結果的に一番上のやつが僕の場合正解でした。
隠してある部分のMACアドレスをメモります。

## スクリプト書いて遊ぶ
準備ができたのでカキカキします。

```~/amazon/index.js
var dash_button = require('node-dash-button');
var dash = dash_button("メモってたMACアドレス", null, null, 'all');

dash.on("detected", function (){
  console.log("omg found");
  const execSync = require('child_process').execSync;
  const result =  execSync('/home/pi/gakituka.sh');
  console.log(result);
});
```
正直ほぼnode触ったことないザマス
んで、起動(またsudoつけないと怒られた)

```
$ sudo node index.js
```
このときDashbuttonポチでケツバットです。
一応動画を撮ったのですが、著作権？的に危ないんじゃねと思ったので載せませんでした。

# まとめ
これでいつでも嫌いな相手にケツバットが出来るようになりましたね。
正直動的に喋らせている部分は、スペックのせいかは分かりませんが結構遅いです。我慢できるっちゃできますけど。
本当はiPhoneのhomebridgeで hey siri -> ケツバット起動 -> ででーん
という流れをやってたんですけど、周囲にまるわかりなのでDashButtonを使ってこっそりやる方法にしました。
homebridgeの方は気が向いたら書くかも(先駆者の記事見たほうが早い気もするけど)

# 参考
[Raspberry Pi 2 をアンプ基板＋スピーカーのコンパクト構成でお喋りさせる](http://qiita.com/aviscaerulea/items/a50c40f0a9e397c1ec2f)
[Amazon Dash ButtonをただのIoTボタンとして使う](http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4)
[Node.jsからシェルコマンドを実行する](http://tkybpp.hatenablog.com/entry/2016/04/25/163246)