おうちハック Vol.1 郵便が届いたのをLINEに通知してみた

Gravioを使ったおうちハックの第1弾は郵便受けハック！
!<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/91acd213-68c8-8c9a-4af3-9f43e0c45dc5.jpeg" width="400"/>
我が家は戸建てなので郵便受けに郵便が届いても気づかないことが多い。特にこのご時世、外出することも減っているので、郵便受けをチェックする回数も減ってきている。最近では、郵便もだいたいピザか寿司のデリバリーチラシ、もしくは不動産買いますチラシくらいなんだけど、それでもたまに大切な郵便も来るので、見ないわけにはいかない。

あと、宅配ね。一時、チャイム鳴らさずに不在票を入れやがる配達員がいたもんで、ちょっとイライラしてた。あと、子供が二階にいて出ないとか。チャイム鳴らしたときには画像をメールしてくれるんでいいんだけど、受け取ったかどうかはそれだけだとわからない。チャイムのあと不在票が入ったなと思えば、ヤマトなら出先からネットで再配達とか依頼できるなぁとも思ったわけです。

というわけで、郵便届いたらLINE通知ハックの開始！

# 使ったもの

- Gravio Hub w/HubKit 3.7
- Gravio Studio
- ドア・窓開閉センサー
- LINEアカウント
- LINE Notify

# LINE Notifyのトークンを取得

まずはLINEへ通知するための準備。Gravioからはアクションを使って普通のLINEアカウントやLINEグループに通知できますが、そのときに[LINE Notify](https://notify-bot.line.me/ja/)というサービスを使います。準備として、このLINE Notifyを使うためのトークンを作成します。

まずは、LINEで通知先のLINEグループを作成しLINEアカウント宛てに通知する場合は作成の必要はありません。我が家の場合は家族全員に通知するので「おうちハックIoT」というグループを作成しました。

次にLINE Notifyサービスにアクセスし、LINEアカウントでログインします。

https://notify-bot.line.me/ja/

ログインしたら、右上にアカウント名が表示されてますので、そこのメニューから「マイページ」をクリックします。
![linenotify1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/5ab4d304-df7e-2d10-1e47-06f73c580ba4.png)

ページの下の方にスクロールすると「アクセストークンの発行（開発者向け）」と書かれたセクションに「トークンを発行する」というボタンがありますのでクリックします。
![linenotify2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/a0bb292a-08dd-9978-c922-ef97a3a323e8.png)
ダイアログが表示されるので、トークン名と通知の送信先のトークルームを指定します。トークン名は、通知時にメッセージの最初に差し込まれますので適切な名前を指定してください。トークルームにはLINEグループを指定します。テストなど、一人だけで通知を受けたいときは「1:1でLINE Notifyから通知を受け取る」を選択します。設定したら「発行する」のボタンをクリックします。
!<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/e88d8cd7-c636-3843-4a62-1eb60da557c4.png" width="300"/>
するとトークンが発行され、表示されます。ここでコピーして忘れない場所に保管しておいてください。パスワードみたいなものなので、漏洩には気をつけてくださいね。

「閉じる」ボタンをクリックして準備は終了です。

# 基本プロパティ設定にLINEトークンを登録

今回、LINE Notifyのトークンは「基本プロパティ設定」として登録します。

「基本プロパティ設定」は、Gravioのアクション内で共通的に使用される設定を保管しておくものですね。メールの送信設定とか、今回のLINE Notifyのトークンだとかを保存します。このような設定は複数のアクションで共通して使うことが多いので、ここに設定しておくといちいちアクションごとに設定しなくていいので楽ちんです。

さて、設定です。Gravio Studioで「設定」-「基本プロパティ設定」を開きます。

「LINE Notify」の左の三角をクリックすると`Token`が表示され、右端に「編集」ボタンが現れるので、このボタンをクリックしてトークンを設定します。
![basicprofiles.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/29cfaa4f-31f8-f8f8-59f1-3f3da5f2b14d.png)

# LINE通知するアクションを作成

試しにLINE通知するアクションを作成してみます。

Gravio StudioのHub一覧の画面に戻り、Hubを選択したあと、真ん中のアイコンをクリックしてアクション一覧に移動します。

「+」ボタンをクリックして、アクションを作成します。

ダブルクリックするとアクションエディタに移動するので、「+」をクリックしてステップを追加します。コンポーネントのリストの中から「LineNotify」を探して追加します。
![action.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/3770f434-34b1-0fcf-c783-d6ea564dd73f.png)



追加されたコンポーネントを選択し、「プロパティ」をクリックすると設定できるプロパティが右に表示されます。`基本プロパティ設定を使う`にチェックが入ってると思います。先程設定したトークンを使うということですね。個別にトークンを指定する場合にはここのチェックを外して `Token`を指定してください。

今回は郵便が届いたらメッセージを送りたいので、`Message`に`郵便が届いたよ`と指定します。

これで終わりです。試しに動かしてみましょう。右上の再生ボタンをクリックするとアクションが実行されます。LINEに通知が届きましたね。
![Screenshot_20200304-160552.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/723a544d-b9fe-87e8-e052-ff7e246a680e.png)

# 開閉センサーを設置する

さて、ここからやっとIoTです。今回は郵便受けの開閉なので、素直に開閉センサーを利用しました。

まずはGravioにセンサーをペアリングします。ペアリングはこのあたりを参考にしてください。
![IMG_20200202_095426.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/66d2aefd-c9f7-d740-cca5-0f676b56f13f.jpeg)

https://doc.gravio.com/manuals/gravio-setup-guide/1/ja/topic/zigbee

https://www.gravio.com/jp/sensor-setup-guide#Door-and-Windows

エリアとレイヤーはそれぞれ`玄関`、`開閉センサー`としました。デバイスのスイッチをオンにして有効化することを忘れずに！
![postnotify1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/b4549306-d717-324e-9920-558d1bca62c2.png)


データビューアでデータを確認すると、`Open`/`Closed`とデータが届いていることがわかります。
![postnotify2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/07a61dfc-d2eb-6696-c42e-8084dbb661b2.png)

さて、郵便受けにセンサーを設置します。裏の両面テープはかなり強力なので、最初は養生テープやビニールテープなどで仮設置することをおすすめします。今回もいろいろ試行錯誤しました。最初は表側に付けようと軽く考えてましたが、かっこ悪い。なので、内部にと思いましたが、内部は内部で意外と他の部分との干渉が多くて結構苦労しました。

最終的にはこんな感じで設置。1cmくらいなら離れていても`Closed`になるので大丈夫です。
!<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/d9a4faab-1251-7024-ed00-2589012e39f0.jpeg" width="400"/>

# 開閉センサーとLINE通知を組み合わせて動かす

さて、ここまでくればあとはセンサーデータを使って先程作ったアクションを動かすだけ。Gravioではこれが非常に簡単です。

まず、Gravio StudioのHubをダブルクリックして下のタブ一覧から「トリガー」タブに移動します。

右上の「+」をクリックしてダイアログを表示します。
!<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/00883e86-f630-73ec-4952-bb0439f7d4f7.png" width="300"/>
トリガー名には適当な名前、エリアとレイヤーは先程設置した開閉センサーのものを指定します。アクション名には最初に作成したLINE通知用のアクションです。あとは`Door state`に`開く`を指定します。これで保存を押せば完了です。

郵便受けになにか投函されるとLINEで通知されるようになりました！郵便受けのところでごそごそ操作してると何度か通知が来ますが、そこはご愛嬌。ゆるくはやくがモットーのおうちハックです！
![Screenshot_20200311-170133.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41603/db37ec11-3a84-c491-1e87-d74f377d3e13.png)