Комплекс автоматизации сауны «Наутилус»: управление оборудованием по ModBus, видеонаблюдение на WebRTC и админ-панель оператора. Fullstack на NestJS + React (TypeScript)
Действующая сауна с реальным оборудованием: печь, насосы, химия, вентиляция, механизмы бассейна, свет и десятки датчиков. Управление держалось на старой системе: PHP-админка, Perl-скрипты к ModBus и логика в событиях MySQL, а около 20 IP-камер шли через HLS с задержкой в несколько секунд.
Задача: перевести объект на современный стек, разделить монолит на три подсистемы и поднять живой просмотр камер с задержкой меньше секунды. Главное ограничение: всё на живом объекте, без простоя оборудования, старая и новая системы работают параллельно.
Что сделано:
- управление оборудованием: демон на NestJS - мост между MariaDB и железом по ModBus (RTU-over-TCP), очередь команд на шлюз, статус и ошибки по каждому слейву и параметру;
- видеонаблюдение на WebRTC: около 20 разнородных камер на веб-стене с задержкой меньше секунды, генератор конфига сам проверяет камеры и нормализует потоки, мёртвая камера не роняет систему;
- админ-панель оператора на NestJS и React: пульт с датчиками, календарь, заказы с тарификацией, управление механизмами и светом, интерфейс 1:1 со старым, чтобы операторам не переучиваться;
- инфраструктура: Proxmox VE и LXC, PM2, nginx, CI/CD на GitHub Actions с миграциями и проверкой /health.
Результат: единый комплекс автоматизации сауны, сделанный на работающем объекте без остановки оборудования. Камеры стали субсекундными, появилась наблюдаемость за железом, монолит превратился в сервисы с CI/CD, бэкапами и мониторингом.
Стек: Node.js, NestJS, TypeScript, React, MariaDB, ModBus, WebRTC, MediaMTX, Proxmox VE, nginx, GitHub Actions.