家庭内 Slack とかやってる人は結構いますね。羨しいなと思ってましたが、うちの妻は英語と技術的なことがさっぱりわからないので Slack ですら敷居が高く、インストールしたり説明 (チャンネルの概念とか、それがどういうノリで機能するかとか……) するのもめんどうなので家庭内チャットボットみたいなのは全くやる気がしなかったわけですね。Slack って英語だったけ?と思うかもしれませんね。普通気にもとめないでしょうが英語なんです。ウェブ系IT企業のノリって一般的じゃないんですよ、知っていましたか。
それはともかく、最近 IFTTT の通知先に LINE が増えたり、LINE への通知の API ができたりしたので、家庭内チャットでワンチャンアルデと思ってちょっと頑張って試すことにしました。
つくった IFTTT レシピ
エリアを抜けたらグループへ通知
帰宅しはじめを自動的に伝えるようにというやつです。
出勤時にエリア近くに入ったときにも通知されることがあってやや難があります。あとなんかちゃんと通知されないこともある。まぁでもこれぐらい曖昧なぐらいが位置トラッキングではちょうどいいのではないか……
どちらかというと、定時になっても会社にいるとき30分ごとに通知とかのほうがいいかもなあ。IFTTT ではできなそう。
Dropbox の共有ディレクトリに写真が追加されたら通知
子供の写真を Dropbox で共有してるけど、今まで特に通知する方法がありませんでした。自動的にプッシュされるようになって便利になりました。追加されると LINE に写真もちゃんと表示されたので、基本的に Dropbox 見なくても良いぐらいです。
共有カレンダーに予定が追加されたら通知
これも特に今まで通知する方法がなくて、口頭で伝えるなりこまめにカレンダーをチェックする必要がありましたが、プッシュできるようになりました。良い。
IFTTT 以外の通知
Gmail をパースする系
- Amazon.co.jp 配達中 通知
- 佐川配達通知
- ヤマト配達通知
これらは VPS に置いた gmailnotify.pl (そのうち公開しますが未公開) という自作スクリプトを cron でキックすることで、LINE Notify 経由で通知するようにしたもの。Gmail に OAuth + IMAP でアクセスして、必要なメールを検索してパースしています。
アマゾン通知はいいんですが、妻へのプレゼントをアマゾンで買えなくなるという罠があります。
アマゾンに登録している住所とヤマトに登録している住所が微妙に違うせいか、アマゾンからの荷物に対してはヤマトの配達通知がこない状態なので、通知が重複することはありません。
キーワード反応
LINE Notify と IFTTT だけでも簡単な割にはまあまあ便利ですが、LINE Notify だと誰かの発言をひろって反応するみたいなのは不可能なので、そこらへんだけ Messaging API でやってみることにしました。いちばんチャットボットって感じのトコです。
全体のアーキテクチャ
VPS で Webhook を受けていますが、実際には家庭内サーバ (Raspberry Pi) で応答を生成したいので、以下のように若干ややこしいことをしています。
- VPS 上のサーバは WebSocket で待ち受けている
- 家庭内にある Raspberry Pi から VPS 上の WebSocket で繋ぎにいく
- VPS 上のサーバは LINE から Webhook を受けとったら接続済みの WebSocket にイベントをそのまま送る
- 家庭内にある Raspberry Pi がイベントを処理し、リプライを送るように WebSocket 経由で通信する。
なぜこんなことをしているかというと
- 経路を暗号化したい (websocket のサーバも h2o の裏にいて、https / wss での通信になっています)
- DDNS とかを使いたくない
からです。WebSocket は接続時のヘッダで認証をかけています。
なお特定グループの発言にだけ応答するようになっています。
エアコンのオン/オフ
IrKit を設置しているので、それのAPIを呼びます。
IrKit に関してはウェブサービス経由でもAPIを呼べるので、VPS 経由から直接叩けますが、うちでは上記のように家庭内の Raspberry Pi でメッセージを処理するようにしてあるので、直接呼んでます。
なんとなくテンプレートメッセージでやってみました。ボタンをタップした結果自分の発言として再度発言できる (発言内容が再度 Webhook に通知される) のでチャットボット的には実装が楽です。
自宅の室温
「室温」で自宅の現在の室温をかえします。Raspberry Pi に I2C 接続の温度センサーをつけてます。
単体では実用性ないけど、センサー類は増やしていきたい。エアコンのオンオフするときの目安として使えるかなという意図です。
喋らせる
Raspberry Pi に OpenJTalk を入れて喋るようにしてあるので、これを LINE 経由で呼べるようにしてあります。自宅にいると案外 LINE を見てないことが多いのと、通知がきても無視しがちなので、より強めの通知をかけるという用途です。
まぁ使わない気がします。 意外と面白がって使ってます。。。
その他やりたいこと
おくすり手帳連携
今のところおくすり手帳がデジタル化されてないので難しい。家族の服薬状況とかいちいち把握するのは面倒くさいけど、万が一のときは把握してないと困るので、さくっとBOTから教えてもらえるようにしたい。
災害連携
なんらかの災害情報と連携して、災害時の連絡手段・集合場所を自動的にプッシュさせたい。普段からプッシュしておけば万が一 LINE もろとも使えなくても刷り込みで覚えられないかという感じ。Yahoo からくるメールをトリガにするかとかで考えている。
電気料金の通知
1日のはじまりに前日の電力消費量および概算料金を LINE Notify 経由で通知。節約意識高める用。でもあんま意味ない気もするので保留。
スマートメータから値を読み出したいんだけど、設置場所まで電波が届かないので難儀してる。
クレカ使用通知
インフラ料金系は即座に通知してもよさそう。全部通知するとDMMでエロ動画買ったのが自動でバレるみたいになって辛いのでなにかしらのフィルタが必要。パーサーはあるんだけど、まだやってない。
感想
技術系のノリがわからない人向けだと、技術的にはおもしろいけど微妙な機能つけてもウザがられるだけで辛いので特にプッシュ通知に関しては実用的なことしかできない。
テンプレートメッセージが思ったより面白いので、もうちょっとなんかしたい。