Google Homeがうちに来ていろいろいじり、気づくと結構いろんなことをさせることが
できるようになりました。
ひとまずまとめておきたいと思います。
やっていること
テレビ、電灯、エアコンのリモコン制御
音声入力で色々できるようになりました。
普段はあんまり使いませんが、出かけるときにリモコンが見つからないとか
いうときに便利です。
GoogleHomeが受け付ける発話コマンドの例
- 「テレビを10チャンネルにして」
- 「読売テレビにして」
- 「エアコンを付けて」
- 「今から5時間後に暖房をつけて」
- 「暖房タイマー、6時間」
- 「電気消して」
これらはSlackで発言することでも実行可能なので、寝室で夜中に目が覚めてしまった
ときに iPhoneのSlackアプリ暖房を付けて、リビングをしばらく暖めてからいく、
ということができました。
毎朝定時の天気読み上げ
朝8時に今日の天気を読み上げます。
(例)
「今日の天気は雨、降水確率は80パーセントです。」
近い予定の読み上げ
グーグルカレンダーに登録されている向こう3日分の予定を
朝と寝る前に読み上げさせています。
(例)
「近い予定が2件あります。明日の終日、ゴミ捨て。明日の14時からミーティング。以上です」
混雑状況の読み上げ
毎日予定されている移動(出勤とか)の前に、もし道路が混んでいたら
お知らせするようにしています。
(例:朝通勤前、いつもの車での予想移動時間を10分オーバーしていたら)
「道が混んでいるようです。予想移動時間は40分です」
使っている技術いろいろ
google-home-notify(改造版)
Google Homeにしゃべらせるためのものです。
うちの環境と趣味でちょっと改造してます。
- 音声をVoiceTextを使って自然で元気な声にする
- NAS上でmDNSとの依存が解決できなかったので、DNSを使わずIP直指定に変更
- ngrokで外部からのアクセス可能にしている部分を削除
Slack、Hubot
Google Homeに何かをさせるときには、Slackの特定チャンネルにコマンドを投げると
hubotが拾って実行してくれる形にしています。これがものすごく便利です。
つまり SlackがGoogle Homeのコマンドライン実行インターフェースと
実行ログの両方の役割をしてくれるんですよね。
例えばチャンネルに下のように手動でメッセージを送ると、GoogleHomeからは
「テスト」と喋ってくれます。
1 2 |
<code>&gt; homebot send say(テスト) </code> |
このシステムは下記の方法を使って実現しています。
このhubotは eRemote miniという万能リモコンを Google Home経由で使うための
ものですが、実は任意のスクリプトを呼び出すことも出来ます。
上の例でいうと、「say」というコマンドは、say.sh
というシェルスクリプトの実行
に割り当てており、このスクリプトは引数の文字列を curlで google-home-notifierに送る
だけです。
hubotは発言を見張っているだけなので、たとえば IFTTTから同じ内容をSlackに送っても
同じですし、別のスクリプトからSlackにメッセージを送っても可能です。
eRemote mini
赤外線リモコンで任意の信号を送ります。
IFTTT、myThings
位置情報、定時天気予報、GoogleHomeへの定形会話を条件にしてSlackにコマンドを投げてます。
cron、Pythonスクリプト、Google Maps API
NASのスケジューラで自作Pythonスクリプトを実行し、発話内容を組み立てて
Slackに送ってます。
google-home-notifier, hubot, スクリプト実行に使うサーバー
うちでサーバーに使ったはNASであるDS218+でした。Node.jsやPythonは普通にインストールできますし、
結構簡単に動かすことが出来ました。
最後に
だいたいこんな感じです。