2021年1月にGoogle Homeを購入して、家庭に便利なシステムの構築に励んでいます。とりあえず、第一弾として表題の通り、家庭内要望として、NAS内にあるmp3ファイルを再生するシステムの製作を開始しました。
目標とする動作を決める
まず、目標とする動作を次のように定義します。
- Google Homeに話しかけると、話しかけた内容に応じた曲を再生する。
- 再生する曲はLAN内に設置されたNASに記憶しているmp3から選択する。
システムの構成
必要な物理デバイスおよび環境
手持ち部品であるGoogle Nest Mini、RaspberryPi Zero W、IOデータNASの組合せで実現することを付帯条件として設定しています。そこで以下の構成を考えました。なお、()は本記事で使用している機種です。
- Google Home (機種:google nest mini)
- RaspberryPi (RaspberryPi Zero W)
- NAS (IOデータlandisk)
- 無線LANとインターネット環境
- 開発用PC (Windows10搭載PC)
構成部品間で構築する各種機能
上記の構成部品を用いて、必要な仕組みを組み立てていきます。
1. Google HomeからNASにあるmp3データを再生する方法
インターネットで調べた限り、次のことがわかりました。
- Google Homeから、NASにあるmp3データを直接読みとって再生することはできない。
- Google Homeから、webサーバにhttpリクエストでmp3データを取り出せれば再生できる。(LAN内のローカルアドレスでwebサーバーにアクセスすることも可)
従って、LAN内に適当なwebサーバを立てて、httpリクエストに応じてNAS内のmp3を返せばGoogle Homeで再生できるはずと推定できます。そこで、RaspberryPi Zero Wでこれらの機能を備えることとします。
更に調べてみると、RaspberryPiと、node.jsのライブラリであるgoogle-home-notifierを用いると、Google Homeに指定したmp3を再生させたり、指定した文章を発話させたりするとができるという記事が多数見つかります。
2. Google Homeに対しての音声命令をRaspberryPiで受け取る方法
(方法1)Google Homeには、音声応答を作成するためのActions Consoleという仕組みが用意されており、会話文脈に基づいてGoogle Homeの音声応答を定義することができます。さらに、Actions Consoleでは音声応答に応じたwebhookを発生させることができますので、RaspberryPiをwebサーバにして且つWANからアクセス可能とすれば、Google Homeへの音声命令をトリガとしてRaspberryPiに命令を送ることができます。
(方法2)Google Homeへの音声命令に基づくwebhook等と利用してslackへの投稿を行い、投稿結果をhuboで検出する。
(採用方法)RasberryPiのwebサーバを外部に公開しない「方法2」を採用することにしました。具体的には、Google Homeへの音声入力からslackへの投稿には、製作の簡易性を重視してIFTTTを使用し、slackへの投稿の検出にはhubotを使用します。
システム構成のまとめ
ここまでをまとめて以下のような構成として、以降の製作を進めます。
![システム構成](https://www.littlelab.jp/wp-content/uploads/2021/02/diagrams_001-1024x573.png)