/
webrelay.py
60 lines (48 loc) · 1.67 KB
/
webrelay.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
59
60
import RPi.GPIO as GPIO
from flask import Flask, jsonify, abort, request, render_template
from relaydefinitions import relays, relayIdToPin
app = Flask(__name__)
GPIO.setmode(GPIO.BCM)
relayStateToGPIOState = {
'off' : GPIO.LOW,
'on' : GPIO.HIGH
}
def Setup():
for relay in relays:
GPIO.setup(relayIdToPin[relay['id']],GPIO.OUT)
GPIO.output(relayIdToPin[relay['id']],relayStateToGPIOState[relay['state']])
def UpdatePinFromRelayObject(relay):
GPIO.output(relayIdToPin[relay['id']],relayStateToGPIOState[relay['state']])
@app.route('/WebRelay/', methods=['GET'])
def index():
return render_template('Index.html');
@app.route('/WebRelay/api/relays', methods=['GET'])
def get_relays():
return jsonify({'relays': relays})
@app.route('/WebRelay/api/relays/<int:relay_id>', methods=['GET'])
def get_relay(relay_id):
matchingRelays = [relay for relay in relays if relay['id'] == relay_id]
if len(matchingRelays) == 0:
abort(404)
return jsonify({'relay': matchingRelays[0]})
@app.route('/WebRelay/api/relays/<int:relay_id>', methods=['PUT'])
def update_relay(relay_id):
matchingRelays = [relay for relay in relays if relay['id'] == relay_id]
if len(matchingRelays) == 0:
abort(404)
if not request.json:
abort(400)
if not 'state' in request.json:
abort(400)
relay = matchingRelays[0]
relay['state']=request.json.get('state')
UpdatePinFromRelayObject(relay)
return jsonify({'relay': relay})
if __name__ == "__main__":
print("starting...")
try:
Setup()
app.run(host='0.0.0.0',port=80,debug=False)
finally:
print("cleaning up")
GPIO.cleanup()