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との連携を行なってみようと思います.

【Google Home】Google Homeに喋らせたい(Raspbianインストール)

概要

 前回Raspberry PiマザーボードHDMIモニタとケースを取付けました.次はOSとしてRaspbianをインストールします.

Raspbianインストール手順

  1. Raspbianのダウンロード
     Raspberry Piの公式サイトのdownloadページから「RASPBIAN STRETCH WITH DESKTOP」をダウンロード.1.6GBあり時間がかかるのでゆっくり待つ.ダウンロードしたファイルは「2018-06-27-raspbian-stretch.zip」で解凍後,「2018-06-27-raspbian-stretch.img」というファイル名で約4.7GBのOSイメージが入っています.

  2. microSDカードのフォーマット
     Raspberry PiブートローダFAT16FAT32しか対応してないということなのでFAT32でフォーマット.ちなみにFAT32だと1パーティションで32GBが最大.
     購入したmicroSDカードをPCで読ませると既にFAT32でフォーマットされていました.このまま使ってもいいとは思いますが,念のため自身でフォーマットします.フォーマッタはSD Associationのソフトウェアを利用します.

     ↓購入時の段階でFAT32でフォーマット済み
    f:id:deep_tech:20180901232941p:plain
     ↓フォーマット完了画面
    f:id:deep_tech:20180901232939p:plain

  1. OSイメージをmicroSDカードに書き込む
     OSイメージの書き込みにはDD for Windowsを利用します.ダウンロードしたDD for Windows(DDWin.exe)を管理者権限で起動し,下図のように対象ディスクに手順2でフォーマットしたmicroSDカードを指定,対象ファイルに手順1でダウンロードしたOSイメージファイルを指定します.書き込みを開始しようとすると下図のような警告が出ますが,「はい」で進めます.
    f:id:deep_tech:20180901232936p:plain f:id:deep_tech:20180901232934p:plain f:id:deep_tech:20180901232931p:plain
     書き込み終了後,下図のようなファイル構成になっていました.
    f:id:deep_tech:20180901232929p:plain

  2. Raspberry Pi起動
     OSイメージを書き込んだmicroSDカードをRaspberry Piマザーボードに挿入,マウス・キーボード・有線LANケーブルを接続して,最後に電源ケーブルとなるUSBケーブルを接続します.そうすると無事起動.起動後,初期設定のウィザードが勝手に動くので指示に従って設定を進めていきます.ここでWiFiの設定も可能.それにしてもHDMIモニタが小さくてギリギリ文字が読めるレベルです.たぶん解像度の設定を適切にすれば読みやすくなるはず...

     ↓microSDカード挿入後
    f:id:deep_tech:20180901232837j:plain
     ↓USBケーブル接続後起動画面
    f:id:deep_tech:20180901232839j:plain
     ↓いくつか設定があるよ画面
    f:id:deep_tech:20180901232846j:plain
     ↓国・言語・タイムゾーン設定
    f:id:deep_tech:20180901232851j:plain
     ↓'pi'アカウントのパスワード設定
    f:id:deep_tech:20180901232854j:plain
     ↓WiFi設定
    f:id:deep_tech:20180901232858j:plain
    f:id:deep_tech:20180901232901j:plain
     ↓アップデートをチェックして更新作業,結構待たされます.
    f:id:deep_tech:20180901232903j:plain
    f:id:deep_tech:20180901232906j:plain
    f:id:deep_tech:20180901232909j:plain
     ↓Rebootして利用開始
    f:id:deep_tech:20180901232911j:plain

  3. VNCSSHの有効化
     RaspbianのGUIメニューの「設定」⇒「Raspberry Piの設定」⇒「インターフェイス」タブにて,VNCSSHを有効化します.これでVNCSSHでWindowsPCから接続可能になったはず.
    f:id:deep_tech:20180901232916j:plain

  4. IPアドレスの確認
     VNCSSHで接続するためにRaspberry PiIPアドレスを知る必要があります.GUIではIPアドレスが確認出来なかったのでターミナルを起動して下記コマンドで確認.
       ifconfig    

  5. WindowsPCからVNCRaspberry Piに接続
     RealVNCをWindowsPCにインストールしてRaspberry Piに接続します.なんだか暫く見ないうちにRealVNCが近代的なGUIになってた...

  6. IPアドレスの固定
     現在Raspberry PiIPアドレスDHCPで取得されており,今後VNCで接続する際にIPアドレスが度々変わっていると面倒なのでIPアドレスを固定化しておきます.
     ターミナルにて下記コマンドでnanoというテキストエディタでdhcpcd.confファイルを開きます.
       nano /etc/dhcpcd.conf  

     下図のようにテキストを追記し,WiFi接続のIPアドレスを固定しました.
    f:id:deep_tech:20180901232919p:plain f:id:deep_tech:20180901232943p:plain

  7. (おまけ)Raspberry PiにWindowsPCからSSHで接続
     VNCからターミナルを触っていればそれでいい気もしたのですが,念のためSSHで接続可能か確認しておきます.WindowsPCにSSHクライアントを入れておけば下記コマンドで接続出来ます.
       ssh [ユーザ名]@192.168.XXX.XXX  
     SSHクライアントはTeratermとかOpenSSHとか色々選択肢はあると思います.私の場合はたまたまインストール済みだったOpenSSHを利用しました.ユーザ名は特に設定していなければ「pi」でパスワードは初期設定のウィザードで設定したものです.

次回

 Raspberry Piの初期セットアップが終りました.これからGoogle Homeを喋らせるために必要なソフトウェア等をインストールしていこうと思います.

【Google Home】Google Homeに喋らせたい(HDMIモニタ+ケース組立て)

概要

 先日Amazonで購入したRaspberry Pi一式(前回参照)が届いたのでHDMIモニタや付属のケースを組立てます.

Raspberry Pi 一式確認

組み立ての流れ

  1. マザーボードヒートシンク貼付
     ヒートシンクセットをマザーボードに貼付けます.背が高いヒートシンクが2つあり,これらをマザーボードの表面の2つのチップの上に貼付けます.もう1つの背の低いヒートシンクは裏面のチップの上に貼付けます.ヒートシンクには両面テープのような感じで粘着質になっています.タダの両面テープには見えないので熱伝導率の高い物質なのかも知れません. f:id:deep_tech:20180827223304j:plainf:id:deep_tech:20180827224108j:plain

  2. マザーボードをケースの底面部に固定
     マザーボード4隅のネジ穴に合うサイズの穴が空いたパーツがケース底面部のパーツになります.このパーツにマザーボードを固定します.固定には4つのナットと長めのネジ,透明なスペーサーを使います. f:id:deep_tech:20180827223933j:plain  マザーボードと底面部パーツの間には透明なスペーサーを挟むことを忘れないようにします. f:id:deep_tech:20180827223217j:plain

  3. HDMIモニタとマザーボードを接続
     ケース側面部のパーツとHDMIコネクタ部の位置が適切になっていることを確認し,問題なさそうならHDMIモニタをマザーボードに接続します. f:id:deep_tech:20180827223220j:plain f:id:deep_tech:20180827223224j:plain

  4. ケース上部の取付け
     ケース上部パーツをHDMIモニタの位置を確認しつつ取付けます.底面部パーツと上部パーツを長いスペーサーとネジで固定します. f:id:deep_tech:20180827223230j:plainf:id:deep_tech:20180827223227j:plain

小さくていいですねー.OSを入れて動かすのが楽しみです.次回はOSをインストールしてVNC等でWindowsPCから操作できるようにしようと思います.

【Google Home】Google Homeに喋らせたい(物品購入)

概要

 Nature Remoを使ったりして声で家電をコントロールして遊んでみたりしたものの,その後イマイチ利用の機会がなくなっていたGoogle Home.下記記事に触発されてうちのGoogle Homeくんにも何か喋らせたくなったので,早速必要なモノを購入しました. chasuke.com

目標

 Google Homeに何か喋らせたいと言っても,何を喋らせるのか? 真っ先に思いついたのは職場からの帰宅タイミングや最寄り駅に到着したタイミングで「職場を出たよー」とか「○○駅に着いたよー」と喋らせること.自動的にそんな感じで家族に伝えてくれればショートメールで連絡する必要がなくなって便利になりそうと思ったわけです.

 上記の実現を下記の2ステップで行なう予定です.

  • IFTTTのボタンウィジェットをトリガーとして定型文を喋らせる
  • スマホの位置情報をトリガーとして定型文を喋らせる

 基本的に先人達の追試をしていけば実現可能とは思っていますが,躓きどころなどがあればメモとして書いておこうと思います.

購入した物

 Google Homeスマホ,ネットワーク環境は既にあるので,それ以外でGoogle Homeに喋らせるのに必要な下記のモノを購入しました.なお,衝動的に購入しているため足りないモノや理解不足があるかも知れません.

 電源はUSBケーブルから取ることになりますが,AnkerのUSB電源アダプタが既にあるのでこれで事足りると判断.もしこれの出力不足なら専用のアダプタを購入予定.

 明日,2018/08/25,一式届くのでRaspberry Piのセットアップ等進めてみたいと思います.