Raspberry piのVolumioをAlexaで制御する

# はじめに
Raspberry Pi上のvolumioとAlexaを連携する記事はいくつかあるが
記事と同じ手順では実行不可もしくは実行できても不具合があったため解決方法を記載する。

不具合・・・Raspberry piに刺したUSBメモリがvolumioで認識できない（OSでは認識している）

# できるようになること
volumioを音声で制御できる。
再生・停止・音量UP/DOWN・次トラックなどなど

# 構成
volumioとNode-Redを使用する。
Raspberry piでNode-RedをインストールするとUSBメモリ上の音楽ファイルが認識できなくなるため別サーバを使用。

volumio　：aspberry pi zero
Node-Red：Ubuntu

# 動作原理
volumioの再生や停止はコマンドで実行できる。
Node-RedでAlexaのコマンドを受け取り、volumioにSSHコマンドを実行する。

Alexa音声入力
↓
Node-RED Alexa Home Skill Bridge
↓
Node-RedでSSHコマンド実行
↓
Volumioの再生・停止など

# Node-Red
AlexaとNode-Redの連携はAlexaスキル「Node-RED Alexa Home Skill Bridge」を使用する。
ここの作業は以下３点。
・Node-RED Alexa Home Skill Bridgeのアカウント作成・デバイス作成
・Node-Redのインストールと
・Node-REDで処理フロー作成

## Node-RED Alexa Home Skill Bridge設定
#### アカウント作成
以下のURLにアクセスし、アカウントを作成する。
https://alexa-node-red.bm.hardill.me.uk/

#### デバイス作成
再生・停止だけで良いならON・OFFだけにチェックする。
今回は次トラックや音量変化させるためパーセントにもチェックしている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487535/4b4f579f-5487-c177-fdde-aa6f112f6720.png)

## Node-Redインストール
インストール方法は任意の方法でOK
ここではDockerを使用する。

#### ワークディレクトリ作成
```
mkdir node-red-volumio && cd node-red-volumio && mkdir node-red_data
```

#### docker-compose作成
`device: /home/user/docker/node-red-volumio/node-red_data`の部分は個人の環境に合わせる。

```
cat << EOF > docker-compose.yml
version: "3"

services:

# Node-Red
  node-red:
    container_name: node-red-alexa
    image: nodered/node-red:latest
    environment:
      - TZ=Asia/Tokyo
    ports:
      - 1880:1880
    volumes:
      - node-red-data:/data
    restart: always
    
volumes:
  node-red-data:
    driver_opts:
      type: none
      device: /home/user/docker/node-red-volumio/node-red_data
      o: bind
EOF
```

#### Node-Red起動
```
docker-compose up -d
```

## Node-Redのフロー作成



#### 必要なノード
パレット管理から以下のノードを追加する。
・node-red-contrib-alexa-home-skill
　Alexaとの連携ノード

・node-red-contrib-ssh-coco
　SSH実行ノード

#### フロー全体
volumioから受信したコマンドをSwitchノードで各処理に分岐する。
各Changeノードで実行コマンドを登録する。
SSHノードでChangeノードに登録したコマンドを実行する。

※「最小：前トラック」の後続にSSHノードが２つあるのは前トラックコマンドを２回実行する必要があるため。
　（もっと良い方法があるかもしれない）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487535/852b2b04-37cf-a167-a3db-e44acaca2bea.png)

#### Switchノード
ここでの判定基準は「アレクサ、volumioオン」と音声入力した場合にAlexaノードから入力される値となる。

スイッチのON/OFFはbooleanで入力されるのでTrue/Falseで分岐する。
パーセントは数値で入力されるので各数値で分岐するように設定した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487535/17ded20e-745f-7f22-5e2d-f0bf549bb3ff.png)

##### Changeノード
msg.payloadにvolumioで実行したいコマンドを設定する。
コマンドの一覧は[Volumio Documentation](https://volumio.github.io/docs/API/Command_Line_Client.html)を参照

###### 設定例
| 内容 | コマンド |
|:-|:-|
| 再生  |  volumio play |
|  一時停止 |  volumio pause |
| 次トラック | volumio next |
| 前トラック | volumio previous |
| 音量UP 1step  | volumio volume plus |
| 音量DOWN 1step | volumio volume minus |
| 音量20% | volumio volume 20 |
| 音量40% | volumio volume 40 |


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487535/9fb93277-9595-7534-84f1-26e92e566986.png)

##### SSHノード
volumioのIPアドレスとユーザ、パスワードを入力する。

## Alexa設定
#### Alexaのスキルインストール
Nore-Redを検索しインストールする。
インストール後、Node-RED Alexa Home Skill Bridgeで作成したアカウントを入力しアカウントリンクする。
その後、デバイス検出を行い作成したデバイスを設定する。

#### デバイス設定
デフォルトのままでは使用することは難しい（「アレクサ、volumioの音量10%にして」で次トラックの捜査になる）ので
定型アクションを作成しておくとよい。

ちなみに標準アクションではパーセントの設定が10%、20%、40%、60%、80%、100%の６パターンだが
定型アクションでは0～100%まで作成できるのでかなり細かく制御ができる。
（定型アクションをすべて設定＆覚える必要があるが・・・）