Have single json endpoint
This commit is contained in:
parent
c8bcb85062
commit
ed3351a20b
114
src/web.py
114
src/web.py
|
@ -1,125 +1,31 @@
|
||||||
from microdot import Microdot, send_file, Response
|
from microdot import Microdot, send_file, Response
|
||||||
from microdot.utemplate import Template
|
from microdot.utemplate import Template
|
||||||
from microdot.websocket import with_websocket
|
from microdot.websocket import with_websocket
|
||||||
|
import machine
|
||||||
import json
|
from settings import set_settings
|
||||||
import wifi
|
import wifi
|
||||||
|
import json
|
||||||
|
|
||||||
def web(settings, patterns):
|
def web(settings, patterns):
|
||||||
app = Microdot()
|
app = Microdot()
|
||||||
Response.default_content_type = 'text/html'
|
Response.default_content_type = 'text/html'
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
async def index(request):
|
async def index_hnadler(request):
|
||||||
return Template('/index.html').render(settings=settings, patterns=patterns.patterns.keys())
|
mac = wifi.get_mac().hex()
|
||||||
|
return Template('/index.html').render(settings=settings, patterns=patterns.patterns.keys(), mac=mac)
|
||||||
|
|
||||||
@app.route("/static/<path:path>")
|
@app.route("/static/<path:path>")
|
||||||
def static(request, path):
|
def static_handler(request, path):
|
||||||
if '..' in path:
|
if '..' in path:
|
||||||
# Directory traversal is not allowed
|
# Directory traversal is not allowed
|
||||||
return 'Not found', 404
|
return 'Not found', 404
|
||||||
return send_file('static/' + path)
|
return send_file('static/' + path)
|
||||||
|
|
||||||
@app.post("/num_leds")
|
@app.post("/settings")
|
||||||
def num_leds(request):
|
def settings_handler(request):
|
||||||
try:
|
return set_settings(request.body.decode('utf-8'), settings, patterns)
|
||||||
data = json.loads(request.body.decode('utf-8'))
|
|
||||||
num_leds = int(data["num_leds"])
|
|
||||||
patterns.update_num_leds(4, num_leds)
|
|
||||||
settings["num_leds"] = num_leds
|
|
||||||
settings.save()
|
|
||||||
return "OK", 200
|
|
||||||
except (ValueError, KeyError, json.JSONDecodeError):
|
|
||||||
return "Bad request", 400
|
|
||||||
|
|
||||||
@app.post("/pattern")
|
|
||||||
def pattern(request):
|
|
||||||
try:
|
|
||||||
data = json.loads(request.body.decode('utf-8'))
|
|
||||||
pattern = data["pattern"]
|
|
||||||
if patterns.select(pattern):
|
|
||||||
settings["selected_pattern"] = pattern
|
|
||||||
settings.save()
|
|
||||||
return "OK", 200
|
|
||||||
else:
|
|
||||||
return "Bad request", 400
|
|
||||||
except (KeyError, json.JSONDecodeError):
|
|
||||||
return "Bad request", 400
|
|
||||||
|
|
||||||
@app.post("/delay")
|
|
||||||
def delay(request):
|
|
||||||
try:
|
|
||||||
data = json.loads(request.body.decode('utf-8'))
|
|
||||||
delay = int(data["delay"])
|
|
||||||
patterns.set_delay(delay)
|
|
||||||
settings["delay"] = delay
|
|
||||||
settings.save()
|
|
||||||
return "OK", 200
|
|
||||||
except (ValueError, KeyError, json.JSONDecodeError):
|
|
||||||
return "Bad request", 400
|
|
||||||
|
|
||||||
@app.post("/brightness")
|
|
||||||
def brightness(request):
|
|
||||||
try:
|
|
||||||
data = json.loads(request.body.decode('utf-8'))
|
|
||||||
brightness = int(data["brightness"])
|
|
||||||
patterns.set_brightness(brightness)
|
|
||||||
settings["brightness"] = brightness
|
|
||||||
settings.save()
|
|
||||||
return "OK", 200
|
|
||||||
except (ValueError, KeyError, json.JSONDecodeError):
|
|
||||||
return "Bad request", 400
|
|
||||||
|
|
||||||
@app.post("/color")
|
|
||||||
def color(request):
|
|
||||||
try:
|
|
||||||
data = json.loads(request.body.decode('utf-8'))
|
|
||||||
color = data["color"]
|
|
||||||
patterns.set_color1(tuple(int(color[i:i+2], 16) for i in (1, 3, 5))) # Convert hex to RGB
|
|
||||||
settings["color1"] = color
|
|
||||||
settings.save()
|
|
||||||
return "OK", 200
|
|
||||||
except (KeyError, json.JSONDecodeError, ValueError):
|
|
||||||
return "Bad request", 400
|
|
||||||
|
|
||||||
@app.post("/color2")
|
|
||||||
def color2(request):
|
|
||||||
try:
|
|
||||||
data = json.loads(request.body.decode('utf-8'))
|
|
||||||
color = data["color2"]
|
|
||||||
patterns.set_color2(tuple(int(color[i:i+2], 16) for i in (1, 3, 5))) # Convert hex to RGB
|
|
||||||
settings["color2"] = color
|
|
||||||
settings.save()
|
|
||||||
return "OK", 200
|
|
||||||
except (KeyError, json.JSONDecodeError, ValueError):
|
|
||||||
return "Bad request", 400
|
|
||||||
|
|
||||||
|
|
||||||
@app.post("/wifi_settings")
|
|
||||||
def wifi_settings(request):
|
|
||||||
try:
|
|
||||||
data = json.loads(request.body.decode('utf-8'))
|
|
||||||
print(data)
|
|
||||||
ssid = settings['wifi']['ssid'] = data['ssid']
|
|
||||||
password = settings['wifi']['password'] = data.get('password', settings['wifi']['password'])
|
|
||||||
ip = settings['wifi']['ip'] = data.get('ip', None)
|
|
||||||
gateway = settings['wifi']['gateway'] = data.get('gateway', None)
|
|
||||||
print(settings)
|
|
||||||
|
|
||||||
if config := wifi.connect(ssid, password, ip, gateway):
|
|
||||||
print(config)
|
|
||||||
settings.save()
|
|
||||||
|
|
||||||
return "OK", 200
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Wifi {e}")
|
|
||||||
return "Bad request", 400
|
|
||||||
|
|
||||||
|
|
||||||
@app.post("/sync")
|
|
||||||
def sync(request):
|
|
||||||
patterns.sync()
|
|
||||||
return "OK", 200
|
|
||||||
|
|
||||||
@app.route("/external")
|
@app.route("/external")
|
||||||
@with_websocket
|
@with_websocket
|
||||||
|
|
Loading…
Reference in New Issue