Google Homeでやったことまとめ


# はじめに
この記事は [スマートスピーカー Advent Calendar 2017](https://qiita.com/advent-calendar/2017/smart-speaker) 10日目の記事です。

Google Homeを購入してからこの2ヶ月でやってきたことをまとめたいと思います。
が、ほとんどQiitaへ投稿した記事の紹介になってしまいました。

大体見たことあるという方は[こちら以降](#記事化してない細々としたもの)をどうぞ。

なお記事の後半でコスト計算していますが、本記事で紹介した内容は最低6,000円あれば大体実現できます。
※各所で本日までのGoogle Home半額セール前提。まだ購入されてない方はお急ぎを
※[ツクモは25日までセール実施のようです](https://akiba-pc.watch.impress.co.jp/docs/wakiba/find/1095744.html)

# 薬の服用ログ
[Google Home、IFTTT、Googleスプレッドシートを使って独自音声コマンドでログをとる（ついでにNode.jsやngrokやらも使ってLINEやGoogle Homeに通知する）](https://qiita.com/miso_develop/items/be562d8a823ad2639d94)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/61d65c6f-6259-d695-980f-88ea6c319e2c.png)
Google Homeを買って最初に作ったのがこれです。

私は毎日ヘルニアの痛み止めとサプリを飲んでるのですが、痛み止めを飲み忘れるととても大変なことになります。
なので飲み忘れを予防すべく、服薬の記録と、定時までにログがないときにGoogle HomeとLINEへ通知するシステムを作りました。

このシステムは今でも毎日お世話になっており、飲み忘れは激減しました。
LINEには怒られまくりですが…
なお外出先ではスマホのGoogle Assistantから記録を行います。

[Googleスプレッドシート(Google Homeから自動記録)]
![image.png](https://qiita-image-store.s3.amazonaws.com/0/207109/ff495b6a-d408-6e7f-77c8-c7b4bf414955.png)

[LINE通知]
![image.png](https://qiita-image-store.s3.amazonaws.com/0/207109/ee71d34f-af5b-d62a-df24-7b03aa6377bd.png)



# 照明を操作
[Google Home、IFTTT、Firebase、Node.js、irMagicianを使ってシーリングライトを音声操作する](https://qiita.com/miso_develop/items/c2008235cb4a8567cfa9)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/70555b4f-aedb-f8ec-0803-5002a3aae5c4.png)
次に作ったのはラズパイを使用して赤外線リモコン家電を操作するやつです。
我が家ではリビングでリモコン操作している家電として照明、テレビ、エアコンがあり、それらを全部Google Homeから操作してやろうという魂胆です。

しかしそんな目論見は脆くも崩れ去りました。
irMagicianというUSB接続できる赤外線学習リモコンを購入し照明は操作できました。
が、テレビはリモコンが実は赤外線方式じゃなくて操作不可、エアコンはirMagicianのメモリオーバーという結果に。

赤外線操作に関してはirMagicianよりも後述するRM mini3の方がおすすめです。
ちなみにirMagicianには温度センサ付きのものがあり、私はそれを購入していたので現在は温度計として活躍しております。



# PS4を操作
[Google Homeに話しかけてPS4を操作してみる](https://qiita.com/miso_develop/items/0175c5f45a1e90464234)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/19f48f65-b82a-420e-f124-b0676e1767aa.png)
テレビの赤外線操作がダメということで、テレビのメインの使い道であるPS4を操作してみることにしました。
「ps4-waker」というNode.jsモジュールを使っています。

操作と言っても起動、スタンバイやホーム画面の操作、アプリ起動とかです。
○ボタンとかR1とかコントローラーのボタン信号までは送れないのでBotとかは作れません。

HDMI連動させているのでPS4の起動に合わせてテレビも起動してくれますが、PS4に連動してテレビを消すことができないのがネックでした。
それも次の記事で解決しています。



# テレビを操作
[Google Homeに話しかけてテレビの電源を操作してみる](https://qiita.com/miso_develop/items/234f81a7649af08b2861)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/613b1dc8-fa9b-b676-3d97-6fad2bca12a0.png)
ラズパイとテレビをHDMI接続することでHDMI CECという規格でテレビを制御してみました。
「cec-client」を使用し、テレビのオンオフと音量上げ下げまで操作できました。

ちなみにチャンネル操作とかもHDMI CECでできるとは思うのですが、秋葉で安く売ってた汎用テレビリモコンの赤外線を学習して解決してしまいました。



# エアコンを操作
[Google Homeに話しかけてエアコンを操作してみる](https://qiita.com/miso_develop/items/204b2e16b1e58e52dc07)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/04b56ddc-a613-c5fd-4a9f-c154d1a2007f.png)
「RM mini3」という激安Wi-Fi搭載赤外線学習リモコンを使用してエアコンを操作できるようにしました。
irMagicianでメモリオーバーしたエアコンも、RM mini3でなんとか操作できました。
価格もirMagicianの半分という…

ただしこの製品技適マークがないので、日本国内で使用する場合は「eRemote mini」という日本代理店が販売してる方を使いましょう。



# Windowsを操作
[Google Homeに話しかけてWindowsを操作してみる](https://qiita.com/miso_develop/items/7a02908aad2a5cf192d0)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/567cd645-7f14-2fb8-bb70-adf42924a30e.png)
Windowsを操作できるようにしました。
起動やスリープだけでなく、コマンド実行できることは大体できます。
Excel起動してとか、バックアップ実行してとか。

個人的には革新的だと思ったのですが、私自身実際は起動やスリープぐらいしか使っていません。
それでも家帰って着替えながら「OK Google PCつけて」で起動してくれるのは便利です。
Google Homeの真髄はこのながら操作にあると思います。

てかCortanaでいいじゃんって話だったりします？
でもWindows起動は流石にCortanaじゃ無理ですよね…？



# Actions on Googleから家電を操作
[IFTTTを使わずActions on Google(Dialogflow)でGoogle Homeから家電を音声操作してみる](https://qiita.com/miso_develop/items/28cbfcdfb61d455ce346)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/82189d4e-3474-d170-2962-105ae512bb04.png)
今まではGoogle Homeでの音声トリガーにIFTTTを使っていましたが、若干ラグが長めなのが気になっていました。
Actions on GoogleでGoogle Assistantアプリ化してしまえばもう少し早くなるかなと思い挑戦してみました。

結果、応答速度の改善はあったものの、Assistantアプリ起動中にあらゆる音声を受け付けてしまい、我が家では子供の騒ぎ声でGoogle Homeがテンパってしまって使い物になりませんでした。
「電気つけて」や「テレビつけて」といった単発の命令ならIFTTTで十分です。



# Google Homeと○✕ゲーム
[Google Homeと○✕ゲームしてみる](https://qiita.com/miso_develop/items/7a41e74d178920e926a8)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/c5213dce-ec3e-ed65-d6c6-31f8450a4986.png)
Actioins on GoogleにてDialogflowとFirebaseを用いてGoogle Homeと○✕ゲームするサンプルを作ってみました。
AIをちゃんと実装すれば目隠し将棋アプリとかもいけますね。

ほんとは対人実装したかったんですが、現状の仕様だと厳しそうです。
Assistantアプリ起動中のPushとかできればいいのですが…



# ESP32でLチカ
[Google Homeに話しかけてESP32でLチカしてみる](https://qiita.com/miso_develop/items/9c81753a69cb80e006a9)
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Lチカで満足 <a href="https://t.co/GMdCtQ3Tcp">pic.twitter.com/GMdCtQ3Tcp</a></p>&mdash; 田中みそ (@miso_develop) <a href="https://twitter.com/miso_develop/status/934643561584214021?ref_src=twsrc%5Etfw">2017年11月26日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Google Homeからの赤外線操作から一歩進んでWi-Fiモジュールで電子工作してカーテンの開け閉めを自動化したくなりました。

安価なWi-Fiモジュールを探していたら見つけたのがESP32です。
本体だけなら650円ほどです。

これまた驚くほど簡単にWi-Fi通信できてしまいました。
とりあえずはGoogle HomeからLチカまで。

なお現在のカーテン自動化進捗は↓のような感じです。
完成してればこれをアドベントカレンダーに書こうと思ってました。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">カーテン自動化進捗。<br>あとは箱に詰めるだけ… <a href="https://t.co/1jo3RRMEhS">pic.twitter.com/1jo3RRMEhS</a></p>&mdash; 田中みそ (@miso_develop) <a href="https://twitter.com/miso_develop/status/939169730606202880?ref_src=twsrc%5Etfw">2017年12月8日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



# Google Homeアプリをリリース
[Google Homeアプリをリリースしてみた(実装編)](https://qiita.com/miso_develop/items/bc22d55788c025c32c39)
[Google Homeアプリをリリースしてみた(申請編)](https://qiita.com/miso_develop/items/c56fd334f333160a9130)
![image](https://qiita-image-store.s3.amazonaws.com/0/207109/df9e1b63-ffa6-84d1-f846-d7e12698ced3.png)
「クロマチックチューナー」というGoogle Homeアプリをリリースしました。
楽器のチューニング用アプリです。
皆様お持ちのGoogle Homeやスマホからご利用できます。

Google Homeアプリ(Google Assistantアプリ)のリリースってどんな感じなんだろって確認がメインでした。
アプリ自体はC4～B4の正弦波のmp3を4秒鳴らすというだけです。
本当はC3～B5ぐらいの幅にしようとしてたのですがサボりました。

私はギターのチューニングに使っていますが、楽器から手を離さずチューニングを行えるのは案外便利でした。

記事ではアプリのつくりや審査でリジェクト食らった内容等をまとめているので、Google Homeアプリ制作のご参考になれば幸いです。



# 記事化してない細々としたもの
ほかにもいくつか細々とした機能を実装しています。

## LINE送信
現在育休中で基本家にいる妻が私にLINEするためにIFTTTのみで作成しました。

## 授乳ログ
薬服用ログと仕組みは同様で、子供の授乳やオムツ替えを記録する用です。

## GUIから家電操作
Google Home関係なくなっちゃいますが、一応Google Homeで構築した仕組みを利用し一枚っぺらのHTMLからも操作できるようにしてます。
Firebase Hostingに置いてあり、もちろん外からも操作可能です。

※2017/12/20追記 記事にしました
[WebからGoogle Homeを喋らせたり家電操作したりしてみる](https://qiita.com/miso_develop/items/09fcce17162db49dec55)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Qiita記事用動画です。 スマホアプリに見せかけたWebページよりGoogle Homeや家電制御。 <a href="https://t.co/fVZxGhLnmN">pic.twitter.com/fVZxGhLnmN</a></p>&mdash; 田中みそ (@miso_develop) <a href="https://twitter.com/miso_develop/status/943143730864734208?ref_src=twsrc%5Etfw">2017年12月19日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 温度計
「部屋の温度は？」と話しかけるとirMagicianの温度センサで取得した部屋の温度をgoogle-home-notifierで返してくれます。

## チューナー
Google Homeアプリの「クロマチックチューナー」を作る前にラズパイのローカル環境で実装してたものです。
「A鳴らして」とかって言うとgoogle-home-notifierでmp3を鳴らします。

## Google Homeに話しかけてハンドスピナー回してみた
クソツイってやつですね。
最近ハンドスピナー買ったもので…

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Google Homeに話しかけてハンドスピナー回してみた <a href="https://t.co/q4k8EjzcKF">pic.twitter.com/q4k8EjzcKF</a></p>&mdash; 田中みそ (@miso_develop) <a href="https://twitter.com/miso_develop/status/937145639229460480?ref_src=twsrc%5Etfw">2017年12月3日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



# 「Google Homeを使いたおす！ DialogflowとAoG Meetup」へ参加
[Google Homeを使いたおす！ DialogflowとAoG Meetup](https://gcpug-tokyo.connpass.com/event/71279/)

![image](https://qiita-image-store.s3.amazonaws.com/0/207109/5c379787-ec4b-00c8-11c3-f587f0abc1cc.png)

Meetupってやつに初めて行ってきました。
ためになる素晴らしい発表を聞けてとても良い経験になりました。

スライドは↓にて見れます。
[イベント資料一覧](https://gcpug-tokyo.connpass.com/event/71279/presentation/)

以下ざっくりメモ。

* VUI
    * 出力結果が直列でしか取得できないため、確認に時間がかかる
        * とにかくステップを短く！
* Entityでは同音異語(例：リンゴのappleとiPhoneのappleとか)はどうしようもないので上手く避ける
* [flatfisherさん](https://qiita.com/flatfisher)がEntityをCSVアップロードできる便利ツールを作ってた！
    * 以下のアドベントカレンダーにて公開されています！
        * 「[DialogflowのEntityを爆速で作成するライブラリを作った](https://qiita.com/flatfisher/items/5b43d2b4b01962967833)」
* Cloud Pub/Subというのがグローバル接続に使えるらしい
* [AIY Voice Kit](https://aiyprojects.withgoogle.com/voice/)という自作できるGoogle Homeがあるらしい
    * 中身はAssistannt SDKを乗せてる
* FulfillmentでJSONのスキーマ構成がバリデエラーで大変
    * Actions on Googleライブラリでやるといいかも
* Actions on GoogleやDialogflowを使わずJSONのやりとりだけでもアプリ作れる
* Handoff
    * Google HomeからスマホとかのAssistantへ誘導する機能
* 最近のアプデでPush通知できるようになったっぽ
* MAGELLAN BLOCKS
    * GUIで機械学習できるサービス
* スマートスピーカー(音声アシスト)の先駆けはPepper
* IFTTT量産問題
    * 解決策なし…
* CUIでいう--helpみたいな使い方を教えるのを作っておくと便利
* [このスライド](https://goo.gl/kXdxgr)おすすめ
    * ほんとおすすめ。初めてDialogflow触るなら一読してから



# AI音声アシスタント勉強会へ参加
[【満員御礼】【増枠！】【東京】AI音声アシスタント勉強会 【#7】](https://robtstart.connpass.com/event/71547/)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">生Echo初めて見た！<a href="https://twitter.com/hashtag/%E3%83%AD%E3%83%9C%E3%82%B9%E3%82%BF%E5%8B%89%E5%BC%B7%E4%BC%9A?src=hash&amp;ref_src=twsrc%5Etfw">#ロボスタ勉強会</a> <a href="https://t.co/cszSWu62UN">pic.twitter.com/cszSWu62UN</a></p>&mdash; 田中みそ (@miso_develop) <a href="https://twitter.com/miso_develop/status/935112179174449152?ref_src=twsrc%5Etfw">2017年11月27日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


ロボスタさん主催の勉強会に行ってきました。
この勉強会ではGoogle Home、Amazon Echoや様々なスマートスピーカーのお話を聞けました。

以下ざっくりメモ。

* Echo ButtonっていうAlexaと連携できるボタンがある。夢が広がる
* AISonarっていう業務用スマートスピーカーがあるらしい
    * 審査通さずに自作アプリを使える
    * 不要な機能制限もできる
    * 個人用に欲しい…
* アプリ名大事。覚えてないと起動できない
    * スマホアプリとかはアイコン起動だから名前とか覚えてなかったりする
* Alexaのスキル継続率は2週間後で3%ほど
    * Amazonのキャンペーンでクソアプリが氾濫してるのも一因だけど上記のアプリ名もきっと一因
* Google Homeのワード認識は日々変化してる
    * 例）「ロボ トリビア」がある日突然「robot リビア」と認識された
        * アプリ名に指定したワードでこれが発生するとアプリ起動できなくなる
            * どころか別のアプリが起動するかも
* Google Homeアプリで暗黙的な呼び出しも出来るみたい
* スマートスピーカーアプリ開発すると喉枯れるので加湿器推奨



# コスト
Google Homeを使って主にホームオートメーション化を行ってきたわけですが、こういったIoTではコストが重要ですよね。
これまでに費やしたコストを計算してみたいと思います。


|買ったもの|価格(&yen;)|購入元|備考|
|---|--:|---|---|
|Google Home|10,000|[ビックカメラ](https://www.biccamera.com/bc/item/3811840/)|2台で20,000円キャンペーンを友人と割り勘しました|
|Raspberry Pi3|4,500|[あきばお～](http://www.akibaoo.co.jp/c/item/4528483135652/)|色んなとこで売ってますがあきばお～安い|
|irMagician-T|4,630|[SWITCH SCIENCE](https://www.switch-science.com/catalog/2151/)|温度センサ付き、送料150円含めてます<br>RM mini3があれば不要でした…|
|RM mini3|2,000|[Amazon](https://www.amazon.co.jp/gp/product/B075Q93MY1/)|この価格のはもう売り切れです|
|RM mini3(2台)|2,570|[MiniInTheBox](https://m.miniinthebox.com/ja/groupbuy/5528626/51E0D793C79BB9CE)|中国通販で追加購入しました<br>グループ割ってのに便乗して1台1,285円<br>まだ手元には届いていませんが…|
|ESP32開発ボード|1,480|[秋月電子](http://akizukidenshi.com/catalog/g/gM-11819/)|Wi-FiとBluetooth搭載マイコン|
|Google Home|7,560|[ビックカメラ](https://www.biccamera.com/bc/item/3811840/)|なんか半額になってるので寝室用にもう一台|
|合計|32,740|-|-|

結構かかってる…
妻には見せられない…
なおGoogle Homeは2年分の誕生日プレゼントとして購入許可を得ました。

ちなみに赤外線家電操作のみの最小構成だと、

|買ったもの|価格(&yen;)|購入元|備考|
|---|--:|---|---|
|Google Home <br>Mini|3,240|[ビックカメラ](https://www.biccamera.com/bc/item/3813477/)|本日(2017/12/10)まで半額です！<br>ツクモは25日まで！
|Raspberry Pi <br>Zero W|1,446|[SWITCH SCIENCE](https://www.switch-science.com/catalog/3200/)|送料150円含む、現在国内での定価入手は困難ですが…<br>海外通販なら[Pimoroni](https://shop.pimoroni.com/products/raspberry-pi-zero-w)とか|
|RM mini3|1,285|[MiniInTheBox](https://m.miniinthebox.com/ja/groupbuy/5528626/51E0D793C79BB9CE)|グループ割にうまく乗っかる|
|合計|5,971|-|-|

お、6,000円切った！Google Home Miniが定価でも10,000円切る！
この価格でこれだけのリターンはもう破格ですね。



# おわりに
振り返ればGoogle HomeはほぼIFTTTに繋いでおしまいで、そっから先のラズパイやNode.jsでがちゃがちゃやってばかりですね。
問題も色々発生していましたが、案外解決策もあるもので、特にNode.jsはこんなのもあるんか！ってのが多々あり驚きの超技術でした。

そして途中にも書きましたが、Google Homeの真髄は「ながら操作」だと思います。
視覚や手といったビジーになりがちなリソースを消費せず、アイドル気味な声というリソースのみでタスクをこなせること、これが最大のメリットに感じました。

購入してしばらくは「ちゃんと認識してるかな？」とGoogle Homeの方を見ながら話しかけたりするかと思いますが、一瞥もせず指示を飛ばせるようになってくると利便性が一気に上がります。

Google Homeアプリの開発においてもこの「ながら操作」を意識することが重要ではないかと思います。

なおご不明な点やご質問等ございましたらTwitterよりご連絡お願いします。
https://twitter.com/miso_develop