【Google Home】Google Homeに喋らせたい(Google Homeに喋らせる)
概要
前回,Raspberry PiがRaspbianで利用可能になりました.今回,やっとGoogle Homeに喋らせるところまでいきます. なお,今回の作業はRaspberry PiにSSHで接続していることが前提です.
手順
Google Homeを喋らせるための構成要素
まずGoogle Homeを喋らせるための構成要素を確認しておきます.
- google-home-notifier
node.jsをベースに作られたGoogle Homeにnotificationを送信して喋らせるソフトウェア.このソフトウェアが色々難しいことを肩代わりしてくれているので,簡単な入力でGoogle Homeを喋らせることが可能になる. - Raspberry Pi
google-home-notifierを常時起動させておくためのサーバとして利用する.PCとかAWSとかでもできないことは無いと思うけど,コスト的なメリットが大きい. - ngrok
ローカルネットワークのサーバをインターネット環境から簡単にアクセスすることができるようにするツール&サービス.Raspberry Piをgoogle-home-notifierのサーバとして利用するので,そのサーバにインターネットからGoogle Homeが喋る内容を送信可能にすることが利用目的になります.今のところ,ルータの設定とか面倒なことをせずに使えるのがメリットかと思っています. - IFTTT
様々なトリガー(イベント発生条件)を基にアクションを設定可能なWebサービス.今回の目標で言うと,GPSの位置情報をトリガーとして,Google Homeに喋らせる内容を送信するアクションを行なう.IFTTTについては次回使うことになります.
ngrokについては,利用せずとも目標を達成する方法はあると思いますが,せっかくgoogle-home-notifierのサイトにもIFTTTとの連携ができていると書いてあるので使ってみたいと思います.
node.jsのインストール
google-home-notifierのサイトに記載されている"Raspberry Pi"の項目と同様に下記のコマンドでnode.jsをRaspberry Piにインストールします.curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install nodejs
google-home-notifierのサイトの方では上記"setup_7.x"になっていたけど,それだとうまくいかなかったので"setup_8.x"に変更しています.
下記はその他の依存パッケージっぽいです.sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev
加えて,google-home-notifierのサイトではインストールされている前提になっていますが,npm(node.jsのパッケージ管理ツール)を使うので下記コマンドでインストールしておきます.sudo apt-get install npm
google-home-notifierのインストール
google-home-notifierのサイトの記載に従って下記コマンドでインストールを行ないます.npm init
はサイトには書いてないけれどやって方がいいみたい.npm init npm install google-home-notifier git clone https://github.com/noelportugal/google-home-notifier cd google-home-notifier npm install
google-home-notifierのサイトの情報に従って,
npm install
後のプログラムの変更を行なっておきます.nanoかなにかのテキストエディタでbrowser.js
を書き換えます.nano node_modules/mdns/lib/browser.js
変更箇所は下記の通り.最後の方にあります.
この部分を変更する. Browser.defaultResolverSequence = [ rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo(), rst.makeAddressesUnique()];
以下のように変更
Browser.defaultResolverSequence = [ rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]}), rst.makeAddressesUnique()];
正常に動作するかexample.js
を動かして試してみます.下記コマンドでexample.js
を実行してみて,google-home-notifierのサイトのような実行例が表示されればOKです.node example.js
以下が実行例.WARNINGが何行か表示されていましたが,割愛しています.また,XXXX部分は適当な文字列が入っています.
Endpoints: http://192.168.1.20:8091/google-home-notifier https://XXXX.ngrok.io/google-home-notifier GET example: curl -X GET https://XXXX.ngrok.io/google-home-notifier?text=Hello+Google+Home POST example: curl -X POST -d "text=Hello Google Home" https://XXXX.ngrok.io/google-home-notifier
ngrokは自分で設定しないと行けないのかと思ったら同時に動くようになっているんですね.CURLでGoogle Homeに喋らせてみる
google-home-notifierが正常に動作しているかGoogle Homeに任意のテキストを喋らせてみて確認してみます.上記実行例の中に,curlコマンドでnotificationを送る方法が書いてあるので,実際に試してみます.
とりあえずはngrokは使用せず.ローカルのアドレスでnotificationを送ってみます.Google HomeのIPアドレスは,iOSだと"Google Home"アプリのデバイス設定から確認することができます.このIPアドレス(うちの環境では192.168.1.5)にnotificationが送られるようにexample.js
を書き換えます.nano example.js
コード中のdeviceName
とip
を自身の環境に合せて変更して下さい.例えば下記のような感じで,ip
にはGoogle HomeのIPアドレスを設定して下さい.var deviceName = `Google Home mini`; var ip = `192.168.1.5`; `pl` を `ja`に置換
そして,example.js
を再度実行します.別のSSHセッション等で下記コマンドを実行することで任意のテキストをnotificationとしてexample.js
に送信します.当然ですが別PCからexample.js
にコマンドを送信する場合はlocalhostではなくexample.js
を動かしている環境のIPアドレスを指定して下さい.curl -X POST -d "text=こんにちは Google Home" http://localhost:8091/google-home-notifier
次回
CURLでgoogle-home-notifierに任意のテキストをPOSTすることでGoogle Homeを喋らせることが可能になりました.次回はIFTTTとの連携を行なってみようと思います.