ピンポンが鳴ったらLINE通知が来るようにインターホンをハック

この記事はおうちハック[Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ouch-hack)の8日目の記事です。

初めてQiitaに記事を投稿します。


タイトル通り、我が家のインターホンをハックしました。ピンポンをされてもピンポンの音だけで気づけない場面があったからです。（ないですかね？）
私は妻と二人で賃貸マンションに住んでいますが、二人ともイヤホンしていたり、一人しかいないけどベランダに出てたり...
そういった時でもピンポンに気づけるよう、なんらかの通知が飛ぶようにしたいと思いました。
部屋にあるインターホン子機にセンサーを取り付けて、ピンポンされたことを検知して、LINE Botにリクエストを飛ばして手元のスマホでピンポンされたことに気づけるようにしてみました。

## 使用したもの

### ピンポンを検知するためのセンサ
- Raspberry Pi 3 Model B
- GrovePi+
- GROVE - I2C デジタル光センサ
- １００均のスマホ用カメラレンズ

### 通知に使用したサービス
- GoogleAppsScript
- LINEBot (MessagingAPI)

### ほか
- mackerel
- 妻の協力


## ざっくりした仕組みの図

![image.png](https://qiita-image-store.s3.amazonaws.com/0/322547/57787cb6-8822-6622-324e-ff9dc03728ed.png)

我が家はまずエントランスでピンポンする必要があるので、そこで用のある人は部屋番号を押してピンポンします。
すると家のインターホン子機からピンポンという音が鳴って、来客ランプが点きます。
それをセンサーで検知して、我が家の無線LANルータを通ってGoogleAppsScriptにリクエストをPOSTします。
GoogleAppsScriptがLINEにPOSTして、LINEBotが私にメッセージを投げてくれます。


## ピンポンが鳴ったことを検知する
センサーでピンポンが鳴ったことを検知する方法はいろいろあると思いますが、今回はインターホン子機の来客ランプが赤く光ることに注目しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/322547/3e8b3c2a-8314-5c1d-7516-7174c9adb6ba.png)

↑の写真の来客の横が点灯します。

### RaspberryPi
検知にはRaspberryPiを使用しました。
私は過去にはんだごてで火傷したことがあり（といっても非常に些細な火傷ですが）、はんだづけしないでどうにかやりたいことを達成しようとしました。
そこで[GrovePi+](http://wiki.seeedstudio.com/GrovePi_Plus/)を使用しました。GrovePiの説明は他に譲りますが、簡単に言うとはんだづけ無しでいろんなセンサーを使えるようになります。
ガチャっとRaspberryPiとGrovePiを合体させて、光センサを取り付けました。

<img src="https://qiita-image-store.s3.amazonaws.com/0/322547/5a2883a5-e9b6-1345-b43d-62ac491458d7.png">

合体させたものを石鹸ホルダーに入れて、インターホン子機の上部の壁にピンで取り付けました。
賃貸なのでできるだけ傷つけないように...
妻の協力のもと、見栄えよくなるように普段はカーテンで覆うようにしています。
<img src="https://qiita-image-store.s3.amazonaws.com/0/322547/b80c08c3-c5ee-b2b2-0fee-65addea4b1ce.png" width="40%">

RaspberryPiのセットアッップやらなんやらは、いろいろググれば出て来ます。とくに変わったことはしていません。
私は https://liginc.co.jp/309311 を参考にやりました。
センサーから値を読み取るプログラムも、今回使用したデジタル光センサー用のサンプルプログラムが公開されてましたのでそちらをそのまま使用しました。
https://github.com/DexterInd/GrovePi/tree/master/Software/Python/grove_i2c_digital_light_sensor

ルクスの値がある一定の値を超えたら、次のステップで用意するGoogleAppsScriptのURLにPOSTする処理だけ加えました。Pythonのコードでしたが、私はPython歴0日です。コピペだけでなんとかしました。

## 通知のしくみ

LINEBotというのを作成する必要があります。
友達登録数に制限がありますが、個人で使う分には無料枠で全く問題ありません。
登録や使い方の説明は Qiitaの
[LINE BOTの作り方を世界一わかりやすく解説（１）【アカウント準備編】](https://qiita.com/yoshizaki_kkgk/items/bd4277d3943200beab26)
がとてもわかりやすかったです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/322547/27202a79-bd11-8458-e3ff-859fbaa2aa62.png)

私はこのぺんちゃんというBotを作って、私と妻とぺんちゃんの３人のグループで妻とLINEしています。
Botをつくると、Botから能動的にメッセージを送信するためのエンドポイントを得られますので、そこに向かって発言してほしいテキストと一緒にPOSTするだけです。

RaspberryPiから直接POSTしても良いのですが、今回は一旦GoogleAppsScriptを挟みました。
私がGoogleAppsScriptに慣れていたということと、もしLINE以外にも家の中でパトランプみたいなものを光らせるなど通知先を増やしたいとなったときの拡張性を考えて、一旦噛ませることにしました。


## 稼働

デモ
[![実際のデモ動画](http://img.youtube.com/vi/Hmo6l-oOuTQ/0.jpg)](http://www.youtube.com/watch?v=Hmo6l-oOuTQ)

完成してピンポンのテストして、うまくいったのでいざ稼働させました。
次の日、LINE通知が来ることなく宅配便の不在票が入っていました。

**なんで！？**

理由が2通り考えられました。
- センサーが意図したように動いていない
- 配達員がピンポン押さずに不在票を入れた

### センサーの状態監視
まずRaspberryPiが正常に動いている保証が何もないため、監視のために mackerel　を入れました。
また、取得してるルクスの値をログに出力するようにし、ディスク容量が枯渇しないようにローテート設定もしました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/322547/b8824a9e-7348-9030-ad35-4ebce4af1ca7.png)

ちゃんと動いているようです。
さらに、来客ランプが点灯したときのルクスをもっと強く得るために、スマホ用カメラレンズをランプに被せるように貼り付けて、光を増幅させました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/322547/8a8164bf-7685-9ac4-805c-c89916a94ef9.png)

### 配達員がピンポンを押してない問題

センサーが正常に動いていることの監視を入れたことで、不在票が入ってるのにピンポンされた通知が無いときはこれだということに確信を持てるようになりました。

## 終わりに
イヤホンをしていても、風呂に入っていても、ベランダにいても、LINE通知によってピンポンに気づくことができるようになりました。
その場ではすぐに対応できなくても、LINE上にメッセージとして残るため、「あ、お風呂入っている間にピンポンされたんだ」という具合に気づくことができます。


おうちハック同好会の他の方々の投稿を見ると、創作意欲が湧いてきますね。
今回のおうちハックの拡張として、不在時にピンポンされたらアレクサが応答してくれて留守電みたいな感じになったら便利かなと考えています。
メッセージ残してもらったり、宅配便だったら宅配ボックスに入れておいてくださいと発信したり、自分だけは「アレクサ、開けて」でエントランスのドア開けてもらったりできたら便利かなと考えています。
（できるかはおいておいて。）