技術とエンタメと、その他・・・

主に、技術ネタ、エンタメ系のネタを書いていく予定です。また、自分が参加したイベントに関する記事も投稿予定。

スマートスピーカーを遊びたおす前に「Google Homeを遊びたおす会」をふりかえってみる

はじめに

f:id:youtoy:20180626062052p:plain

本日、6/26(火)はスマートスピーカーに関するイベント スマートスピーカーを遊びたおす会 が行われるのですが、
イベントの前に、2018/3/28(水)に開催されたGoogle Homeを遊びたおす会のふりかえりの記事を投稿してみました。

各セッションについて、話されたことなど記載をしていきたかったのですが、 セッション1の書き起こしとかをやってみて、かなり時間がかかってしまい、 詳細が記載されているのがここだけになってます・・・。

他の方の話された内容は、ひとまず他の方のブログ( kbn1053さん の ブログ記事「Google Homeを遊びたおす会へ行ってきた(雑記)」 )などをご参照ください。

また、書き起こしが途中から文字ばかりになっていて、見づらい感じなので後で画像を足したりしようかと。

今日の「スマートスピーカーを遊びたおす会」のイベントページ

前回と同様、 飯田橋のIIJさんのオフィス がイベント会場ですが、今回は大阪にサテライト会場も準備されています。

3月のイベントについて

イベント「Google Homeを遊びたおす会」の関連ページ

概要(イベントページより)

Google Homeを使ってスマートじゃない家電を音声操作したり、Google Assistantアプリを作ってみたりとGoogle Homeを遊びたおしてみようという会です! 開発寄りの内容となりますが、これから遊びたおしてみたい方や、既に遊びたおされている方も是非ご参加下さい!
引用元:[ https://kotodama.connpass.com/event/79768/ ]

イベントのタイムテーブル

19:00〜
  1. Google Homeでつくるスマートホーム by 田中みそさん
  2. Google Home 用のお遊びアプリをMicrosoft Azure使って作ってみた by ちょまど(千代田まどか)さん
  3. Actions on Googleでできること by 山口能迪さん
  4. Dialogflow tips by fishさん
21:00〜
21:10〜
  • 懇親会

セッション1「Google Homeでつくるスマートホーム」の書き起こし的なもの

自己紹介後の辺りから質疑応答までのところで話されていた内容を書き起こしてみました。 話したままでなく、部分的に省略などしているところもあり、書き起こし的なものとしてます。
書き起こしには、こちらの スマボスさん の動画を利用させていただきました。 以下から書き起こし的なもの、スタートです。

スマートホームに取り組みはじめたきっかけ

私は、Google Home の購入を機にITに目覚めました。

普段仕事ではプログラムとかは触らなくて、一からラズパイ( Raspberry Pi )、node.js 、電子工作とかを勉強してみて、これらとGoogle Home とを組み合わせて、いろいろやってみた記事をQiitaにあげています。

特にこの「Google Homeでやったことまとめ」という記事で、 これからお話しするスマートホーム化だったり、Googleアシスタントアプリの作り方だったりをまとめています。

これは、去年の Advent Calendar に投稿したもので、そのとき少しバズりました。 ちなみに、はてなブックマークも、もうちょっとで1000いくので、気になって読んでみて参考になりましたら、はてブボタンをポチっていただけたら幸いです。

もし、週末までに1000に達してなかったら、自分でアカウント作ってポチります。

■ 自宅のスマートホーム化について、デモ動画

我が家のスマートホーム構成はこんな感じになってます。 f:id:youtoy:20180626082221j:plain ごちゃごちゃしてるんですけど、それで、ここでデモをお見せようと思ったんですが、家にいる妻とLINE電話でつなげて、持ってきたGoogle Home mini でやろうと思ったんですけど、Google Home mini も接続ができなくて、 LINE もつながらないという状況になったので、急遽、動画に変更します。

【動画の概要:声での操作部分1】

  • Google Home mini に「電気を消して」と言って消灯。
  • 「電気Cパターン」と言って調光(色合いを変えられます)。
  • 「8チャン」と言ってTVをつける。
  • 「プレステ4でトルネ起動」と言ってプレステ4を操作(自宅でプレステ4は主にトルネ用で使っている)。
  • 「PC起動」と言ってPCを操作(Windows PC を Wake on LAN 機能を利用して電源ON)。

【動画の解説:Webアプリ利用】
自分でWebアプリを作って、ここからポチポチ押して操作できるようになってます。 今これを押しちゃうと、家のほうが切り替わっちゃうので、止めておきます。 notifierとか、Google Home をしゃべらせるヤツですけれども、ここに何か文字を打ってポチッと押すと、家のほうも Google Home がしゃべりだしたりします。

【動画の概要:声での操作部分2】

※ ↓ハンドスピナーのやつ

■ 仕組みの解説

仕組みについて、少し細かく見ていきます。

まずGoogle Home に話しかけた後は、クラウドにデータが送られ音声解析が行われます。 その解析結果を受け取って何かやるには、主に2通りの方法があります。

  1. IFTTT(イフト https://ifttt.com/ )を使う方法
  2. Googleアシスタントアプリを作る方法

IFTTTは、あるサービスと別のサービスとを連携させられるもので、 これを使うと例えば「Google Home に話かけた内容をTwitterに投稿したり、LINEでメッセージを送ったり」ということが簡単にコーディングなしでできます。

家電操作もIFTTTで作るのが楽です。特にWebhookを飛ばせるので大体のことができちゃいます。 私の場合、このWebhookを使って、Firebase( https://firebase.google.com/?hl=ja )の Realtime Database へ情報を書き込んでます。

ここで、Firebaseに書き込む理由は、音声解析情報はグローバルネットワーク上にあり、ローカルネットワーク上のラズパイに情報を渡すためにはトンネリングが必要で、トンネリングにはngrok( https://ngrok.com/ )などを使う方法があります。 しかし、なぜFirebaseを使うのかというと、Firebaseのホスティング機能を利用してWebアプリを置いて、そこからDBにアクセスできたり、APIを作ったりもできたりして、いろいろ便利だからです。 先ほどデモでお見せしたWebアプリにもFirebaseを利用しています。

Google Home からIFTTTで言葉を受け取る際に、言葉の一部にワイルドカードが使えて、その部分を変数として扱えます。 例えば「照明 $(変数)」という形で「照明"つけて"」・「照明"消して"」といったように、操作を表す文言の部分を変数としてFirebaseに書き込まれます。 これによって音声操作のパターンごとに、たくさん文章を登録する必要がなく、機器ごとに文章が登録されていれば良くなります。

Firebase上の書き込みは、ラズパイ上のnode.jsで監視してます。 ちなみに、ラズパイはちっちゃいサーバのことで、小さく消費電力が小さいのでホームサーバーに最適です。 電気代を実測したら1ヶ月つけっぱなしで25円ほどでした。 ラズパイはFirebaseから値を参照しに行っているだけなので、ポートを開ける必要がなく安全。

Firebase自体は、IFTTTやラズパイからHTTPで読み書きできるように、セキュリティルールはけっこうガバガバなんですけど、それでもポートを開けるよりは安心感があると思います。

■ TVが朝起きたら勝手についていた!?

セキュリティという点で、話はそれちゃうんですけど、最近スマートホームを使っていて怖いことがありました。

ある日、朝起きたらTVが勝手についていたんですね。 不正アクセスか!?、と思って、急いでnode.jsので書きだしていたログを確認したんですけど、夜中の2時39分とかに操作ログが残っていた、家族みんなが普通に寝てる時間です。 こんな時間に誰が何のために!?、と戦慄したんですけど、エアコンなど他の家電は操作などはされていなくて、 もしかして?、と思ってGoogleのマイアクティビティをチェックしてみたんですね。

Googleのマイアクティビティって、Google Home に話しかけた言葉の解析結果のテキストとか、発話内容の音声とかが録音されていて聞きかえせたりするやつです。

音声を再生してみたら、妻のちょっとかすれた声で「OK Google、2チャンネル」って、まあ、単純に寝言だったんですけど、 ホントかよ?、って話なんですけど、 これは本当にあった話で、Google Home が生活に染みついてきちゃうとこんなこともあるようなので、皆さんも寝言での音声操作にはご注意ください。

今回の例はTVだったから良かったんですけど、今後、あらゆる家電が操作できるようになってくると、コンロとかスマートロックとか寝言で反応されちゃうとシャレにならないものがあったりするので、危険ですね。

■ 仕組みの解説(続き)

スライドのほうに戻るんですけど、あらかじめ定義されたレコードが書き込まれたら、条件にマッチする動作を行います。 こういう文字列が書き込まれたら、こういう動作を走らせるよ、というのをプログラムで書いておくわけですね。

ラズパイまで来てしまえば、もう何でもできちゃいます。 具体的にどんなことができるかと言うと、例えばWi-Fi付の赤外線リモコンのAPIをたたいて家電を操作したりとか、自分は eRemote mini( http://linkjapan.co.jp/product/eremote-mini/ )というのを使ってます。 ホント小さくて、だいたい6000円くらいで売ってます。 これに赤外線リモコンでピッとやって、赤外線情報を読み取って文字列として保存するのですが、それをここから飛ばすことで、あらゆる赤外線リモコン対応家電を操作します。

あと、ps4-wakerというNodeモジュールでプレステ4を操作したりします。 プレステ4を操作といっても、○ボタンとか十字キーとかの key send ができるわけじゃなくて、何ができるのかと言うと、ホーム画面の操作だったり、ゲームの起動とかですね。 うちは主にトルネの起動で使ってます。

それとPCについて、自分はWindowsを使ってるんですけど、それをWake on LANで起動させたり、Windows上でコマンド実行させたり、ですね。 Wake on LANはラズパイから命令を投げるんですけど、Windows上でのコマンド実行については、PC上でもnode.jsを走らせてFirebaseを監視します。 それで、Windows向けの書き込みがされたら対応するコマンドを実行という感じですね。 先ほどのデモでお見せしたExcelの起動なんかも、単純にWindows上のnode.jsでEXEをたたいているだけです。

あとはGoogle Homeをしゃべらせたりとか、ちなみにGoogle Homeをしゃべらせたことがある方はいらっしゃいますか?(会場内で挙手でのアンケート)、 ぼちぼちいらっしゃいますね。

Google Home のハックとかで、まずやってみたくなることなんですけど、これは普通にスピーカーでTTS( Text to Speech 音声合成 )させれば良いじゃん、っていうのもありますけど、Google Homeの強みの一つって、常時起動のスピーカーだということがあると思うんですね。

私は昔、音楽にはまっていたことがあったので、家にそこそこ良いスピーカーがあります。 なんですけど、いちいちアンプをつけたりとか面倒で、今はGoogle Homeで音楽をかければいいや、となっちゃいました。 また、常時起動であるからこそ、普段あまりLINEとか見てくれない、あまりスマホを触らない妻とかでもGoogle Home をしゃべらせて連絡する、ということができたりします。

あと、ESP32( https://ja.wikipedia.org/wiki/ESP32 英語サイト https://www.espressif.com/en/products/hardware/esp32/overview )というWi-Fi付のマイコンを用いて、よりIoTな使い方もできます。 ESP32は、要はWi-Fi付のArduinoみたいなもので、Bluetoothなんかもついてます。

USBの口とかピン付の開発ボードタイプでも1500円くらいで買えちゃいます。 これ、ArduinoIDEで開発できちゃうんですね。

あとFirebaseのライブラリもあったりするので、ラズパイ上の値を監視して制御とかできちゃいます。 これとサーボモーターを組み合わせれば、家電に付いてる物理スイッチなんかもGoogle Homeに話しかけて、操作とかできちゃったりします。

サーボモーターはこういうやつですね。この上のほうにある白いのが動くので、それでスイッチを押し込みます。 ESP32ば小さいんですけど、それと電池を適当な箱につめて、サーボモーターをつなげちゃえば完成です。

でも、見た目がひどいんで、うちでは撤去されちゃいました。

さらに、Firebase HostingにWebアプリを置いておけば、スマホやPCからも操作可能です。 データベースとの連携も簡単にできるので、丸ごとFirebase内で完結して便利です。 これにより、外出さきから家電が操作できるので、エアコンとか消し忘れたときに、心配なときとかに念のためOFFにしたりとか、 帰る前に部屋を暖めたりとか、あとは私は会社から帰るときに「今から帰るよ」というのをGoogle Homeにしゃべらせたりします。

外出先からの操作という点では、スマホGoogleアシスタントアプリに話しかけちゃっても良いんですけど、 リモコン自体が統合されてどこからでも操作できるのは便利です。特にうちはよくリモコンがなくなっちゃう家なので、これで助かってます。 TVの細かい音量調節なんかも、音声操作よりリモコンを使っちゃったほうが楽ですね。

■ まとめ

独自音声コマンドを作るには、とりあえずIFTTTが楽です。

自宅サーバ、ライズパイとかで制御を行うには、インターネットからローカルネットワークへのトンネリングが必要になってきます。 これはFirebaseがオススメです。 ラズパイまでたどり着いちゃえば、大体何でもできます。

特にNode.js、すごい便利です。

詳しい作り方はQiitaで記事にまとめてます。「Google Home でやったことまとめ」、というやつです。

最後に、Qiitaの記事以外にも、簡単なツールを作ってGitHubにあげてます。

まず、「Google Home Auto Tester」というやつなんですけど、単純にcsvファイルに喋らせたい言葉とウェイトの時間を書いて、 それをツールに通すと goo gle-home-notifier で Google Home を喋らせるってやつですね。 Googleアシスタントアプリとか作るとき、単語のテストをするときとか自分で延々としゃべるのは大変なので、 これを使ってます。応答結果はログで確認ですね。読み上げる用とテスト用とで、Google Home が2台必要になるのですが、 今日いらっしゃっている皆さまであれば複数台持ちも当たり前かと思いますので、アプリの作成時に良ければご利用ください。

あと、Dialogflow2AlexaSkillJsonというのを作りました。 これはDialogfowからAgent情報をZIPで吐き出せるので、 それをツールに通すことで、AlexaスキルのJSONを吐き出します。 そのJSONファイルをAlexaスキルのコンソールにぽいっとやることで、簡単にインテントとエンティティが移行できます。 逆のパターンもできると思うのですが、まだ実装できてないので、時間ができればやってみようと思います。

余談:その後の田中みそさん

その後、ミニドローン( Tello )を Google Home で操ったりされていたようです。

さいごに

今日のイベントは、Google Home だけでなく、他のスマートスピーカーも含めたイベント。 どんな話が聞けるのか楽しみです!!