Edited at

腕時計がミルクの時間を教えてくれるようにした。


スマートウォッチ(以後スマォ)を買ってもらった

こんにちわ。

私事ですが、先日誕生日をむかえ、妻にスマォを買ってもらいました。

Wear OS by Google が入ってるやつです。

スマォは携帯の通知が見れたり、散歩の時に心拍数を測って健康にしてきたりかわいいヤツです。

Googleアシスタントも内蔵されているので、スマォに向かって「OK Google」なんてたまに話しかけたりもします。

そんなスマォを使ってもっと日常を便利にしたいと思いました。

ちょうど夏に子供が産まれたばかりなので、スマォがミルクの時間を教えてくれるようにちょっとチャレンジしてみましょう。

Googleアシスタントに「リマインダー」の機能がある事は知っていますが、自分で作るから楽しいのです。

さっそく作ってみましょう。


構成図

ミルクの時間.png

こんな感じです。

「ミルクのんだくん」はこのために作成したGoogle アシスタント のアクションの名前です。(未公開)

赤矢印の流れと青矢印の流れでそれぞれ役割が違いますので、それぞれ概要を書いていきます。


プッシュ通知を送るための時間とユーザIDを取得する(赤矢印)


  1. 僕がスマートスピーカーにミルクをあげた事を言う

  2. スマートスピーカーが「ミルクのんだくん」を起動する

  3. 「ミルクのんだくん」が、僕にプッシュ通知を送るために、ユーザIDとミルクを飲んだ時刻を、Firebase Realtime Databaseに格納しにいく

  4. 格納しおわる

  5. 「ミルクのんだくん」が「あとで通知するで」と返信を返す

  6. 僕がそれをスマートスピーカーから聞く。


プッシュ通知を送る(青矢印)


  1. VPSで動いているcronがCloud Functions for Firebaseを定期実行(5分間隔)する

  2. Firebase Realtime Databaseにアクセスし、格納されているユーザIDとミルクを飲んだ時刻を取得する

  3. 現在時刻がミルクを飲んだ時刻より3時間たっていた場合、スマートフォンにプッシュ通知を送り、Firebase Realtime Databaseから該当レコードを削除する

  4. スマートフォンの通知がスマォに連動される

  5. 僕が通知を受け取る!


実装してみる

実装のHow Toは書きませんが、参考URLを書いて置きます。

Push notifications

こちらを見ればPushの実装方法が書かれています。


プッシュ通知の罠

早速実装してみたものの上手くいきません。

Googleアシスタントからのプッシュ通知がサイレント通知なのです。

めちゃくちゃ控えめなのです。

携帯がピクリともしないわりに、しれっと通知が来ているのです。

これではスマォもピクリとはしません。

黙ったままです。

サイレントスマォ。


プッシュがダメならメールを送ればいいじゃない

プッシュ通知はやめてメールを送るようにします。

Gmailからメールを送りましょう。

下記のように修正を行います。


  • 赤矢印の③で取得していたユーザIDをmailアドレスに変更

  • 青矢印の③で送っていたPush通知をGmail送信に変更


再び実装してみる

同様にHow Toは書きません。URLを置いておきます。

Actions on Google でのmailアドレス取得はこちらを使います。

Account linking with Google Sign-In

Gmail送信にはこちらのmoduleを使用します。

Nodemailer

OAuth2でGmailを送る方法は色々ありますので省略します。


できた

P_20181114_145453.jpg

できました。ミルクの時間になるとスマォが震えて教えてくれます。

ういやつ、ういやつ。