41
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Homeで家族ごとのテレビ時間を可視化したよ

Last updated at Posted at 2018-05-02

テレビを見たユーザを判定し、視聴時間をはかる

我が家では、基本的にはこども達にテレビを自由に見せていますが、やっぱり長時間テレビばかり見ているのは避けたいなぁと思い、家族のテレビの視聴時間を可視化してみることにしました。
家族それぞれの視聴時間を計測するには、「誰がテレビをつけたか」を判定しなければなりません。今回、だれがテレビを点けたかの判定にGoogle HomeのVoice Match機能を利用することでうまくいったので記事にかいてみました。
※注:2017年末につくったやつなので、古い内容があるかも知れません:bow:

システム構成

おおまかな全体構成を説明します。家にはIFTTT経由にて赤外線リモコンで家電を操作できるNature Remoと、Raspberry Piがあります。Raspberry PiはHDMIでテレビとつなげてあります。

スクリーンショット 2018-02-12 23.41.11.png

テレビ電源ONから視聴時間計測の流れは次の通りです。

  1. Google Homeに「テレビつけて」で、以下2つのIFTTTアプレットを起動
  • Nature Remoで家のテレビを電源ON
  • 視聴者を判定し、Firebase Realtime Databaseに視聴者の名前を書き込む
  1. Nature RemoはIFTTTに従って、テレビをONにする
  2. Raspberry Pi上のプログラムは、HDMI CECでテレビのON/OFF状態を常時監視
  3. Raspberry Pi上のプログラムは、テレビがONなら、Firebaseから視聴者名を取得し、その視聴者の視聴時間を更新

このシステムではGoogle Homeを使わずにテレビのリモコンで電源ONされるとシステムが機能しません。
そこで、Raspberry Piがテレビ電源ONを検知した際、Firebaseに視聴者名が登録されていなかった場合にはRaspberry Piからテレビの電源をOFFにすることで、必ずGoogle Home経由でテレビをつけることを強制しています。

それでは詳細を以下に説明します。

Voice Matchによる視聴者の判定

視聴者の判定には、題名のとおり、Google HomeのVoice Match機能を利用しました。Voice
Match機能とは、Google Homeに最大6人までユーザを登録でき、ユーザを声で識別してユーザ毎にカスタマイズされた情報(ショッピングリストやその日の予定など)を応答してくれる機能です。
このVoice Match機能で識別したユーザ名をIFTTTに渡すことができれば良いのですが、残念ながら識別したユーザ名をIFTTTに渡す機能はありません。そこで、Google Homeのショートカット機能を利用します。
ショートカット機能は、任意の言葉のショートカットを作る機能です。例えば、「目覚ましを止めて」のショートカットとして「おはよう」と登録しておけば、「おはよう」のあいさつで目覚ましをとめることができるようになります。
実はこのショートカット機能はVoice Matchのユーザ毎に登録することができるため、同じ言葉でもユーザ毎に異なる挙動を実現することができます

Voice Match

今回は上の絵のように、「テレビをつけて」というショートカットを、ユーザ毎に「テレビを太郎がつけます」や「テレビがママがつけます」という言葉に対応させました。
これにより、IFTTTからテレビをつけたユーザを判定することができるようになりました。

Voice Match・ショートカットの設定

アカウント追加

Voice Matchでユーザを判定するには、まず家族全員分のGoogleアカウントを取得します。
その後、スマートフォンのGoogle Homeアプリを開いて、アカウントを追加していきます。
追加方法は下の図をみればわかると思います。

スクリーンショット 2018-02-14 23.13.43.png

Voice Match、ショートカット設定

アカウントが追加できたら、各アカウント毎にユーザの声を認識させます。目的のアカウントを選択してから、設定画面にて「デバイス」を選択します(下図左)。次の画面で「アカウントをリンクしてください」を選択し、指示に従っていけばOKです。途中で「OK, Google」と何回か話しかけ、声を認識させるフェーズがあります。
ショートカットの登録は、設定画面の「その他の設定」、「ショートカット」から登録できます。「テレビをつけて」に対して、ユーザ名を反映させた「テレビをパパがつけます」に変換していますね(下図右)。

スクリーンショット 2018-02-15 0.37.57.png

IFTTTからFirebase Realtime DBの更新

Firebase Realtime DBは、REST APIで値を更新することができるので、セキュリティさえ気にしなければIFTTTから直接に値を更新することができます。
設定の仕方はQiita記事「新着メールを知らせてくれるGoogle Home」と全く同じなので割愛します。

Raspberry Piからテレビの状態検知

Raspberry Piからテレビの状態検知にはHDMIのCEC(Consumer Electronics Control)という機能を利用しました。このCECを使ったHDMI経由でのテレビ制御のやり方はQiita記事「Raspberry PiとテレビをHDMI接続してテレビのON/OFFを確認する」が詳しいです。

テレビ視聴状況の可視化&通知

テレビの視聴状況は、Google-Home-Notifierを使って、テレビの電源ON時にGoogle Homeに喋らせています。「パパの今週のテレビ視聴時間は現在○○時間だよ」という感じです。
グラフでの可視化もしたかったので、react-liquid-gaugeを使って下図のように可視化してみました。一週間7時間を上限としてパーセンテージで表示してます。

スクリーンショット 2018-05-02 12.04.46.png

以上、Voice Matchとショートカットを使うとユーザを識別して動作することができるので、他にも面白いことができそうですね。ぜひ色々やっていきたいです。

41
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?