GoogleHome/AmazonEco を RaspberryPi の Bluetooth スピーカーにする

#はじめに
標題の通りなのですが、GoogleHome/AmazonEco を RaspberryPi の Bluetooth スピーカーにしてみました。

#ハード
* RaspberryPi3
* GoogleHome mini
* AmazonEco Dot
* Windows10(母艦)

#パッケージをインストールする
```sh:
$sudo apt install pulseaudio pulseaudio-module-bluetooth
```

#PulseAudio サービス作成

```bash
$ sudo vi /etc/systemd/system/pulseaudio.service
```

```:/etc/systemd/system/pulseaudio.service
[Unit]
Description=Pulse Audio

[Services]
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm

[Install]
WantedBy=multi-user.target
```

#PulseAudioとBlueZの通信設定
```bash
$ sudo vi /etc/dbus-1/system.d/pulseaudio-bluetooth.conf
```

```xml:/etc/dbus-1/system.d/pulseaudio-bluetooth.conf
<busconfig>
    <policy user="pulse">
        <allow send_destination="org.bluez"/>
    </policy>
</busconfig>
```

#PulseAudioのモジュール設定
Bluetoothのサービスを読み込む設定が必要らしい。以下をファイルの最後に追加。

```bash
$ sudo vi /etc/pulse/system.pa
```

```:/etc/pulse/system.pa
...
### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif
```
ここで一度、システム再起動。要らないかも。

```bash
$ sudo reboot
```

#PulseAudioの起動
```bash
$ sudo systemctl start pulseaudio.service
$ sudo systemctl enable pulseaudio.service
```

#ユーザグループ追加
root/pi ユーザをPulseAudioで音声を出力するためのグループに追加。
piユーザだけでも良いかもしれません。私はラズパイの起動音を出したかったのでrootユーザを追加しておきました。

```
$ sudo usermod -a -G pulse,pulse-access root
$ sudo usermod -a -G pulse,pulse-access pi
```

#GoogleHome/AmazonEco の検索
```
$ sudo bluetoothctl
[NEW] Controller XX:XX:XX:XX:XX:XX raspberrypi [default]

[bluetooth]# agent on
Agent registered

[bluetooth]# default-agent
Default agent request successful

[bluetooth]# scan on
Discovery started
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: yes
```
#GoogleHome の場合
ここで GoogleHome の 「※ペア設定モードを有効にする」
しばらくすると以下のように見つかるとツラツラ出てくる。
出て来ないときはもう一度「ペア設定モードを有効にする」してみる

※ペア設定モードを有効にする
GooglHomeアプリで [ここのSTEP5の状態にする](https://support.eonet.jp/setup/gh/bt.html)


```
[NEW] Device ZZ:ZZ:ZZ:ZZ:ZZ:ZZ [ダイニング ルーム]
```

私のGoogleHomeは「ダイニング ルーム」という名前にしている
ZZ:ZZ:ZZ:ZZ:ZZ:ZZが GoogleHomeのMACアドレス

#AmazonEco の場合
 この状態で、PCからブラウザで https://alexa.amazon.co.jp にアクセスするか、スマホでAlexaアプリを起動します。
 設定 － デバイス － Echo で、"ワイヤレス" の個所で Bluetooth を選択します。
 [新しいデバイスをペアリング] を押します。
 検出中... と表示されます。

```
[NEW] Device ZZ:ZZ:ZZ:ZZ:ZZ:ZZ Echo Dot-XXX
```

私の AmazonEco は Dot なので、Echo Dot-XXX です。
ZZ:ZZ:ZZ:ZZ:ZZ:ZZが AmazonEcho の MACアドレス

#GoogleHome/AmazonEcoとペアリング
```
[bluetooth]# pair ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Attempting to pair with ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Failed to pair: org.bluez.Error.AlreadyExists
[CHG] Device ZZ:ZZ:ZZ:ZZ:ZZ:ZZ Connected: yes

＃trustで次回以降自動接続させる
[bluetooth]# trust ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Changing ZZ:ZZ:ZZ:ZZ:ZZ:ZZ trust succeeded

＃ペアリングしたGoogleHome/AmazonEchoに接続
[bluetooth]# connect ZZ:ZZ:ZZ:ZZ:ZZ:ZZ　　
Attempting to connect to ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
Connection successful
#上手くつながるとGoogleHome/AmazonEchoから 「チロン♪」と鳴ります。

[ダイニング ルーム]# exit
Agent unregistered
[DEL] Controller ZZ:ZZ:ZZ:ZZ:ZZ:ZZ raspberrypi [default]
```

※うまくいかない場合は、「remove MACアドレス」 で削除した後、再度、やり直してみてください。うまくいく場合があります。

#音を鳴らす
```
aplay /usr/share/sounds/alsa/Front_Center.wav
```

#GoogleHomeが鳴らない
ペアリングしたときに確かに「チロン♪」となったはずなのに鳴りませんでした。
再起動しても鳴らず・・・・。
GoogleHomeアプリで確認したところ、「ペア設定されたBluetoothデバイス」には確かにラズパイが表示されています。もう一度、ペアリングからやり直してみます。

```
$ sudo bluetoothctl
[NEW] Controller XX:XX:XX:XX:XX:XX raspberrypi [default]

# 一度、削除してから
[bluetooth]# remove ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
（以下、同じ）
```

GoogleHome再挑戦

```
aplay /usr/share/sounds/alsa/Front_Center.wav
```
「♪フロント、センター♪」鳴った！美しい女性の声です❤
んー、何がいけなかったのだろう・・・・？
とりあえず鳴ったので良しと。


#ラズパイ再起動後、鳴らず・・・
あらら。もしかして最初に鳴らなかったのも同じ原因？
bluetoothctlコマンドで見てみてもちゃんと信頼済みにも入っているし・・・。
試しに bluetoothctlコマンド で connect だけしてみる。鳴った！
しょうがないので、起動スクリプトに突っ込みます。

起動スクリプトを作ります。
「connect ＜GoogleHome/AmazonEchoのMACアドレス＞」をして起動音を出してます。

```bash:/usr/local/bin/connect-bluetooth.sh
#!/bin/bash

bluetoothctl << EOF
power on
connect ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
quit
EOF

sleep 5  # 適当にウェイト
mpg321 -q /usr/share/sounds/etc/robot-startup1.mp3
```
robot-startup1.mp3 は「[効果音ラボ](https://soundeffect-lab.info/)」さんのロボット音です。
また、mp3再生には、mpg321 が必要ですので、別途インストールしてください。
けど、connect時にデフォルト音がなるので、起動音は必要ないと思いました。(汗)

```
$ sudo vi /etc/rc.local
```

```bash:/etc/rc.local
     ：
# connect to bluetooth speaker
/usr/local/bin/connect-bluetooth.sh

exit 0
```

あと、実行権限を忘れずに！

```
$ sudo chmod +x /usr/local/bin/connect-bluetooth.sh
```

起動スクリプトは、起動時に接続されない方だけです。

再起動後、無事音が鳴るようになりました！

#しばらくすると切断される
再接続用のスクリプトを用意

```bash:/usr/local/bin/reconnect-bluetooth.sh
#!/bin/bash

bluetoothctl << EOF
power on
disconnect ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
quit
EOF

sleep 5  # 適当にウェイト

bluetoothctl << EOF
power on
connect ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
quit
EOF

sleep 5  # 適当にウェイト
mpg321 -q /usr/share/sounds/etc/robot-startup1.mp3
```


#SpecialThanks!!
http://yamtlabo.blog.bbiq.jp/blog/2018/06/raspberry-pi-ze-de45.html
http://belial6.hateblo.jp/entry/2017/06/30/003546
http://dungeonneko.hatenablog.com/entry/2017/01/12/171250
https://soundeffect-lab.info/
https://s.webry.info/sp/vogel.at.webry.info/201712/article_10.html