独身貴族のスマートホーム -Alexaからローカルの音楽を再生する-

# はじめに
この記事は、弊社[リンク情報システム](https://www.lis.co.jp/)が主催するイベント「[Tech Connect! Autumn](https://qiita.com/dgkz/items/4c3a449f3168d6c787cf)」のリレー記事です。
「[Tech Connect! Autumn](https://qiita.com/dgkz/items/4c3a449f3168d6c787cf)」は engineer.hanzomon のグループメンバによってリレーされます。
１３日目である本記事は私、阿部が書きました。よろしくどうぞ。

# やりたいこと
自宅のスマート化を促進。スマートスピーカーの音声入力で自宅サーバーにある音楽を聴きたい！

# 今回使用する筆者の自宅環境
スマートスピーカー：Amazon Echo Spot（Alexa）
メディアサーバー　：Raspberry Pi 2 Model B+
　　　　　　　　　：Raspbian , volumio(mpd)
スマートリモコン　：LinkJapan eRemote mini　※弊社とは無関係
AVアンプ　　　　　：YAMAHA RX-V567
![MyHome.png](https://qiita-image-store.s3.amazonaws.com/0/284458/78aa9a48-8d92-b336-511d-e066ba1a22dc.png)

## 予想フロー図
作業前に想定していたフロー図。
![予想フロー図.jpg](https://qiita-image-store.s3.amazonaws.com/0/284458/962484df-24ce-14a2-0c16-f6f7c38bad55.jpeg)
なんてスマートなんだ…

# 現状できること
・スマホアプリを立ち上げ、スマホからメディアサーバーの曲を再生（volumio）
・スマートスピーカーの音声入力でスマートリモコンを介し、AVアンプ等の家電を操作（Alexa + eRemote mini）

# 環境づくり
## メディアサーバーに Node-RED をインストール
次のコマンドから最新版がインストールできるらしい。

```
$ bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
```

![install_node-red.png](https://qiita-image-store.s3.amazonaws.com/0/284458/8ccfdd67-b308-5f34-878e-94bf2d0be31a.png)
※赤枠のURLは、あとでブラウザ上で実際にNode-REDのノードを作るときに使う。

ついでに自動起動の有効化しとく。

```
$ sudo systemctl enable nodered.service
```

## AlexaとNode-REDを連携
### Node-RED Alexa Home Skill Bridge のアカウント作成
ここで登録したアカウントはAlexaアプリやNode-REDで使用する。それ以外は特に説明が必要なもんでもないので割愛する。

### Node-RED Alexa Home Skill Bridge へのデバイス登録
登録画面。次の曲、前の曲に曲を変えたい時に使う気がして「+%」と「-%」にもチェックを入れた。
![SkillBridge_01.png](https://qiita-image-store.s3.amazonaws.com/0/284458/4a2e9058-0025-7e3f-43df-d4af436071ca.png)

「Devices」タブに登録したデバイスが一覧に表示される。
![SkillBridge_02.png](https://qiita-image-store.s3.amazonaws.com/0/284458/7306ad31-98f2-4382-aba2-3b5f7434e331.png)

### Alexaスキル「Node-RED」を有効化
Alexaアプリから「Node-RED」を検索し、有効化する。
![Alexaアプリ01.png](https://qiita-image-store.s3.amazonaws.com/0/284458/fae30a1d-9f17-231d-a593-99c1e572204a.png)

Node-RED Alexa Home Skill Bridge で作成したアカウントでリンクすると、登録したデバイスがAlexaアプリから認識できるようになる。
![Alexaアプリ02.png](https://qiita-image-store.s3.amazonaws.com/0/284458/1262d970-7166-6857-7662-b68d5b1387a0.png)

## Node-RED を起動

```
$ node-red
```
または

```
$ node-red-start
```
でNode-REDを起動する。
![start_node-red.png](https://qiita-image-store.s3.amazonaws.com/0/284458/bb2344b5-295b-fe4c-9126-04d9e8918301.png)

# フローを作成
## Node-RED 画面を開く
Webブラウザで `http://ラズパイのホスト名(IPアドレス):1880` を開く。
![node-red_01.png](https://qiita-image-store.s3.amazonaws.com/0/284458/dbe5c5e6-aebe-3e14-773f-74c91fdc6c99.png)

## ノードを配置
ノードを配置してみた。
Alexaにデバイスとして追加された「メディアサーバー」が呼ばれた場合、
「switch」を実行し、デバッグログを出力する。
![node-red_04.png](https://qiita-image-store.s3.amazonaws.com/0/284458/6d26a724-bc51-4c58-d9d4-164505d4b36b.png)
各ノードの詳細は以下。

### 「メディアサーバー」
再度アカウントの紐づけをする。できたら"Device"にメディアサーバーを選択できるようになる。
![node-red_02.png](https://qiita-image-store.s3.amazonaws.com/0/284458/4a205741-b2dd-047d-c777-f29132bdce6a.png)

### 「switch」
「メディアサーバー」の出力先として接続する。
`is true`、`is false`はそれぞれ「～をつけて」、「～を消して」に対応する。`25`、`-25`はというと、、、（後述）
→の数字が、出力先を表す。
![node-red_05.png](https://qiita-image-store.s3.amazonaws.com/0/284458/fe5fba0d-7917-2e8c-24e5-5457d67b9b9b.png)

### 「再生」
「switch」の出力先1として接続する。
"コマンド"に音楽制御用コマンドを入力するが、bashコマンドのオプションとして指定してやらないとうまく動いてくれないので注意。
音楽はmpd(ミュージックプレイヤーデーモン)によって制御しているため、mpdのクライアントであるmpcコマンドを使用する。
![node-red_06.png](https://qiita-image-store.s3.amazonaws.com/0/284458/8b51fabe-b0b2-67e1-056f-91228401076c.png)

「停止」「次の曲」「前の曲」は、「再生」と同じ要領のため割愛する。

### 「msg.payload」
処理結果をデバッグウィンドウで見たいがために繋いだもの。
特に設定変更していないので割愛する。

# 完成！！！
動画は恥ずかしいから撮らないぞ。

俺「アレクサ、メディアサーバーをつけて！」
ア「はい」
　→曲を再生

俺「アレクサ、メディアサーバーを明るくして！」
ア「はい」
　→次の曲

俺「アレクサ、メディアサーバーを暗くして！」
ア「はい」
　→前の曲

俺「アレクサ、メディアサーバーを消して！」
ア「はい」
　→曲を停止

「明るくして」って、、、笑
前述の`25`と`-25`が明るさを表してたんですね～。
とりあえずやりたいことは(無理やり)できた。だが果たしてこれはスマートなんだろうか。

# まとめ
・今月は出張につきほぼ家にいないため、出張前に約1日でやった。やるやん。
・弊社の先輩である@rysk001の記事が上位互換くさい。やるやん。
・2018年9月現在、既存のスマートホームスキル等ではかゆいところに手が届かない。
・とはいえ工夫次第ではもっといい感じにできそう。
・プレイリストをあーだこーだしたり、「次の曲にして！」とかをやるには、Alexaスキルを作らないといけないかも。そんときはnode.jsで書くかな。

そんなわけで、次の機会があれば続編を書きますよ！
音楽制御を改善するか、家電制御を改善するか、どっちかかな～


「[Tech Connect! Autumn](https://qiita.com/dgkz/items/4c3a449f3168d6c787cf)」の次の記事はラスト、秋分の日になります！
私の同期である@mk-takahashiによる「気軽にIoTデバイスをつくろう」です。
お楽しみに！