LINE Beaconで家に帰ったらテレビをつける(部屋も温めておく)

こんにちは、LINE Beacon クライアントアプリの中の人です。

急に秋めいてきましたね。寒いですね。
寒い日に、暗くて静かで寒い家に帰りたくないですよね。
暖かくて明るくて賑やかな家だと最高ですね。

そこで、本日は、LINE Beacon を使って最高にしたいと思います٩(๑❛ᴗ❛๑)۶

使うもの

  • LINE Beacon
  • IR Kit

IRKit - Open Source WiFi Connected Infrared Remote Controller

  • hue

スマートIoT照明 - これがPhilips Hueです。

LINE Beacon

LINE beaconの受信をきっかけに、LINEのbotアカウントに紐付いたwebhookをたたけるすごいやつです!
本当にいま近くにいる人だけに何かをしたい!だとか、今近くにいる友達は誰かを知りたい!だとかに使えます。

市販はしていないのですが、LINE Developer Day 2016というイベントで配っていました。もし、市販されたら10個くらいセットで欲しいですね!
linedevday.linecorp.com

LINEの設定

ポチポチをいくつかしなきゃいけませんが、getting-startedに書いてあるとおりポチポチしていけばtokenをもらうことができました。
LINE Developers - Messaging API - Getting started
SSLのサーバーが必要なので一瞬心が折れかけましたが、AWS certificate manager で最高でした。

Beaconとbotアカウントの紐付けはbeaconにbeaconのidとsecretのシールが貼ってあるので、それを管理ツールから入力してください。
developerとしてご利用頂く限りは、1つのbotにつき1つのbeaconと紐付けることができます。

LINE Beaconで帰宅したらテレビを付ける

f:id:ozyozyo:20161017211143p:plain:w300
beaconを受信すると、beaconに紐付けているwebhookを叩いてくれるので、そこでIR Kitを叩きます。
IR Kitとは、リモコンの赤外線をコピーして、API call で赤外線を出すことができる便利デバイスです。

beaconの起動に30秒かかるので、beaconの受信テストをするにはLINEアプリのプロセスを1度落とすか、端末のBluetooth設定をOFF/ONにするとdebugが捗ります。
逆に、Beaconの受信圏内でLINEを再起動すると意図せずテレビがついてびっくりするので、beaconは部屋の中ではなく玄関において、玄関を通ったときだけ受信するようにしました。
テレビをつける赤外線とテレビを消す赤外線のrawデータが同じなので、意図せず家についたらテレビがついて、家から出ればテレビが消えるようになりました。

ブラウンのぬいぐるみがあったので、せっかくですし、この子につめました٩(๑❛ᴗ❛๑)۶
LINE Beaconは結構な距離飛ぶのですが、電波を玄関までしか飛ばしたくないので、電波を弱めるためにbeaconをアルミホイルで巻こうかと思いましたが、ピンが一部露出しているデザインなので直接金属で巻くのは自重したほうが良さそうです。(過去に会社のbeaconを一個溶かしたのは内緒です。)
電波の強さを調整するには電気を通さないもので包んだ上で、アルミホイルで包むなどで調整しましょう。
f:id:ozyozyo:20161016181555p:plain

外出先から暖房をつける

暖房、部屋に着くまでに温めておきたいので、beaconではなく外から"暖房つけて”とLINEでメッセージを送ってつけることにしました。
これもMessaging APIのwebhookを受け取って、IR Kitを叩きます。IR Kitは外部から叩きやすくて捗ります。
一応、知らない人にうちの暖房をつけられても困るので、userIdで自分かどうか判定してから暖房つけてます。

暖房、テレビを操作しつつ、適当に会話が続くようにロジックを書く

家に帰るとおかえりってメッセージがきます。ちょっとうれしいです。
f:id:ozyozyo:20161016032954p:plain
beaconを受信したのをトリガーにbeacon受信者にメッセージ送るの、10行くらいでかけちゃうので簡単に遊べます。

public function reply($replyToken, $token, $messageText) {
        $curl = \Request::forge('https://api.line.me/v2/bot/message/reply', 'curl');
        $curl->set_params(array(
                        'replyToken' => $replyToken,
                        'messages' => array(
                                array(
                                        'type'  => 'text',
                                        'text' => $messageText
                                ),
                        )
                ));

        $curl->set_header('Authorization', 'Bearer {'.$token.'}');
        $curl->set_header('Content-Type', 'application/json');
        $curl->set_method('post');
        $curl->execute();
}

ちなみに、秋だし、モンブラン食べたいなって思ってbotちゃんのアカウント名はmontblancにしました。

残タスク

  • 会社を出たことをトリガーに自動で暖房つけば最高!だけど、ちょっと遠出のランチした時にはついてほしくない。
  • LINEでメッセージ送ったらhueを操作できるようにしたいけど、hueを外から扱うの大変

まとめ

BLE最高٩(๑❛ᴗ❛๑)۶Beacon楽しい٩(๑❛ᴗ❛๑)۶
あと、家帰ったらhueが電気つけてくれるのでhue最高٩(๑❛ᴗ❛๑)۶