はじめに
Google HomeはIFTTT連携で声で命令して色んなことをさせることが出来ますが、まだ何かのトリガーをきっかけに自動で喋ってくれるという機能までは提供されていません。
今日は、GoogleHomeを自動的に喋らせる事が出来たので、そのやり方とハマった所の備忘録を紹介します。
最終的には、この記事の様に雨が振りそうになったら自動的に教えてくれるような事ができるようになります。
今回は、その前準備として、Raspberry pi上でイベントを実行したらGoogle Homeが喋ってくれるようになる所をまでをご紹介します。
実行結果
まず、簡単に実行結果から、以下のTwitterにあるように好きなコトバを喋らせています。
Google Homeに好きな言葉を喋らせる所まで成功。
— ゆう@あんのうん (@YuwUnknown) 2017年12月20日
次はcronで天気情報呟かせたり、株やFXに動きがある時に喋らせたり、IFTTT連携して重要な通知内容を喋らせたり夢が広がりまくり( ´∀`)
因みに「明日会社行きたくない」って言ってます。 pic.twitter.com/tIHQszGucj
他のサイトでも取り上げられている、google-home-notifierを用いて実現しております。
環境
以前買ったraspberry pi3をローカル環境でWebサーバとして、nodejsを突っ込んでます。
以下は簡単な全体構成 (nodejsでコマンドを受け付けて喋らせるだけなので、非常にシンプル)
Node.jsとnpmのinstall
$ sudo apt-get update $ sudo apt-get install -y nodejs npm $ sudo npm cache clean $ sudo npm install npm n -g $ sudo n stable
バージョン確認
$ node -v v7.3.0 $ npm -v 4.0.5
google-home-notifierのinstall
まずは下準備
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
nodejsを突っ込む
sudo apt-get install nodejs
git, libnss-mdns, libavahi-compat-libdnssd-devを突っ込む
sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev
libavahi-compat-libdnssd-devがinstallできない
私がハマったのですが、libavahi-compat-libdnssd-devを入れようとすると、以下な感じになってハマりました
$sudo apt-get install libavahi-compat-libdnssd-dev パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 インストールすることができないパッケージがありました。おそらく、あり得 ない状況を要求したか、(不安定版ディストリビューションを使用しているの であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移 動されていないことが考えられます。 以下の情報がこの問題を解決するために役立つかもしれません: 以下のパッケージには満たせない依存関係があります: libavahi-compat-libdnssd-dev : 依存: libavahi-client-dev しかし、インストールされようとしていません E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
う〜ん、絶妙な日本語。
どうやら、依存パッケージのlibavahi-client-devが入らないからinstall出来ないっぽいです。
では、実際にlibavahi-client-devが何故入らないのか、直接installを試みて確認してみます。
$ sudo apt-get install libavahi-client-dev パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 インストールすることができないパッケージがありました。おそらく、あり得 ない状況を要求したか、(不安定版ディストリビューションを使用しているの であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移 動されていないことが考えられます。 以下の情報がこの問題を解決するために役立つかもしれません: 以下のパッケージには満たせない依存関係があります: libavahi-client-dev : 依存: libavahi-client3 (= 0.6.31-5) しかし、0.6.32-2 はインストールされようとしています 依存: libavahi-common-dev しかし、インストールされようとしていません 依存: libdbus-1-dev (>= 0.60) しかし、インストールされようとしていません E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
どうやら、更に依存パッケージを入れようとして失敗しているぽいですね。
この依存パッケージは既に最新のverが入っており、ダウングレードになるので依存関係で勝手にダウングレードにならないようにエラーで止めてるみたいです。
今手元のrasspberry piは他に利用用途も無いので、ダウングレードで対応します。
(apt-getのダウングレードは、バージョン直指定で下げれます)
他何回か躓いたのですが、基本同様の判断で適切なパッケージをアテてます
$ sudo apt-get install libavahi-client3=0.6.31-5 $ sudo apt-get install libavahi-common3=0.6.31-5 $ sudo apt-get install libavahi-common-dev $ sudo apt-get install libdbus-1-3=1.8.22-0+deb8u1 $ sudo apt-get install libdbus-1-dev=1.8.22-0+deb8u1 $ sudo apt-get install libavahi-client-dev
これで依存関係の悪さがなくなったはずなので、以下のコマンドを進めます。
$ sudo apt-get install libavahi-compat-libdnssd-dev
上記でしれっと、バージョンを書いていますが、警告が出ていれば警告通りのバージョン番号を、よく分からなければ、以下のコマンドで最新のバージョンを見て突っ込んでます。
$ apt-cache policy libdbus-1-dev
gitからgoogle-home-notifierを取得
$ git clone https://github.com/noelportugal/google-home-notifier
npm install
$ cd google-home-notifier $ npm install
これで必要なパッケージが全て入ったはずです。
Google Home に喋らせて見る
コード準備
google-home-notifierには、Gitからcloneしたタイミングで、example.jsが入っており、必要な設定さえすればいきなり喋らせる事が出来ます。
以下を修正してみてください。(以下はexample.jsの中身
(以下に出て来るGoogleHomeのIPは、GoogleHomeアプリのデバイスから調べることが出来ます
...省略... var app = express(); const serverPort = 8091; // ポート番号、好きな番号で後でGoogle Homeに命令を送る特に指定 ...省略... ...省略... var deviceName = 'Google Home Room'; <- google homeの名前 var ip = '192.168.1.10'; // <- google homeのIPを記載 ....省略... ...省略... var language = 'ja'; // <- jaに変更 if (req.query.language) { language; } googlehome.ip(ip, language); googlehome.device(deviceName,language) // <-ここを追加 ...省略... ...省略... if (req.query.ip) { ip = req.query.ip; } var language = 'ja'; // <-ここをjaに if (req.query.language) { language; } googlehome.ip(ip, language); googlehome.device(deviceName,language) // <- ここを追加 ...省略...
google-home-notifierの起動
ここまで出来たら、以下のコマンドで立ち上げます。
node example.js
以下の様に出てくると思いますので、
$ node example.js Endpoints: http://〜〜〜/google-home-notifier https://〜〜〜/google-home-notifier GET example: curl -X GET https://〜〜〜/google-home-notifier?text=Hello+Google+Home POST example: curl -X POST -d "text=〜〜〜" https://〜〜〜/google-home-notifier
別途ターミナルを立ち上げて、以下のように入力します。
curl -X POST -d "text=明日会社行きたくない" http://Raspberry PiのIP:コードで指定したポート番号/google-home-notifier
これで以下のような結果になります。
Google Homeに好きな言葉を喋らせる所まで成功。
— ゆう@あんのうん (@YuwUnknown) 2017年12月20日
次はcronで天気情報呟かせたり、株やFXに動きがある時に喋らせたり、IFTTT連携して重要な通知内容を喋らせたり夢が広がりまくり( ´∀`)
因みに「明日会社行きたくない」って言ってます。 pic.twitter.com/tIHQszGucj
Twitterにも書きましたが、これでGoogleHomeでできなかった、自動で喋らせると言う所が可能になりました。
(一番はIFTTTのThat部分を早くGoogle Assistantが対応してくれることですが)
指定時間になったらのリマインダや、雨雲が近づいている時に洗濯物大丈夫?の注意喚起をGoogle Homeが行ってくれることになるので、生活が一層楽になりそうですね。