Files
gate/gate.py

63 lines
1.7 KiB
Python

import pigpio
import time
import logging
import json
import requests
from wiegand import decoder
class door:
def __init__(self, api_key):
self.api_key = api_key
def unlock_door(self):
body = {"entity_id": "lock.kwikset_smartcode_convert_gen1_bb8103fd_door_lock"}
headers = {'authorization': f'Bearer {self.api_key}'}
requests.post("https://ha.zoisite.xyz/api/services/lock/unlock", headers=headers, data=json.dumps(body))
print("unlocked")
def lock_door(self):
body = {"entity_id": "lock.kwikset_smartcode_convert_gen1_bb8103fd_door_lock"}
headers = {'authorization': f'Bearer {self.api_key}'}
requests.post("https://ha.zoisite.xyz/api/services/lock/lock", headers=headers, data=json.dumps(body))
print("locked")
def load_secrets():
with open("./secrets.json") as secrets:
return json.loads(secrets.read())
if __name__ == "__main__":
secrets = load_secrets()
pi = pigpio.pi()
door = door(secrets['api_key'])
current_code = ""
def callback(bits, value):
global current_code
# indicates keypad press
if bits == 4:
print(value)
current_code = current_code[-3:] + str(value)
if value == 11:
# lock door on # character
door.lock_door()
current_code = ""
if len(current_code) == 4:
# check if we have a valid code
if current_code in secrets['codes']:
door.unlock_door()
current_code = ""
# indicates a card swipe
elif bits == 37:
current_code = ""
str_value = str(value)
if str_value in secrets['cards']:
door.unlock_door()
logging.info("bits={} value={}".format(bits, value))
w = decoder(pi, 2, 3, callback)
time.sleep(1000)
w.cancel()
pi.stop()