Skip to content
EvelRus edited this page Mar 4, 2026 · 1 revision

🌐 API и Socket.IO

REST API

Базовый URL: http://localhost:3000

Информация о сервере

Метод Путь Описание
GET /api/info Версии node-poweredup, socket.io, uptime, версия Node.js

Пример ответа:

{ "poweredUp": "10.1.0", "socketIO": "4.8.3", "uptime": 3600, "nodeVersion": "v20.11.0" }

Конфигурация хабов

Метод Путь Описание
GET /api/config Получить конфигурацию всех хабов
POST /api/config Сохранить конфигурацию (body: JSON-объект)

Логи

Метод Путь Параметры Описание
GET /api/logs ?n=200 Последние N записей из буфера в памяти
GET /api/logs/files Список файлов логов (по убыванию даты)
GET /api/logs/file ?name=2026-03-04.log Содержимое файла лога

Данные автоматизации

Метод Путь Описание
GET /api/scenarios Все сохранённые сценарии
GET /api/schedules Расписание
GET /api/consists Составы

Файловый браузер

Метод Путь Параметры Описание
GET /api/browse ?path=sound/ Список папок и файлов в public/

Используется для выбора звуков и фото в настройках поезда.

Пример ответа:

{
  "dirs": ["crocodile", "passenger"],
  "files": ["logo.png"],
  "current": "sound/"
}

Socket.IO события

Клиент → Сервер

Событие Данные Описание
setSpeed {trainId, speed, source?} Установить скорость (−100..+100)
estop Экстренная остановка всех поездов
reconnectHub {trainId} Запрос повторного сканирования BLE
setRampParams {trainId, stepSize, stepMs} Изменить параметры рампа
savePresets {trainId, presets} Сохранить пресеты скорости
setLED {trainId, color} Цвет LED хаба ("red", "green", …)
saveConsist {id, consist} Сохранить состав
deleteConsist {id} Удалить состав
setConsistSpeed {consistId, speed} Скорость состава
startRecording {name} Начать запись сценария
stopRecording Завершить запись
playScenario {name, loops?} Воспроизвести сценарий
stopScenario {name} Остановить воспроизведение
deleteScenario {name} Удалить сценарий
saveScenario {name, data} Сохранить сценарий из построителя
addSchedule {id, schedule} Добавить задачу расписания
removeSchedule {id} Удалить задачу расписания

Сервер → Клиент

Событие Данные Описание
newTrain TrainPayload Новый хаб подключён
speedUpdate {trainId, speed} Скорость изменилась (рамп / пресет)
hubStatus {id, connected?, battery?, lowBattery?, reconnecting?} Изменение статуса хаба
sensorUpdate {trainId, port, type, color?, distance?, colorName?} Данные датчика
log {ts, level, trainId, message} Новая запись в лог
logs [LogEntry] История логов (при подключении)
playHorn {trainId} Сигнал от кнопки на хабе
scenariosUpdate Scenarios Обновление списка сценариев
schedulesUpdate Schedules Обновление расписания
consistsUpdate Consists Обновление составов
scenarioPlayback {name, active} Статус воспроизведения сценария
scenarioRecording {active, name?} Статус записи сценария

Структура TrainPayload

{
  "id": "fac6140fa0bc8b0f40411d9ad36ac40e",
  "name": "Пассажирский поезд",
  "speed": 0,
  "connected": true,
  "battery": 85,
  "firmwareVersion": "3.0.0.0000",
  "hardwareVersion": "3.0.0.0000",
  "hubTypeName": "SmartHub",
  "deviceTypeName": "TrainMotorLarge",
  "motorPort": "A",
  "rampStepSize": 10,
  "rampStepMs": 100,
  "presets": [20, 50, 80],
  "sounds": { "start": "sound/...", "stop": "sound/...", "horn": "sound/...", "moving": "sound/..." },
  "photo": "photo/train.jpg",
  "sensors": {},
  "ports": { "A": {"type":"motor","name":"TrainMotorLarge"}, "B": null, "C": null, "D": null }
}

Clone this wiki locally