diff --git a/main.py b/main.py index 9f9f86e..45b3b6c 100644 --- a/main.py +++ b/main.py @@ -6,44 +6,71 @@ logging.basicConfig( import os import json import sys -#import RPi.GPIO as GPIO +import RPi.GPIO as GPIO import serial import time RELAY_PIN = 17 RFID_EN_PIN = 27 CARDS_FILE = 'cardexport.json' +OPEN_DURATION = 5 ser = None recent = {} cards = {} def init(): - global ser - - #GPIO.setwarnings(False) - #GPIO.setmode(GPIO.BCM) - #GPIO.setup(RELAY_PIN, GPIO.OUT) - #GPIO.output(RELAY_PIN, GPIO.LOW) - #GPIO.setup(RFID_EN_PIN, GPIO.OUT) - #GPIO.output(RFID_EN_PIN, GPIO.LOW) + global ser, cards + + GPIO.setwarnings(False) + GPIO.setmode(GPIO.BCM) + GPIO.setup(RELAY_PIN, GPIO.OUT) + GPIO.output(RELAY_PIN, GPIO.LOW) + GPIO.setup(RFID_EN_PIN, GPIO.OUT) + GPIO.output(RFID_EN_PIN, GPIO.LOW) logging.info('GPIO initialized.') - #ser = serial.Serial(port='/dev/ttyAMA0', baudrate=2400, timeout=0.1) + ser = serial.Serial(port='/dev/ttyAMA0', baudrate=2400, timeout=0.1) logging.info('Serial initialized.') with open(CARDS_FILE, 'r') as f: cards = json.load(f) logging.info('Read in {} card numbers.'.format(str(len(cards)))) +def unlock_door(): + GPIO.output(RELAY_PIN, GPIO.HIGH) + GPIO.output(RFID_EN_PIN, GPIO.HIGH) + + time.sleep(OPEN_DURATION) + + GPIO.output(RELAY_PIN, GPIO.LOW) + GPIO.output(RFID_EN_PIN, GPIO.LOW) + +def handle_card_read(card): + if card in cards: + logging.info('Card recognized.') + member = cards[card] + else: + logging.info('Card not recognized. Denying access.') + return + + if member['enabled']: + logging.info('Member active.') + else: + logging.info('Member not active. Denying access.') + return + + logging.info('DOOR ACCESS - Card: {} | Name: {} | id: {}'.format( + card, member['name'], member['id'])) + unlock_door() def loop(): card = ser.readline() if not card: return - card = card.strip() + card = card.decode().strip() if len(card) != 10: return @@ -54,7 +81,7 @@ def loop(): return recent[card] = now - logging.info('Read card # ' + card) + logging.info('\nRead card #' + card) handle_card_read(card) if __name__ == '__main__': diff --git a/requirements.txt b/requirements.txt index 4386cea..205196f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1 @@ -pkg-resources==0.0.0 pyserial==3.4