-
Notifications
You must be signed in to change notification settings - Fork 1
/
ledcontroller-server.py
92 lines (77 loc) · 2.34 KB
/
ledcontroller-server.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python3
from ledcontroller import LedController
from flask import Flask, request, jsonify
import argparse
import json
import time
from threading import Thread
parser = argparse.ArgumentParser(
description="Minimal REST server to adjust the RGBW lighting at the pixelbar."
)
parser.add_argument(
"--port",
type=int,
default=5000,
help="the port the server listens to, defaults to 5000"
)
parser.add_argument(
"--device",
type=str,
help="the serial device to connect with, defaults to /dev/tty.usbserial",
)
parser.add_argument(
"--baud",
type=int,
help="the serial communication speed, defaults to 9600"
)
args = parser.parse_args()
ledController = LedController()
if args.device or args.baud:
ledController.setSerialOptions(device=args.device, baudrate=args.baud)
app = Flask(__name__)
@app.route('/', methods=['GET'])
def showCurrentState():
hex_colors = ledController.stateToHexColors(ledController.getState())
result = {"colors": hex_colors}
return jsonify(result)
@app.route('/', methods=['POST'])
def setState():
try:
request_data = json.loads(request.data)
except json.JSONDecodeError:
return ("no or malformed data supplied", 400)
try:
hex_colors = request_data["colors"]
except KeyError:
return ("no colors specified", 400)
try:
state = ledController.stateFromHexColors(hex_colors)
ledController.setState(state)
except Exception as e:
print(e)
return (str(e), 400)
return showCurrentState()
@app.route('/', methods=['PATCH'])
def setPartialState():
try:
request_data = json.loads(request.data)
except json.JSONDecodeError:
return ("no or malformed data supplied", 400)
state = ledController.getState()
for i in range(0, ledController.GROUP_COUNT):
try:
if str(i) in request_data:
state[i] = ledController.parseHexColor(request_data[str(i)])
except Exception as e:
return (str(e), 400)
ledController.setState(state)
return showCurrentState()
def updateLedController():
while not stopThread:
ledController.update()
time.sleep(5)
stopThread = False
updateThread = Thread(target=updateLedController, daemon=True)
updateThread.start()
app.run(host="0.0.0.0", port=args.port)
stopThread = True