##経緯
我が家は電気錠を使っているのですが、いつも鍵を閉めたかどうか不安。
また、合鍵を作るとものすごく高いので、プライベートのかばんと会社用のかばんから入れたり出したりしてとても面倒でした。
そんな中、以下のブログを見つけて、自分でもチャレンジしてみました。
Raspberry Pi Zero wで自宅の電気錠対応扉があけっぱなしだったらslack通知させる
##構成
電気錠(ykkap製、コントロールパネルはパナソニック)JEMA端子)--(GPIO)ラズパイ--(webhook)-- IFTTT--LINE
プログラミングの経験もないので、外部サービスに頼る構成に
##準備したもの
-ラズベリーパイ 最初は3B+で作りました。
-ジャンパ線 メスーオス 2本
-三叉のギボシ端子セット
[エーモン ギボシ端子セット(ダブル) 6セット] (https://www.amazon.jp/dp/B0095N4LPS?ref=ppx_pop_mob_ap_share)
-圧着ペンチ 1000円ぐらい
ラズパイの電源は、電気錠のコントロールパネルの裏にコントロールパネル用のコンセントが入っていたので、三叉コンセントで分岐
はんだ付けも不要でした。
##作業
電気錠のコントロールパネルを外し、
JEMAの線を確認。
[HA端子(JEM-A端子)の仕様を教えてください]
(https://jpn.faq.panasonic.com/app/answers/detail/a_id/86318/~/ha%E7%AB%AF%E5%AD%90%28jem-a%E7%AB%AF%E5%AD%90%29%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%AF%EF%BC%9F)
で、確認したところ、橙が高側、黄色が低側と分かったので、それぞれ線をカット。
ギボシ端子とジャンパー線を使って、橙の線を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)