feat: build NODE.DC control station shell

This commit is contained in:
DCCONSTRUCTIONS
2026-07-16 01:20:09 +03:00
parent 8b5b90d8af
commit 6402601d6d
30 changed files with 5296 additions and 1792 deletions
+10 -8
View File
@@ -80,13 +80,13 @@ class ConsoleService:
message = runtime["message"]
elif selected_device_id is not None:
phase = "device_selected"
message = "K1 выбран. Теперь введите название и пароль Wi-Fi."
message = "Устройство выбрано. Теперь введите название и пароль Wi-Fi."
elif devices:
likely_count = sum(bool(item.get("likely_k1")) for item in devices)
phase = "idle"
message = (
f"Найдено BLE-устройств: {len(devices)}. "
f"Возможных K1: {likely_count}. Выберите нужное устройство."
f"Совместимых профилей: {likely_count}. Выберите нужное устройство."
)
else:
phase = "idle"
@@ -144,7 +144,7 @@ class ConsoleService:
raise ValueError("сначала найдите и выберите устройство через Bluetooth")
self._set_operation(
"provisioning",
"Передаём в K1 настройки Wi-Fi одним подтверждённым запросом.",
"Передаём устройству настройки Wi-Fi одним подтверждённым запросом.",
)
session_dir = _new_operation_session_dir(
self.repository_root,
@@ -177,12 +177,14 @@ class ConsoleService:
)
if ipv4 is None:
raise RuntimeError(
"K1 не сообщил адрес в локальной сети; автоматического повтора не было"
"Устройство не сообщило адрес в локальной сети; автоматического повтора не было"
)
with self._lock:
self._selected_device_id = request.device_id
self._k1_ip = ipv4
self._operation_message = "K1 подключён к Wi-Fi и сообщил локальный адрес."
self._operation_message = (
"Устройство подключено к Wi-Fi и сообщило локальный адрес."
)
finally:
password = ""
with self._lock:
@@ -193,7 +195,7 @@ class ConsoleService:
target = host or self.state()["k1_ip"]
if not isinstance(target, str) or not target:
raise ValueError(
"сначала подключите K1 к Wi-Fi или укажите его локальный адрес"
"сначала подключите устройство к Wi-Fi или укажите его локальный адрес"
)
target = validate_private_ipv4(target)
out_dir = new_live_session_dir(self.repository_root)
@@ -219,7 +221,7 @@ class ConsoleService:
service = ConsoleService(REPOSITORY_ROOT)
app = FastAPI(
title="NODE.DC K1 Live Console API",
title="NODE.DC Device Control API",
version=__version__,
docs_url="/api/docs",
redoc_url=None,
@@ -257,7 +259,7 @@ async def connect(request: ConnectRequest) -> dict[str, Any]:
except (BleakError, OSError, TimeoutError, RuntimeError, ValueError) as exc:
raise HTTPException(
status_code=502,
detail=f"Ошибка подключения K1 к Wi-Fi: {exc}",
detail=f"Ошибка подключения устройства к Wi-Fi: {exc}",
) from exc