63 lines
1.7 KiB
Python
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()
|