fix: make led panel controls write to sysfs reliably

This commit is contained in:
2026-05-15 15:11:59 +08:00
parent f8d3170028
commit 45aaba0c8a
3 changed files with 118 additions and 23 deletions
+52
View File
@@ -0,0 +1,52 @@
#!/usr/bin/env python3
import json
import tempfile
import threading
import urllib.request
from pathlib import Path
from led_panel import Handler, ThreadingHTTPServer
import led_panel
def req(port, path, body=None):
data = None
headers = {}
if body is not None:
data = json.dumps(body).encode()
headers['Content-Type'] = 'application/json'
r = urllib.request.Request(f'http://127.0.0.1:{port}{path}', data=data, headers=headers)
with urllib.request.urlopen(r, timeout=5) as resp:
return json.loads(resp.read().decode())
def main():
with tempfile.TemporaryDirectory() as td:
root = Path(td)
d = root / 'blue:wan'
d.mkdir()
(d / 'brightness').write_text('0')
(d / 'max_brightness').write_text('1')
(d / 'trigger').write_text('[none] timer')
(d / 'delay_on').write_text('500')
(d / 'delay_off').write_text('500')
led_panel.LED_ROOT = root
httpd = ThreadingHTTPServer(('127.0.0.1', 0), Handler)
port = httpd.server_address[1]
t = threading.Thread(target=httpd.serve_forever, daemon=True)
t.start()
try:
leds = req(port, '/api/leds')
assert leds['ok'] and leds['leds'][0]['name'] == 'blue:wan'
b = req(port, '/api/brightness', {'name':'blue:wan','value':1})
assert b['ok'] and (d / 'brightness').read_text() == '1'
tr = req(port, '/api/trigger', {'name':'blue:wan','trigger':'timer'})
assert tr['ok']
assert (d / 'trigger').read_text() == 'timer'
delay = req(port, '/api/delay', {'name':'blue:wan','field':'delay_on','value':123})
assert delay['ok'] and (d / 'delay_on').read_text() == '123'
print('OK: API write regression passed')
finally:
httpd.shutdown()
if __name__ == '__main__':
main()