doors/doors.py

119 lines
2.5 KiB
Python
Executable File

#!/usr/bin/python
import socket
##################
# #
# Default values #
# #
##################
CONTROLLER = socket.gethostname()
SERVER = "localhost"
RFID_PATH = "/dev/ttyUSB0"
RED_LED = 11
GREEN_LED = 13
DOOR_STRIKE = 15
import os
####################
# #
# Read doorrc file #
# #
####################
for conf in [ "/etc/doorrc", "./doorrc" ]:
if os.path.exists(conf):
with open(conf) as f:
exec(compile(f.read(), "doorrc", 'exec'))
import atexit
import RPi.GPIO as GPIO
####################
# #
# Set up GPIO Pins #
# #
####################
GPIO.setmode(GPIO.BOARD)
atexit.register(GPIO.cleanup)
GPIO.setup(DOOR_STRIKE, GPIO.OUT)
GPIO.setup(RED_LED, GPIO.OUT)
GPIO.setup(GREEN_LED, GPIO.OUT)
#Be explicit with what we want
#lowVoltage of 0 is ground
lowVoltage = 0
highVoltage = 1
#Pull Enable Pin Low to make it readable
GPIO.output(DOOR_STRIKE, lowVoltage)
#When door is open
def open_door():
print("Door is open");
GPIO.output(GREEN_LED, highVoltage)
GPIO.output(RED_LED, lowVoltage)
GPIO.output(DOOR_STRIKE, highVoltage)
#When door is closed and locked
def close_door():
print("Door is closed");
GPIO.output(DOOR_STRIKE, lowVoltage)
GPIO.output(GREEN_LED, lowVoltage)
GPIO.output(RED_LED, highVoltage)
import time
from urllib import request
#############################################
# #
# Verify a key with openings.workantile.com #
# #
#############################################
# Blocks for 5 seconds before resetting the door
def verify_key(key):
with request.urlopen(SERVER + ("/%s" % key)) as f:
if f.read().decode() == "OK":
open_door()
time.sleep(5)
close_door()
#python-pyserial package. Not sure we need this. Grabbed based on
#http://allenmlabs.blogspot.se/2013/01/raspberry-pi-parallax-rfid-reader.html
import serial
###################
# #
# Run RFID Reader #
# #
###################
RFID_SERIAL = serial.Serial(RFID_PATH, 2400, timeout=1)
def read_rfid():
string = RFID_SERIAL.read(12)
if len(string) == 0:
print("No tag read")
#continue
else:
key = string[1:11].decode() #exclude start x0A and stop x0D bytes
print(key)
verify_key(key)
RFID_SERIAL.flushInput() # ignore errors, no data
while True:
try:
read_rfid()
except Exception(e):
print(e)