You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
5.0 KiB

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)