【Docker】Google HomeやNestを自在に喋らせる方法
はじめに
以前、「Google Homeを手軽に喋らせる仕組み(google-home-voicetext)を作った(Dockerにも対応)」という記事を書きました。最近、そのリポジトリにPull requestをいただきまして[1]、環境構築がとても楽になりました。Readme.mdは修正しましたが、もう少し詳しい説明を書こうと思い、この記事を作成しました。
何ができるの?
Googleが販売しているスマートスピーカー(第1世代はGoogle Home、第2世代はNest)を、任意のプログラムから自在に喋らせることができるようになります。環境構築に必要な時間は30分くらいです。
事前準備
必要なハードウェア
- Google HomeシリーズもしくはNestシリーズ
- Dockerが動く環境(PC、Mac、Raspberry Piなど)
必要なアカウント
- Googleアカウント
- VoiceText Web API用のメールアドレス
環境構築手順
VoiceText Web APIの利用登録
google-home-voicetextはVoiceText Web APIを用いて音声を合成するため、APIキーを用意する必要があります。以下のURLから無料利用登録を行ってAPIキーを取得してください。
Firebaseでプロジェクトを作成
以下のURLにアクセスしてFirebaseのコンソールを開いてください。
コンソールを開いたらプロジェクトを作成してください。
プロジェクト名は何でも構いません。
Googleアナリティクスは今回は不要なので無効にします。有効にしても問題ありません。
Firebaseの秘密鍵を生成
設定(歯車アイコン)→「プロジェクトを設定」をクリックします。
「サービスアカウント」をクリックします。表示されたdatabaseURL
の値を控えておいてください。
更に「新しい秘密鍵の生成」をクリックします。
「キーを生成」をクリックします。
しばらくするとJSONファイルがダウンロードされるので、ファイル名をfirebase.json
にリネームしてください。
Cloud Firestoreの設定
「開発」→「Cloud Firestore」をクリックし、「データベースの生成」をクリックします。
「本番環境モードで開始する」を選択したまま「次へ」をクリックします。
Cloud Firestoreのロケーションはどこでも構いません。ここでは東京(asia-northeast1)を選びました。
「コレクションを開始」をクリックします。
「コレクションID」にgooglehome
と入力し、「次へ」をクリックします。
「ドキュメントID」にchant
、「フィールド」にmessage
と入力し、「保存」をクリックします。
google-home-voicetext-dockerの設定
適当な作業ディレクトリを用意し、リポジトリをクローンします。
git clone https://github.com/sikkimtemi/google-home-voicetext-docker.git
.my.env.sample
をコピーして.my.env
を作成します。
cd google-home-voicetext-docker
cp .my.env.sample .my.env
適当なエディタを用いて.my.env
を編集します。下記の表を参考にしてください。
変数名 | 説明 |
---|---|
TZ | タイムゾーンを設定します。日本の場合はAsia/Tokyo です。 |
VOICETEXT_API_KEY | VoiceTextのAPIキーを設定します。 |
WIRELESS_IP | Dockerを動かすホストのIPアドレスを設定します。有線やWiFiなど複数のIPアドレスが存在する場合は、Google HomeからアクセスできるIPを記述してください。 |
GOOGLE_HOME_IP | Google HomeやNestのIPアドレス[2]を設定します。 |
FIREBASE_DATABASE_URL | 上記で控えておいたdatabaseURL の値を設定します。 |
FIREBASE_SECRET_KEY_PATH | この値は/google-home-voicetext/firebase.json から変更しないでください。 |
VOICETEXT_SPEAKER | 声のタイプを設定します。HIKARIを設定するとGoogle Homeの声に近くなります。詳しくはAPIマニュアルの話者一覧を参照してください。 |
firebase.jsonの配置
上述の「Firebaseの秘密鍵を生成」でダウンロードしてリネームしておいたfirebase.json
をgoogle-home-voicetext-docker配下に配置します。
google-home-voicetext-dockerの起動
以下の準備ができていることを確認します。
-
.my.env
が存在し、各項目が正しく設定されていること - firebase.jsonが存在すること
- Google HomeもしくはNestが同一ネットワークに接続されていること
準備ができていたらDockerコンテナを起動します。
docker-compose up -d
初回はコンテナのビルドが行われるため、やや時間がかかります。
docker-compose logs
を実行するとコンテナの中で行われていることが確認できます。正常に起動できた場合は下記のように表示されます。
動作確認
Cloud Firestoreで準備したgooglehome > chant > message
に適当な日本語を入力して、「更新」をクリックします。
Google HomeもしくはNestが喋ったら成功です。
同一ネットワーク内なら下記のようにREST APIで呼び出すことも可能です。
curl -X POST -d "text=テストです" http://{DockerのIPアドレス}:8080/google-home-voicetext
応用例
この環境があれば、任意のプログラムからGoogle HomeやNestを自在に喋らせる事ができるようになります。我が家ではGoogleカレンダーと連携してスケジュールを自動で読み上げさせたり、会社に無事ついたことを自動で家族に知らせたりするのに使っています。
Google HomeやNestは、基本的にこちらから話しかけないと何もしてくれないので、飽きてしまいがちです。もし使われなくなって眠っているGoogle HomeやNestがあったら、勝手にしゃべるように改造して遊んでみてはいかがでしょうか。
-
kaoru inoueさん、ありがとうございました。 ↩︎
-
Google HomeやNestのIPアドレスはスマートフォンのGoogle Homeアプリを開き、ローカルデバイスの設定アイコン(歯車のアイコン)をタップすると確認することができます。 ↩︎
Discussion