Google HomeとText-to-Speechで一斉放送システムを作ってみた

はじめに
---

自宅にいても**変化**に気づかないことが結構あります。たまたま二階に居たので気づかなかった、寝ていたから気づかなかった、とかよくある話です。
そんな気づき漏れをGoogle Homeでなくそう、というのが今回の目的です。
年老いた母のために考えてみました。

実現方法
---

- 自宅の要所要所にGoogle Homeを設置します。その後Google Homeアプリでグループ設定します。
 
- 母艦にラズパイを利用します。それにPython版google-home-notifierをインストールすると、Google Homeの**グループ**に対して一斉放送することができます。Python版google-home-notifierはWebhookを実装しているので、httpで喋らせたい文章を引き渡せば、Text-to-Speech機能を介して、Google Homeに一斉放送することができます。

- Google Homeに一斉放送させたいIoTデバイス側では、httpで喋らせたい文章を引き渡します。

- 特に外部サービスを利用しないで仕組みは簡単です。


参考：

- [Pythonを使って、Google Homeに喋らせてみる](https://qiita.com/attakei/items/c5de47f3c1f53992c353)


お知らせ例
---

- ドア・チャイムがなったらお知らせする（来客、宅急便など）。
- ポストに投函されたらお知らせする（郵便、回覧板など）。
- 電話が鳴ったら相手の名前をお知らせする。
- 洗濯が終わったらお知らせする。
- お風呂が沸いたらお知らせする。
- 電子レンジの温めが終わったらお知らせする。

デバイス側の実行例
---

http://192.168.3.230:5000/say/?lang=ja&text=お客さんが来ました


インストール方法（スマホ）
---

####スマホで**Google Homeアプリ**を起動し、**グループ設定**します

詳しい設定方法は省略しますが、google-home-notifier-pythonは個々のデバイスもしくはグループに対して、喋らせたりmp3再生できます。
下記例ではデバイス「**ベッドルーム**」と「**リビング**」が登録されていて、その２台を「**ホームグループ**」としてグループ登録しています。
今回は「**ホームグループ**」に対して通知します。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/1be3fa5a-e6cf-97a3-b1b7-9d469a126158.png">|
|:--:|

インストール方法（ラズパイ）
---

####動作環境を確認します

```shell-session
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 9.6 (stretch)
Release:	9.6
Codename:	stretch

$ python3 -V
Python 3.5.3
```

####gitをインストールします

```shell-session
$ cd
$ sudo apt-get update
$ sudo apt-get install git
```

####google-home-notifier-pythonをインストールします

[ここ](https://github.com/harperreed/google-home-notifier-python)にあります。

```shell-session
$ git clone https://github.com/harperreed/google-home-notifier-python.git
$ cd google-home-notifier-python
$ pip3 install -r requirements.txt
```

####google-home-notifier-pythonの設定をします

通知先を「**ホームグループ**」に設定します。

```shell-session
$ cp -p main.py  main.py.org
$ vi main.py
```

（変更）

```python:main.py
#chromecast_name = "Home group" #edit me to be your google home group
chromecast_name = "ホームグループ"
```

google-home-notifier-pythonを絶対パスで起動するとエラーになるので、相対パスで実行するようスクリプトgoogle-home-notifier.shを作成します。

```shell-session
$ vi google-home-notifier.sh
```

```shell:google-home-notifier.sh
#!/bin/sh

cd /home/pi/google-home-notifier-python
/usr/bin/python3 ./main.py
```

```shell-session
$ chmod a+x google-home-notifier.sh
```

####SupervisorでOS起動時にgoogle-home-notifier-pythonを自動実行するようにします

[Python3でSupervisorを動かしてみた、ラズパイでね](https://qiita.com/somainit/items/cb6560a695a6ea13193e)を参考にSupervisorをインストールします。

その後SupervisorでOS起動時にgoogle-home-notifier-pythonを自動実行するようにします。

```shell-session
$ sudo vi /etc/supervisor/conf.d/google-home-notifier.conf
```

```shell-session:/etc/supervisor/conf.d/google-home-notifier.conf
[program:google-home-notifier]
command=/bin/bash /home/pi/google-home-notifier-python/google-home-notifier.sh
numprocs=1
autostart=true
user=pi
```

OSを再起動します。

```shell-session
$ sudo reboot
```

動作確認します
----

インストールしたラズパイのIPアドレスが**192.168.3.230**の場合です。ブラウザからURL指定します。
OS起動後、google-home-notifier-pythonが立ち上がるまで少し時間がかかります。一度使えるようになると即座に処理されます。

:one:ディレクトリ**google-home-notifier-python/static**にあるmp3ファイルを再生します。

http://192.168.3.230:5000/play/doorbell1.mp3

:two:指定した文章を喋ります。ディレクトリ**google-home-notifier-python/static/cache**にmp3ファイルがキャッシュされます。



http://192.168.3.230:5000/say/?lang=ja&text=今日は良い天気ですね

ディレクトリ構造は下記のとおりです。

```shell-session
$ cd
$ cd google-home-notifier-python/static
$ ls
JR.mp3  cache  doorbell1.mp3
$ cd cache
$ ls 
こんにちは-ja-false.mp3  今日は良い天気ですね-ja-false.mp3
こんばんは-ja-false.mp3
```

おわりに
---

スマートスピーカは便利ですね(=^・^=)