import time, 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_input = keyboard.record(until='enter') cardID = keyboard.get_typed_strings(cardID_input)[0] 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'] if data['secretTools']: GPIO.output(pin_config['tools_grn_LED'], GPIO.HIGH) else: GPIO.output(pin_config['tools_red_LED'], GPIO.HIGH) if data['fridge']: 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: 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: 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: btnBlink() print "Card not registered." history = [] try: with open('history.json', 'r') as json_data: history = json.load(json_data) except: print 'Initializing new history file.' finally: history.append(event) with open('history.json', 'w') as outfile: json.dump(history, outfile)