-
Notifications
You must be signed in to change notification settings - Fork 2
/
app.py
58 lines (45 loc) · 1.27 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from gpiozero import LED, Button
from flask import Flask, jsonify, render_template
from time import sleep
from threading import Lock
from datetime import timedelta
import time
lastStatus = ('open', 0)
def setOpen():
global lastStatus
if lastStatus[0] != 'open':
lastStatus = ('open', time.time())
def setClosed():
global lastStatus
if lastStatus[0] != 'closed':
lastStatus = ('closed', time.time())
relay = LED(17, initial_value = True)
sensor = Button(27)
app = Flask(__name__)
lock = Lock()
sensor.when_pressed = setClosed
sensor.when_released = setOpen
def isOpen():
opened = not sensor.is_pressed
return opened
def elapsedTime():
return str(timedelta(seconds=time.time() - lastStatus[1]))
@app.route('/')
def index():
return render_template('index.html', open=isOpen(), elapsed=elapsedTime())
@app.route('/door', methods=['GET'])
def doorStatus():
return jsonify(open=not sensor.is_pressed, elapsed=elapsedTime())
@app.route('/door', methods=['POST'])
def toggleRelay():
with lock:
relay.off()
sleep(1)
relay.on()
return jsonify(status=relay.is_lit)
if __name__ == '__main__':
if isOpen():
setOpen()
else:
setClosed()
app.run(debug = True, host = '0.0.0.0', port = 80)