Gravio 4で呼び鈴を再バージョンアップしてGoogle Castで家中にアナウンス

ここのところ、「[Gravio 4をRaspberry Pi 4にインストールしてみる][GravioLinuxInstall]」でGravio 4をラズパイにインストールしてみたり、「[Amazon Pollyで音声データを作ってダウンロードする][DownloadPolly]」で音声ファイルを作ってみたりしてたのは実はこれがやりたかったから。
「[Gravio 4で呼び鈴をバージョンアップしてLINE通知を追加してみる][GravioCallButtonV2]」で作った呼び鈴システムをさらにバージョンアップして、家中のGoogle Castデバイスに音声通知してみる。
幸い我が家には、Google Home miniやらNest AudioやらNest Hubが各部屋に配置されてるわけで、これを活用しない手はない。
「[Gravio 4で呼び鈴をバージョンアップしてLINE通知を追加してみる][GravioCallButtonV2]」まででは、ライトを光らせてAmazon Pollyで音声をスピーカーを鳴らすことまではできていた。だけどスピーカーはBluetoothを使っても距離に限界があるし、ケーブルなら取り回しが大変。Google Castデバイスは基本的にWiFiでネットワークに繋がってればいいわけで距離の壁や物理的な壁も簡単に超えることができる。

# 使用環境

* Raspberry Pi 4 Model B w/4GB RAM
* Ubuntu Server 20.04.1 LTS
* Gravio HubKit 4.1.0-6380
* Gravio Studio v4.1.5432.0
* Gravioライト
* Gravioワイヤレススイッチ
* Amazon Polly
* Google Nest Audio

※GravioライトとGravioワイヤレススイッチはBasicプラン(月額500円)を契約するとレンタルすることができます。

# 事前準備

* 「[Gravio 4で呼び鈴をバージョンアップしてLINE通知を追加してみる][GravioCallButtonV2]」を参考に、ボタンを押すとアクションが実行されて、ライトが光ったり、通知が行くところまでは作っておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/c0414932-ac32-98b7-5939-6825ed0fa8d4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/2779421a-1237-3d34-eb40-4bd1f25f1de2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/f963460d-0789-8a08-fbe8-440f9d6da39f.png)

* Google Castデバイスを設定しておく。

# 手順
## アナウンス用の音声ファイルを配置する
まずはアナウンス用の音声ファイルを準備します。自分の声をスマホで録音するもよし、AWSの環境を持ってるなら「[Amazon Pollyで音声データを作ってダウンロードする][DownloadPolly]」を参考にして作ってもいいです。

準備できたら、Gravio Studioの新機能、ファイルビューア機能を使ってファイルをアップロードします。
アクション一覧の画面の右上のこのアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/78109bd1-d106-6dcc-65bf-490101c76d54.png)
このようなウィンドウが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/f6014fe6-a533-afab-7bf3-27d7841f6ff0.png)

フォルダを選択し、アップロードアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/a8a58ccc-6dba-17ba-64bb-6d4e384eeaab.png)

ファイルを選択してアップロード。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/b39f58c7-6a82-2ebc-8e05-e73ec46f7ddc.png)

**[Action Data Folder]** の下にアップロードできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/fd33d363-d34c-19d1-3b96-33b2a77d35e0.png)

ウィンドウを閉じておきます。

## ExecコンポーネントでCATTを実行する
[以前](https://qiita.com/zrock/items/5ff126bf64d2716299a4)、Gravio 3を使ってラズパイからGoogle Castで動画を再生してみました。このとき使ったのが[CATT(Cast All The Things)][CATT]というコマンドです。
実は[Gravio 4][Gravio]のLinux版ではコンテナ内にこのCATTパッケージがインストールされてます。つまりビルトインで使えるようになりました。これは便利。

では、手順です。まずは呼び鈴用のアクションを開きます。AmazonPollySpeechコンポーネントはもういらないので残ってたら削除しちゃいます。コンポーネントを選択し、右下のゴミ箱アイコンを使って削除してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/4c3376db-2e7f-66db-0c2b-af379c0dab4e.png)

代わりに**Exec**コンポーネントを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/43ea86fa-343f-4917-550b-156b8226ea24.png)

コマンドには以下のように指定します。

```
env LC_ALL=C.UTF-8 LANG=C.UTF-8 catt -d <デバイス名> cast <ファイル名>
```
私の場合、Nest Audioの名前が `書斎` 、上でアップロードしたファイルが `welcome.mp3` なので下のようになります。
先頭の`env`から`catt`の直前までの部分はおまじないです。ロケール情報を指定しないとcattコマンドが動かないのでこのようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/f282e48c-f740-4d2b-3a10-47709cd39ac5.png)

実行してみましょう。デバイスから音声が出てきました。
あとはあらゆるところにGoogle Home miniでもばらまけば、家のどこからでも気づけますね。音楽流してみてもいいと思います。

# ポイント
* ファイルをアップロードするにはGravio 4で追加されたファイルビューア機能を使う
* CATTはLinux版Gravio 4では標準で使用可能になった
* CATTをExecコンポーネントで使うには、先頭でおまじないの環境変数が必要

# 参考
* [Gravio][]
* [Exceコンポーネント][Exec]
* [Cast All The Things][CATT]
* [Amazon Pollyで音声データを作ってダウンロードする][DownloadPolly]
* [Gravio 4をRaspberry Pi 4にインストールしてみる][GravioLinuxInstall]
* [Gravio 4で呼び鈴をバージョンアップしてLINE通知を追加してみる][GravioCallButtonV2]

[CATT]:https://github.com/skorokithakis/catt

[Exec]:https://doc.gravio.com/manuals/gravio4/1/ja/topic/runscript-action-component
[DownloadPolly]:https://qiita.com/zrock/items/ef75d4c44274a25d8dda
[GravioLinuxInstall]:https://qiita.com/zrock/items/1790f763048a2683a420
[GravioCallButtonV2]:https://qiita.com/zrock/items/0296b6d69f780605c933

[Gravio]:https://www.gravio.com/jp