A rewrite of the Raspberry Pi Garage Door Opener using Flask
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.

67 lines
2.5 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. # Python Script To Control Garage Door
  2. # Load libraries
  3. import RPi.GPIO as GPIO #Import RPi GPIO library
  4. import time #Import time
  5. from flask import Flask, make_response, request, render_template, redirect, url_for #Import flask web server and additional components
  6. app = Flask(__name__)
  7. # Set up the GPIO pins
  8. GPIO.setwarnings(False)
  9. GPIO.setmode(GPIO.BOARD)
  10. PIN_TRIG = 40
  11. PIN_ECHO = 38
  12. GPIO.setup(7, GPIO.OUT)
  13. GPIO.setup(11, GPIO.OUT)
  14. GPIO.output(7, True)
  15. GPIO.output(11, True)
  16. #Variables
  17. correct_login = 0
  18. # Route for the main page
  19. @app.route('/')
  20. def index():
  21. GPIO.setup(PIN_TRIG, GPIO.OUT) #Setup the gpio trigger pin as input
  22. GPIO.setup(PIN_ECHO, GPIO.IN) #Setup the gpio echo pin as output
  23. time.sleep(2) #Wait for 2 seconds for sensor to settle
  24. GPIO.output(PIN_TRIG, GPIO.LOW) #Set trigger to low
  25. GPIO.output(PIN_TRIG, GPIO.HIGH) #Set trigger to high
  26. time.sleep(0.00001) #Wait for 0.1 milliseconds before setting to low again
  27. GPIO.output(PIN_TRIG, GPIO.LOW) #Set trigger to low again
  28. while GPIO.input(PIN_ECHO)==0:
  29. pulse_start_time = time.time() #Set the start time of when the waves are emitted by the sensor
  30. while GPIO.input(PIN_ECHO)==1:
  31. pulse_end_time = time.time() #Record the time the waves traveled back to the sensor
  32. pulse_duration = pulse_end_time - pulse_start_time #Calculate how long it took for the round trip of the waves
  33. distance = round(pulse_duration * 17150, 2) #Convert the time it took to centimeters and round to 2 decimals
  34. if distance >= 80: #Check if the distance is less than 80cm (This will depend on the garage)
  35. return 'The garage is closed.'
  36. else:
  37. return 'The garage is open.'
  38. # Route for the login page
  39. @app.route('/login', methods=['GET', 'POST'])
  40. def login():
  41. error = None
  42. if request.method == 'POST':
  43. if request.form['username'] != 'admin' or request.form['password'] != 'admin':
  44. error = 'Invalid Credentials. Please try again.'
  45. else:
  46. global correct_login
  47. correct_login = 1
  48. return redirect(url_for('cookie'))
  49. return render_template('login.html', error=error)
  50. # Route for the login page
  51. @app.route('/set-cookie')
  52. def cookie():
  53. if correct_login == 1:
  54. resp = make_response()
  55. resp.set_cookie('logged_in', 'yes')
  56. return resp and return redirect(url_for('index'))
  57. else:
  58. return 'Not logged in.'
  59. if __name__ == '__main__':
  60. app.run(host='0.0.0.0') #Run the webserver