42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
from microdot import Microdot, send_file, Response
|
|
from microdot.utemplate import Template
|
|
from microdot.websocket import with_websocket
|
|
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_hnadler(request):
|
|
mac = wifi.get_mac().hex()
|
|
return Template('/index.html').render(settings=settings, patterns=patterns.patterns.keys(), mac=mac)
|
|
|
|
@app.route("/static/<path: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("/settings")
|
|
def settings_handler(request):
|
|
return set_settings(request.body.decode('utf-8'), settings, patterns)
|
|
|
|
|
|
@app.route("/external")
|
|
@with_websocket
|
|
async def ws(request, ws):
|
|
patterns.select("external")
|
|
while True:
|
|
data = await ws.receive()
|
|
print(data)
|
|
for i in range(min(patterns.num_leds, int(len(data)/3))):
|
|
patterns.set(i, (data[i*3], data[i*3+1], data[i*3+2]))
|
|
patterns.write()
|
|
|
|
return app
|