Deep Tech. Blog

ガジェットや技術についての紹介や自身のメモとして記事を書いていくブログ

【Google Home】Google Homeに喋らせたい(Google Homeに喋らせる)

概要

 前回Raspberry PiがRaspbianで利用可能になりました.今回,やっとGoogle Homeに喋らせるところまでいきます. なお,今回の作業はRaspberry PiSSHで接続していることが前提です.

手順

Google Homeを喋らせるための構成要素

 まずGoogle Homeを喋らせるための構成要素を確認しておきます.

  • google-home-notifier
     node.jsをベースに作られたGoogle Homeにnotificationを送信して喋らせるソフトウェア.このソフトウェアが色々難しいことを肩代わりしてくれているので,簡単な入力でGoogle Homeを喋らせることが可能になる.
  • Raspberry Pi
     google-home-notifierを常時起動させておくためのサーバとして利用する.PCとかAWSとかでもできないことは無いと思うけど,コスト的なメリットが大きい.
  • ngrok
     ローカルネットワークのサーバをインターネット環境から簡単にアクセスすることができるようにするツール&サービス.Raspberry Pigoogle-home-notifierのサーバとして利用するので,そのサーバにインターネットからGoogle Homeが喋る内容を送信可能にすることが利用目的になります.今のところ,ルータの設定とか面倒なことをせずに使えるのがメリットかと思っています.
  • IFTTT
     様々なトリガー(イベント発生条件)を基にアクションを設定可能なWebサービス.今回の目標で言うと,GPSの位置情報をトリガーとして,Google Homeに喋らせる内容を送信するアクションを行なう.IFTTTについては次回使うことになります.

 ngrokについては,利用せずとも目標を達成する方法はあると思いますが,せっかくgoogle-home-notifierのサイトにもIFTTTとの連携ができていると書いてあるので使ってみたいと思います.

  1. 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
    
  2. 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は自分で設定しないと行けないのかと思ったら同時に動くようになっているんですね.

  3. CURLGoogle Homeに喋らせてみる
     google-home-notifierが正常に動作しているかGoogle Homeに任意のテキストを喋らせてみて確認してみます.上記実行例の中に,curlコマンドでnotificationを送る方法が書いてあるので,実際に試してみます.
     とりあえずはngrokは使用せず.ローカルのアドレスでnotificationを送ってみます.Google HomeIPアドレスは,iOSだと"Google Home"アプリのデバイス設定から確認することができます.このIPアドレス(うちの環境では192.168.1.5)にnotificationが送られるようにexample.jsを書き換えます.

          nano example.js
    


     コード中のdeviceNameipを自身の環境に合せて変更して下さい.例えば下記のような感じで,ipにはGoogle HomeIPアドレスを設定して下さい.

          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
    


次回

 CURLgoogle-home-notifierに任意のテキストをPOSTすることでGoogle Homeを喋らせることが可能になりました.次回はIFTTTとの連携を行なってみようと思います.