Платформа слежения за судами
КоммерческийДанные с судна в реальном времени поверх 3D-модели: палубы, камеры, узлы
- Роль
- Инженер: 3D-интерфейс, дашборд, GraphQL-слой и приём телеметрии
- Заказчик
- не разглашается
- Период
- 09.2021 — 09.2022, Godel Technologies Europe
- Стек
- React, Redux, TanStack Query, GraphQL, Apollo Client, TypeScript, Node.js, TimescaleDB, UDP, Docker, Jest, Playwright, GitHub Actions
Задача
Судно шлёт телеметрию непрерывно, по UDP, без подтверждений и без запросов с нашей стороны. Этот поток нужно принять, сохранить и показать оператору так, чтобы он видел состояние конкретного узла на конкретной палубе.
О проекте
Система мониторинга флота в реальном времени. Телеметрия идёт с судна по UDP: бэкенд на Node парсит поток и складывает в TimescaleDB, фронт забирает данные через GraphQL и Apollo Client. Интерфейс строится вокруг 3D-модели судна, собранной из моделей заказчика: переключение по палубам, камеры и узлы на своих местах, показания по всем доступным датчикам. Отдельно есть карта со всеми судами и дашборд с состоянием каждого.
Как устроено
Обведённые блоки я делал сам
Что я сделал
- —3D-модель судна как основной интерфейс: переключение по палубам, камеры на тех палубах, где они есть, показания по всем доступным узлам.
- —Приём телеметрии по UDP: бэкенд парсит поток и пишет в TimescaleDB, во фронт данные отдаются по GraphQL, а не по запросу на каждую датаграмму.
- —Непрерывный поток с 50+ судов одновременно, позиции всех судов на общей карте.
- —Просмотр видео с судовых камер прямо из модели и дашборд с состоянием конкретного судна.
- —Apollo Client с нормализованным кэшем: поверх постоянно идущих обновлений интерфейс не перерисовывался целиком.