import time , json #import simplejson as json import RPi.GPIO as GPIO import keyboard import subprocess pin_config = [] def btnBlink(): for i in range(3): GPIO.output(pin_config['fridge_red_LED'], GPIO.HIGH) time.sleep(0.02) GPIO.output(pin_config['fridge_grn_LED'], GPIO.HIGH) time.sleep(0.02) GPIO.output(pin_config['tools_red_LED'], GPIO.HIGH) time.sleep(0.02) GPIO.output(pin_config['tools_grn_LED'], GPIO.HIGH) time.sleep(0.02) GPIO.output(pin_config['fridge_red_LED'], GPIO.LOW) time.sleep(0.02) GPIO.output(pin_config['fridge_grn_LED'], GPIO.LOW) time.sleep(0.02) GPIO.output(pin_config['tools_red_LED'], GPIO.LOW) time.sleep(0.02) GPIO.output(pin_config['tools_grn_LED'], GPIO.LOW) time.sleep(0.02) if __name__ == '__main__': with open('pin_config.json') as pin_config_stream: pin_config = json.load(pin_config_stream) if pin_config['mode'] == 'BOARD': GPIO.setmode(GPIO.BOARD) else: GPIO.setmode(GPIO.BCM) GPIO.setup(pin_config['fridge_btn'], GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(pin_config['tools_btn'], GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(pin_config['fridge_red_LED'], GPIO.OUT) GPIO.setup(pin_config['fridge_grn_LED'], GPIO.OUT) GPIO.setup(pin_config['tools_red_LED'], GPIO.OUT) GPIO.setup(pin_config['tools_grn_LED'], GPIO.OUT) GPIO.output(pin_config['fridge_grn_LED'], GPIO.LOW) GPIO.output(pin_config['tools_grn_LED'], GPIO.LOW) GPIO.output(pin_config['fridge_red_LED'], GPIO.LOW) GPIO.output(pin_config['tools_red_LED'], GPIO.LOW) while True: print ("Enter card ID:") cardID='' cardID_input = keyboard.record(until='enter') cardID_gen = keyboard.get_typed_strings(cardID_input) for i in cardID_gen: cardID += i event = {} event["time"] = time.time() event["cardID"] = cardID event["name"] = '' event["action"] = '' try: with open('cards/' + cardID + '.json') as card_data: data = json.load(card_data) event["name"] = data['name'] locked = False with open('locked_till.txt', 'rb') as f: txt = f.read() t = float(txt) locked = time.time() < t if data['secretTools'] and not locked: GPIO.output(pin_config['tools_grn_LED'], GPIO.HIGH) else: GPIO.output(pin_config['tools_red_LED'], GPIO.HIGH) if data['fridge'] and not locked: GPIO.output(pin_config['fridge_grn_LED'], GPIO.HIGH) else: GPIO.output(pin_config['fridge_red_LED'], GPIO.HIGH) timeout = time.time() + 5 # 5 seconds timeout wait = True while wait: if data['secretTools'] and GPIO.input(pin_config['tools_btn']) == 0 and not locked: GPIO.output(pin_config['fridge_grn_LED'], GPIO.LOW) GPIO.output(pin_config['tools_grn_LED'], GPIO.LOW) GPIO.output(pin_config['fridge_red_LED'], GPIO.LOW) GPIO.output(pin_config['tools_red_LED'], GPIO.LOW) event['action'] = 'tools' wait = False # Open tools subprocess.call("/home/pi/ELAB-RFID-I2C/RPi/i2c_challenge 0x30", shell=True) if data['fridge'] and GPIO.input(pin_config['fridge_btn']) == 0 and not locked: GPIO.output(pin_config['fridge_grn_LED'], GPIO.LOW) GPIO.output(pin_config['tools_grn_LED'], GPIO.LOW) GPIO.output(pin_config['fridge_red_LED'], GPIO.LOW) GPIO.output(pin_config['tools_red_LED'], GPIO.LOW) event['action'] = 'fridge' wait = False # Open fridge subprocess.call("/home/pi/ELAB-RFID-I2C/RPi/i2c_challenge 0x20", shell=True) if time.time() > timeout: GPIO.output(pin_config['fridge_grn_LED'], GPIO.LOW) GPIO.output(pin_config['tools_grn_LED'], GPIO.LOW) GPIO.output(pin_config['fridge_red_LED'], GPIO.LOW) GPIO.output(pin_config['tools_red_LED'], GPIO.LOW) wait = False except Exception as e: btnBlink() print( "Card not registered.") print(e) history = [] try: with open('history.json', 'r') as json_data: history = json.load(json_data) except Exception as e: print('Initializing new history file.') print(e) finally: history.append(event) with open('history.json', 'w') as outfile: json.dump(history, outfile)