2017/04/29

ドアロックチェッカーの制作

玄関ドアのロックがされているか、遠隔で確認できる仕組みを作ります。


仕様
  • 玄関ドアの施錠・開錠でIFTTTにイベントを投げる。
  • アンロック状態で5分経過後、IFTTTにイベントを投げる。
  • メールで問い合わせると、現在の状態をもってIFTTTにイベントを投げる。
  • (おまけ)IFTTTのトリガを引くとき、データ部分に現在の温度・湿度・気圧を添付する。
出力がIFTTTなのは、設定によって直接スマホの通知を出したりメールを出したりgoogleドライブに保存したりとなんでもできるからです。
スイッチ1個の監視のためにraspberry piを1台動かすのもなんだかもったいないので、温湿度気圧センサを載せます。
使用言語はpython。お手軽にいろいろできます。

材料
  • raspberry pi zero v1.3ケースキット \2,160
    https://www.switch-science.com/catalog/3191/
  • アレグロ, ホール効果スイッチ IC, 3 → 24 V, 3-Pin SIP \1,042/5個
    http://jp.rs-online.com/web/p/hall-effect-sensor-ics/7244660/
  • (おまけ)BME280搭載 温湿度・気圧センサモジュール
    https://www.switch-science.com/catalog/2236/
下準備
  • メールアカウントと、iftttのアカウントがあること。
  • raspberry pi zeroに専用osである raspbianをインストール。
  • HDMIを毎回接続するのも面倒なので、raspbianにsshでログインできるように設定。
  • 必要そうなものをいろいろインストール(pythonのrequestライブラリやらGPIOライブラリやら)
配線
  • BME280モジュールの1,5pinをショート、4,6,7pinをショート
  • BME280 2pin -> Raspberry PI 5pin (I2c Clock)
  • BME280 3pin -> Raspberry PI 3pin (I2c Data)
  • BME280 4pin -> Raspberry PI 1pin (+3.3V)
  • BME280 5pin -> Raspberry PI 9pin (GND)
  • ホール効果スイッチICの1pin -> Raspberry PI 4pin (+5.0V)
  • ホール効果スイッチICの2pin -> Raspberry PI 5pin (GND)
  • ホール効果スイッチICの3pin -> Raspberry PI 12pin (ホールセンサ出力)
Raspberry PI のピン
https://learn.sparkfun.com/tutorials/raspberry-gpio より
Raspberry pi zero(無印)をケースに入れて使っており、裏側からGPIOのピンを引き出しています。USB上側はOTGで無線LANモジュールを挿しており、USB下側は電源です。
上に見えている小さい基盤が温湿度気圧センサ、長い線で出ているのがホールスイッチです。赤い棒は百均で買ってきた棒磁石です。これを玄関ドアロックのつまみに貼り付け、ホールスイッチを反応させるという、とてつもなく簡単な仕組みです。

ソースコード
以下の4つです。こちら(GitHub)に置いてあります。
  • LockChecker.py
  • Settings.py
    メールのID/PassおよびIFTTT呼び出しコードなど、初期設定を書き込む
  • gmail.py
    こちらのサイトのソースから必要な部分だけ抜粋。メール本文をリストで返すよう変更しました。
  • bme280.py
    こちらのサンプルコードの、こちらもテキストで返す部分をリストに変えてあります。
screenで動かせばよいので無限ループ、スリープコマンドでタイミングを作るという雑なつくりです。

入力
メール
タイトルがSettings.pyのREMOTE_SUBJECTで指定した単語(RPRemote)に一致している時、本文1行目をコマンドとして処理する。

コマンド
check … 現在の状態に従って、Lock または Unlockイベントを発行する。
unlockcheck … 現在の状態が Unlock の時、Unlockイベントを発行する。

出力
IFTTTイベント
Locked … 開錠から施錠に変化したとき、このイベントを発行する。
Unlocked … 施錠から開錠に変化したとき、このイベントを発行する。
Lock … コマンドによる問い合わせに対する応答としてこのイベントを発行する。
Unlock … 同上

運用
むりやり実用的っぽい使い方を考えてみます。
まずはIFTTTで以下2つのレシピを作成。
レシピ1
『スマホの位置情報がエリアから離れたら、メールをする』
エリアは自宅を中心に100m、メールは今回のシステムが受信できるアドレスに対して、タイトル RPRemote / 本文 unlockcheck としておきます。
レシピ2
『MakaerChannelでUnlockを受け取ったら、スマホの通知を出す』
通知は「鍵かけ忘れてますよ!」としておきます。

当然ですが、ドアロックチェッカーを動作させておきます。
この状態で鍵をかけずに自宅から離れるとスマホに「鍵かけ忘れてますよ!」と通知がくるようになりました。