LoginSignup
3
2

More than 3 years have passed since last update.

ラズベリーパイで電気錠の状態をLINEで確認できるようにしてみた

Last updated at Posted at 2019-12-17

経緯

我が家は電気錠を使っているのですが、いつも鍵を閉めたかどうか不安。
また、合鍵を作るとものすごく高いので、プライベートのかばんと会社用のかばんから入れたり出したりしてとても面倒でした。
そんな中、以下のブログを見つけて、自分でもチャレンジしてみました。
Raspberry Pi Zero wで自宅の電気錠対応扉があけっぱなしだったらslack通知させる

構成

電気錠(ykkap製、コントロールパネルはパナソニック)JEMA端子)--(GPIO)ラズパイ--(webhook)-- IFTTT--LINE

プログラミングの経験もないので、外部サービスに頼る構成に

準備したもの

-ラズベリーパイ 最初は3B+で作りました。
-ジャンパ線 メスーオス 2本
-三叉のギボシ端子セット
エーモン ギボシ端子セット(ダブル) 6セット
-圧着ペンチ 1000円ぐらい

ラズパイの電源は、電気錠のコントロールパネルの裏にコントロールパネル用のコンセントが入っていたので、三叉コンセントで分岐
はんだ付けも不要でした。

作業

電気錠のコントロールパネルを外し、
JEMAの線を確認。
HA端子(JEM-A端子)の仕様を教えてください
で、確認したところ、橙が高側、黄色が低側と分かったので、それぞれ線をカット。

ギボシ端子とジャンパー線を使って、橙の線をGPIO14、黄色をGNDに接続。

プログラム

上記サイトで、各種関連本のを見よう見まねで、IFTTTにwebhook を投げられたので、IFTTT上からLINEメッセージを送付するようにしました。
言語はpythonでチャレンジしました。
5分以上ドアが開いていても通知するような仕様にしています。

import requests
import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.IN)

URL = "https://maker.ifttt.com/trigger/"

MY_KEY = "###iftttのトークン###"

last_time_locked=time.time() 

status=""
while True:
 if ((GPIO.input(14)==GPIO.HIGH) and (status!="locked")) :
    time.sleep(1)     
    EVENT_NAME1 = "hall-hook"
    request_url1= URL + EVENT_NAME1 + "/with/key/" + MY_KEY
    payload={"value1":"Locked"}
    r = requests.post( request_url1,data=payload)
    status="locked"
    print(status)
    last_time_locked=time.time()
    print(last_time_locked)

 elif ((GPIO.input(14)==GPIO.HIGH) and (status=="locked")) :
    last_time_locked=time.time()
    time.sleep(20)

 elif((GPIO.input(14)==GPIO.LOW) and (status!="Unlocked")):
    EVENT_NAME2 ="door_opened"
    request_url2= URL + EVENT_NAME2 + "/with/key/" + MY_KEY
    payload={"value1":"Un Locked"}
    r = requests.post( request_url2,data=payload)
    status="Unlocked"
    print(status)
    print(last_time_locked)

   elif((GPIO.input(14)==GPIO.LOW) and (status=="Unlocked") and 
   (time.time()-last_time_locked>=300)):
    EVENT_NAME3="door_not_closed"
    request_url3=URL + EVENT_NAME3 + "/with/key/" + MY_KEY
    payload={"value1":"Check the door"}
    r = requests.post( request_url3,data=payload)
    status="Unlocked"
    print(status)
    print("Check")
    print(last_time_locked)
    time.sleep(60)
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2