Google Home にプッシュ通知機能を実装する
東京で4年ぶりに大雪 が降ったことがキッカケで、Google Home (mini) に雪が降る前のプッシュ通知機能を実装してみました。
声がいつもと違うのは仕様です。
以下の3つに分けて機能を実装しています。
- Google Home をプッシュ通知に対応させる
- 外部から叩けるようにする
- IFTTT で天気予報と連動させる
必要なもの
- Google Home (mini)
- LAN 内に立てられるサーバ(RaspberryPi や VM など)
- (簡単な)Node.js の読み書き力
Google Home でプッシュ通知の実現方法
Google Home はユーザが話しかけることをトリガーとして起動するため、(通常では)勝手に喋りだすことができません。
そこで、google-home-notifier を使うことでプッシュ通知を実現します。
仕組みとしては、
- 任意のテキストを Google 翻訳に送信
- 読み上げ用の音声データを取得
- Chromecast のプロトコルを使い、Google Home から再生
という流れで実現しているようです。そのため、普段とは違う声になるのですね。
環境構築
適当なサーバに構築していきます。今回は、先日作った Amazon Linux 2 を活用します。
必要パッケージ追加
yum で3つほどインストール。git も入っていなかったとは。。。
# yum install git gcc-c++ avahi-compat-libdns_sd-devel
Node.js 追加
セットアップ用スクリプト からリポジトリを追加、yum でインストールします。
# curl -sL https://rpm.nodesource.com/setup_8.x | bash
# yum install nodejs
# node -v
google-home-notifier 追加
git clone
後に npm install
を実行するだけです。
$ git clone https://github.com/noelportugal/google-home-notifier
$ cd google-home-notifier
$ npm install
root ユーザで実行すると上手くいかない場合があります。
IP アドレスを確認
実装に入る前に、Google Home の IP アドレスを確認します。
Google Home アプリからデバイス設定を開くと、画面の一番下に記載されています。
プッシュ通知サンプル
ライブラリ内の example.js
を参考に、簡単なサンプルを作成しました。
deviceName
には Google Home の名称、ipAddress
には先ほど確認したアドレスを記載します。
ちなみに「雪が降る」と書くと ゆきがおりる と読まれるため、ひらがなで表記しています。
このプログラムを実行すると、突然 Google Home が喋りだします。
$ node snow.js
Webhook 化する
次は、このプログラムを外から呼べるようにします。ngrok を使いました。
GET リクエストを受信した場合に、先ほどと同じ発声処理が走ります。
起動するとエンドポイントが表示され、この URL にアクセスすることで Google Home が喋るようになります。
$ node getServer.js
Endpoints: https://xxxxxxxx.ngrok.io
天気予報と連動させる
IFTTT を使用して、天気予報と先ほどのエンドポイントを紐付けます。
Weather モジュールで、明日の天気が雪の場合 のトリガーを作成。
天気の場所は Settings から登録できます。
Webhook モジュールで、先ほどの ngrok エンドポイントを指定します。
これで完成です。
プッシュ通知の内容を動的生成
完成はしましたが、汎用性を高めるためにもう少し修正を加えます。
リクエストを GET ではなく POST で受け、text
に定義された内容を喋るように書き換えました。
起動時には、POST リクエストの例を表示しています。
$ node postServer.js
POST example:
curl -X POST -d "text=明日は雪がふるそうですよ。" https://xxxxxxxx.ngrok.io
IFTTT の Webhook も POST に変更しておきます。
これで雪の前日に Google Home が教えてくれるため安心です。(何時に動くのかは知りません)
参考リンク
- GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます – Qiita
- Google Home開発入門 / google-home-notifier解説 – Qiita
- node.js 8.x をyumでインストールする(centos7.x) – Qiita
- 【IFTTTでレシピ作成】雨が振りそうになったらLINEに通知するレシピを作ろう | Free Style
- 情報的備忘録 : 【Google Home】話しかけたキーワードの検索結果をPCに表示させる
まとめ
- Google Home にプッシュ通知を実装しました
- ngrok 経由で外から呼べるようにしました
- 喋る内容は POST で動的に指定できます
- IFTTT の天気情報と連動させ、雪予告の機能を実装しました
一つ課題として、エンドポイントが分かると誰でも叩けてしまう状態のため、IFTTT からのリクエストに認証用パラメータを追加するなど対策すると安心です。
Webhook を一つ作りさえすれば他にも応用が効くため、ぜひお試しください。
ディスカッション
コメント一覧
まだ、コメントがありません
フォローする
カテゴリー
最近の投稿
ブログについて