added backlight and fixed outbound

This commit is contained in:
2026-07-21 09:17:48 +03:00
parent ff2b8a250e
commit 5392273794
37 changed files with 1560 additions and 76 deletions
+92 -2
View File
@@ -200,13 +200,16 @@ def access_status():
return status
MIN_USER_PORT = 1024
def set_web_port(port):
try:
port = int(port)
except (TypeError, ValueError):
raise ValueError("invalid web port")
if port < 1 or port > 65535:
raise ValueError("invalid web port")
if port < MIN_USER_PORT or port > 65535:
raise ValueError(f"web port must be {MIN_USER_PORT}65535")
cfg = load_config()
cfg.setdefault("settings", {})["webPort"] = port
save_config(cfg)
@@ -219,6 +222,72 @@ def set_web_port(port):
return port
def _run_brightness(*args, timeout=10):
script = str(scripts_dir() / "bt-brightness")
proc = subprocess.run(
["sudo", "-n", script, *args],
capture_output=True,
text=True,
timeout=timeout,
check=False,
)
for line in reversed((proc.stdout or "").splitlines()):
line = line.strip()
if line.startswith("{") and line.endswith("}"):
return json.loads(line)
if proc.returncode != 0:
err = (proc.stderr or proc.stdout or "bt-brightness failed").strip()
raise RuntimeError(err)
raise RuntimeError((proc.stdout or "bt-brightness returned no status").strip())
def brightness_status():
live = _run_brightness("status")
cfg = load_config()
saved = cfg.get("settings", {}).get("brightness")
try:
saved = int(saved) if saved is not None else None
except (TypeError, ValueError):
saved = None
live["saved"] = saved
live["ok"] = True
return live
def set_brightness(percent):
try:
percent = int(percent)
except (TypeError, ValueError):
raise ValueError("percent must be an integer 0-100")
if percent < 0 or percent > 100:
raise ValueError("percent must be 0-100")
live = _run_brightness("set", str(percent))
cfg = load_config()
cfg.setdefault("settings", {})["brightness"] = percent
save_config(cfg)
live["saved"] = percent
live["ok"] = True
return live
def apply_saved_brightness():
"""Restore brightness from config at service start. No-op if unset."""
cfg = load_config()
saved = cfg.get("settings", {}).get("brightness")
if saved is None:
return None
try:
percent = int(saved)
except (TypeError, ValueError):
return None
if percent < 0 or percent > 100:
return None
try:
return _run_brightness("set", str(percent))
except Exception:
return None
@system_bp.route("/api/system/stats", methods=["GET"])
@login_required
def api_system_stats():
@@ -261,6 +330,27 @@ def api_access_set():
return jsonify({"ok": False, "error": str(e)}), 500
@system_bp.route("/api/system/brightness", methods=["GET"])
@login_required
def api_brightness_get():
try:
return jsonify(brightness_status())
except RuntimeError as e:
return jsonify({"ok": False, "error": str(e)}), 500
@system_bp.route("/api/system/brightness", methods=["POST"])
@login_required
def api_brightness_set():
data = request.get_json(force=True, silent=True) or {}
try:
return jsonify(set_brightness(data.get("percent")))
except ValueError as e:
abort(400, str(e))
except RuntimeError as e:
return jsonify({"ok": False, "error": str(e)}), 500
@system_bp.route("/api/system/time", methods=["GET"])
@login_required
def api_system_time_get():