Bluehornet blog

RaspberryPi, Arduinoを日常生活に活用してみたいブログ

玄関の鍵の状態をLineに通知する

1. 課題

・鍵をかけたかどうか心配になる
・鍵の開閉はオンラインでできないほうがまだ安心

2. 解決策

・鍵の開閉状態を検知し、鍵がかかっているかどうかをLINE notifyを使って通知

3. 手順

(a) 準備したもの
Raspberry Pi 4
・ホール素子 DN6851
ネオジム磁石

(b) ハードのセットアップ
・接続する図は省略、基本的には上のイメージ図の感じで結線
・磁石とホール素子の位置はこんな感じ
*仮固定ではあるのですが、見た目が悪いので奥さんには大変不評です。

f:id:bluehornet96:20200726170157j:plain
セットアップ

サムターン部にネオジム磁石を取り付け、ホール素子はサムターンに対向できそうな位置に固定。ホール素子からRPiまでは導線を3本無理やりひきまわしています。
・このときのために玄関先のシューズクローク内にコンセントをつけてもらい、ラズパイを稼働させていました(今までは温湿度を測っていただけ)。

4. プログラム

(a)準備
・とりあえずRaspberry piのGPIOをpythonから
使えるようにする

$ sudo apt-get install pigpio
  • 参考にしたページ

https://karaage.hatenadiary.jp/entry/2017/02/10/073000

・LINE Notifyを使えるようにする

  • 参考にしたページ:

https://nakomii.hatenablog.com/entry/python_line_notify

・ホール素子Raspberry piにつなぐ

  • 参考にしたページ:

https://brown.ap.teacup.com/nekosan0/253.html
https://uyamazak.hatenablog.com/entry/2019/08/06/095134

・ドアのサムターン部分にネオジム磁石と、ホール素子を固定する


(b)コード
・現在の鍵の状態はlock_state.csvというファイルに記録しておく
・現在のgpioの状態を確認
・lock_state.csvと同じであれば何もしない
・lock_state.csvと値が異なる場合、「鍵をかけた」OR「鍵を開けた」のどっちかを通知。その後lock_state.csvに状態を上書き(鍵があいていれば0、鍵が閉じていれば1)
・cronを使って5秒間隔でプログラムを実行させる

・cronで5秒おきにプログラムを実行

* * * * * for i in 'seq 0 5 59';do (sleep ${i}; python /home/pi/Documents/lock/lock_line.py) &done;

・これで5秒に1回サムターンの状態を確認して、状態が変化していればLINEグループに通知します。
・文字だけだとLINEでも解錠/施錠の状態を見間違えやすいので、LOCK、UNLOCKのアイコンなどを探して一緒に通知するとわかりやすいです。
・受信用LINEグループを奥さんと共有することで、お互いいつ自宅を離れていつ戻ってきたかなどが確認できます。

5. 運用してみた感想

・「鍵かけたっけ?」に対して、ちゃんと確認できるのでお出かけ直後に一旦鍵を見に戻る、という必要がなくなった
・子供が度のいつ帰ってきたかが把握できるのでちょっと安心