|
|
|
@ -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__': |
|
|
|
|