diff --git a/src/web.py b/src/web.py index 048e60d..8126adf 100644 --- a/src/web.py +++ b/src/web.py @@ -1,125 +1,31 @@ from microdot import Microdot, send_file, Response from microdot.utemplate import Template from microdot.websocket import with_websocket - -import json +import machine +from settings import set_settings import wifi +import json def web(settings, patterns): app = Microdot() Response.default_content_type = 'text/html' @app.route('/') - async def index(request): - return Template('/index.html').render(settings=settings, patterns=patterns.patterns.keys()) + async def index_hnadler(request): + mac = wifi.get_mac().hex() + return Template('/index.html').render(settings=settings, patterns=patterns.patterns.keys(), mac=mac) @app.route("/static/") - def static(request, path): + def static_handler(request, path): if '..' in path: # Directory traversal is not allowed return 'Not found', 404 return send_file('static/' + path) - @app.post("/num_leds") - def num_leds(request): - try: - 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("/settings") + def settings_handler(request): + return set_settings(request.body.decode('utf-8'), settings, patterns) - @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") @with_websocket