def cleanup(): log.info("Cleaning up and exiting") interfaceControl.cleanup() if interfaceControl.PN532: process = subprocess.Popen(['pidof', 'nfc-poll'], stdout=subprocess.PIPE) out, err = process.communicate() if out != '': os.kill(int(out), signal.SIGTERM) sys.exit(0)
def enroll(userID=None, nfcID=None, steal=False, quiet=False, reader=False): if os.geteuid() != 0: print "Root is required to run this script" return user = getUser(userID, confirm=(False if userID else True)) if user == None: return userID = user['userID'] if not reader: if not nfcID: putMessage( "Enter key UID manually,") choice = getInput("or read key from NFC reader?", options=['m', 'r']) if choice == 'm': nfcID = getInput("Enter key UID") if not nfcID: try: restartDoorLock = True if killDoorLock() == 0 else False from rpi import interfaceControl while True: log.debug("Starting NFC read") if not quiet: putMessage("Swipe card now") retry = 0 while retry < 30: interfaceControl.setPowerStatus(True) nfcID = interfaceControl.nfcGetUID() interfaceControl.setPowerStatus(False) if nfcID: break time.sleep(0.75) retry += 1 log.debug("Finished NFC read") if not nfcID and not quiet: retry = getInput("Couldn't read card. Retry?", options=['y', 'n']) if nfcID != None or retry != 'y': break else: break except KeyboardInterrupt: log.info("Received KeyboardInterrupt") except: putMessage("Unexpected error: {:}".format(sys.exc_info()[0]), level=severity.ERROR) log.error("Unexpected error: {:}".format(sys.exc_info()[0])) raise finally: interfaceControl.cleanup() if restartDoorLock: log.info("restarting door-lock.py") startDoorLock() if nfcID != None: # @TODO: catch duplicate key error, exit with error status try: backend.enroll(nfcID, userID, steal) putMessage("User [{:d}] enrolled with ID: {:s}".format(userID, nfcID),level=severity.OK) except IntegrityError: putMessage("Key is already assigned!",level=severity.WARNING) putMessage("User not enrolled",level=severity.ERROR) else: putMessage("Did not enroll user", level=severity.WARNING)
def enroll(userID=None, nfcID=None, steal=False, quiet=False, reader=False): if os.geteuid() != 0: print "Root is required to run this script" return user = getUser(userID, confirm=(False if userID else True)) if user == None: return userID = user['userID'] if not reader: if not nfcID: putMessage("Enter key UID manually,") choice = getInput("or read key from NFC reader?", options=['m', 'r']) if choice == 'm': nfcID = getInput("Enter key UID") if not nfcID: try: restartDoorLock = True if killDoorLock() == 0 else False from rpi import interfaceControl while True: log.debug("Starting NFC read") if not quiet: putMessage("Swipe card now") retry = 0 while retry < 30: interfaceControl.setPowerStatus(True) nfcID = interfaceControl.nfcGetUID() interfaceControl.setPowerStatus(False) if nfcID: break time.sleep(0.75) retry += 1 log.debug("Finished NFC read") if not nfcID and not quiet: retry = getInput("Couldn't read card. Retry?", options=['y', 'n']) if nfcID != None or retry != 'y': break else: break except KeyboardInterrupt: log.info("Received KeyboardInterrupt") except: putMessage("Unexpected error: {:}".format(sys.exc_info()[0]), level=severity.ERROR) log.error("Unexpected error: {:}".format(sys.exc_info()[0])) raise finally: interfaceControl.cleanup() if restartDoorLock: log.info("restarting door-lock.py") startDoorLock() if nfcID != None: # @TODO: catch duplicate key error, exit with error status try: backend.enroll(nfcID, userID, steal) putMessage("User [{:d}] enrolled with ID: {:s}".format( userID, nfcID), level=severity.OK) except IntegrityError: putMessage("Key is already assigned!", level=severity.WARNING) putMessage("User not enrolled", level=severity.ERROR) else: putMessage("Did not enroll user", level=severity.WARNING)