Проект является самостоятельным backend- и IoT-модулем комплексной системы автоматизированного минибара для гостиниц.
Автоматизированный минибар состоял из нескольких связанных компонентов: контроллера с датчиками, edge-компьютера, камер, Computer Vision модуля, облачного сервера, базы данных и интерфейсов удалённого управления.
Задача backend-модуля заключалась в том, чтобы объединить эти компоненты в устойчивую событийную систему. Backend должен был принимать события от оборудования и ML-модуля, хранить актуальное состояние устройства, формировать транзакции по изменениям состава товаров, синхронизировать данные с облаком и предоставлять инструменты для удалённой диагностики.
Система должна была учитывать реальные условия эксплуатации:
— нестабильное интернет-соединение в гостинице;
— временную недоступность облачного сервера;
— повторную доставку MQTT-сообщений;
— возможное нарушение порядка событий;
— перезапуск edge-устройства;
— неполные данные от оборудования или Computer Vision;
— необходимость удалённого контроля большого количества устройств;
— ограниченные вычислительные ресурсы локального оборудования.
В проекте я выполнял роль Tech Lead / AI Systems Engineer и отвечал за системную архитектуру, Python-сервисы, событийную модель, MQTT-взаимодействие, хранение состояния, формирование транзакций и интеграцию оборудования с облачной инфраструктурой.
Я спроектировал edge/cloud-архитектуру, в которой минибар продолжает работу даже без постоянного подключения к облаку.
Общая схема:
`Датчики и контроллер → аппаратный сервис → Computer Vision → менеджер состояния → MQTT → облачный backend → база данных и интерфейсы управления`
Система построена вокруг событий. Компоненты публикуют сообщения об открытии и закрытии минибара, изменениях датчиков, получении изображений, завершении CV-анализа, взятых или возвращённых товарах, создании транзакций, ошибках оборудования и восстановлении связи.
Backend разделён на независимые сервисы:
— аппаратный сервис нормализует данные контроллера;
— сервис состояния хранит подключение, состояние двери, состав товаров, датчики, активную сессию, ошибки и статус синхронизации;
— CV-сервис запускает обработку изображений и возвращает структурированный результат;
— сервис транзакций сравнивает состояния до и после взаимодействия и определяет взятые, возвращённые или перемещённые товары;
— сервис синхронизации передаёт события в облако и повторяет отправку после восстановления соединения;
— сервис уведомлений отправляет сообщения и отчёты через Telegram-бота.
Для обмена между edge-устройством и облаком использовался MQTT. Топики формировались по идентификатору устройства и типу данных: `status`, `telemetry`, `events`, `transactions`, `errors`, `commands` и `responses`.
Сообщения содержали уникальный идентификатор события, идентификатор устройства, тип события, время, версию формата, источник, статус и полезную нагрузку. Типизированные контракты позволяли валидировать данные и контролировать совместимость сервисов.
Обработчики проектировались идемпотентными. Перед изменением состояния или созданием транзакции backend проверял уникальный идентификатор события. Это предотвращало повторное списание товара, дублирование транзакций и повторное выполнение команд.
Критическая логика выполнялась локально. При потере интернета устройство продолжало получать данные от контроллера, запускать CV-анализ, сохранять состояние и накапливать события. После восстановления связи данные синхронизировались с облаком без повторной обработки уже принятых сообщений.
В базе данных хранились устройства, конфигурации, товары, текущее состояние, история событий, результаты Computer Vision, сессии, транзакции, ошибки и статусы синхронизации. Текущее состояние было отделено от журнала событий, поэтому система могла быстро отвечать на запросы и при необходимости восстанавливать последовательность действий.
Транзакция формировалась по состоянию минибара до и после открытия, результатам CV, показаниям датчиков, временным меткам и уровню уверенности. При противоречивых данных операция помечалась для ручной проверки.
Telegram-бот использовался для удалённого мониторинга и безопасного управления. Через него можно было получать уведомления о потере связи, аппаратных ошибках, сбоях CV, статусе устройства и синхронизации, а также запрашивать текущее состояние, повторную синхронизацию или перевод в режим обслуживания.
Сервисы запускались раздельно в Docker. Это упрощало развёртывание, обновление компонентов, изоляцию зависимостей и автоматический перезапуск процессов. Конфигурация и секреты передавались через переменные окружения.
В системе были предусмотрены ошибки контроллера, камеры, ML-модели, MQTT, базы данных, конфликты состояния и устаревшие сообщения. Сбой одного компонента не останавливал всё устройство: сервис сохранял диагностику, продолжал безопасную обработку и отправлял уведомление при критической проблеме.
В результате был создан рабочий backend-прототип, объединяющий оборудование, Computer Vision, edge-сервисы, MQTT, облако, базу данных и Telegram-бота. Система сохраняла работоспособность при нестабильной связи, автоматически формировала транзакции и поддерживала удалённую диагностику.
Был создан рабочий backend-прототип для автоматизированного минибара, объединяющий локальное оборудование, Computer Vision, MQTT, облачные сервисы и базу данных.
Система обеспечивала:
— событийный обмен между компонентами;
— хранение актуального состояния устройства;
— обработку результатов распознавания товаров;
— формирование транзакций;
— синхронизацию локальных данных с облаком;
— защиту от повторной обработки событий;
— продолжение локальной работы при потере интернета;
— удалённую диагностику через Telegram-бота;
— контейнеризированное развёртывание сервисов.
Архитектура позволяла подключать новые устройства, изменять конфигурацию минибара, обновлять ML-модели и развивать облачную часть независимо друг от друга.
Модуль был интегрирован с оборудованием, прошивкой контроллера, CV-пайплайном и облачной инфраструктурой в составе работающего end-to-end прототипа.
отвечал за системную архитектуру, Python backend, MQTT-взаимодействие, модель состояния, формирование транзакций и интеграцию edge-устройства с облачными сервисами