Перейти к содержимому
PET_02 / HackNU · кейс КТЖ

Цифровой двойник локомотива
Телеметрия паркаапрель 2026

Моя рольКоманда из двух человек. Я сделал бортовой симулятор, модель износа, сервер диспетчерской и дашборд, второй участник собрал бортовую панель LocoPanel
СрокиАпрель 2026, хакатон HackNU
Результат3 сервиса в Docker, 4 симулированных локомотива, веб-дашборд парка
crisis_alertЗадача

Видеть износ узлов до поломки

КТЖ предложила сделать цифровой двойник для электровоза KZ8A и тепловоза TE33A. Двойник должен непрерывно получать телеметрию, оценивать накопленный износ узлов и заранее предупреждать диспетчера о перегреве, просадке напряжения контактной сети или отказе турбонагнетателя.

4
локомотива в симуляции
2
серии: KZ8A и TE33A
60 с
интервал агрегации
Стек[SYSTEM_ARCHITECTURE]

Борт, брокер и диспетчерская

Каждый локомотив работает в своём контейнере: FastAPI-сервис симулирует датчики, считает риск по каждому узлу и публикует пакеты в MQTT. Сервер диспетчерской подписан на брокер EMQX, раз в минуту агрегирует данные в PostgreSQL и отдаёт REST и WebSocket для дашборда.

  • Python
  • FastAPI
  • MQTT (EMQX)
  • WebSocket
  • PostgreSQL
  • Docker
codeLocoAppBack/app/telemetry/risk.py
if risk_type == "linear_hi":
    warn: float = comp_cfg["warn"]
    crit: float = comp_cfg["crit"]
    if value <= warn:
        return 0.0
    if value >= crit:
        return 1.0
    return _curve((value - warn) / (crit - warn), exponent)
risk ∈ [0.0, 1.0]
Решения

Урок

Что бы сделал иначе

Я не нашёл техническую документацию локомотивов, хотя она лежала в открытом доступе, и задал пороги без опоры на неё. Команды-конкуренты глубже разобрались в устройстве локомотивов и сделали более сильный визуал. В следующий раз начну с документации предметной области и только потом сяду за код.