Bolt Hold bolthold Сбер ID
Превращаю AI-идеи в работающие инженерные системы
Рейтинг
30
№ 135 597 в каталоге
Отзывы
0
Профессионализм
-/10
Коммуникация
- /10
Город
Москва
Опыт работы
6 лет
На сайте с
2026 года
Юридический статус
ИП

Python backend и MQTT-архитектура для IoT-устройства

Используемые навыки MQTT Веб-разработка Микросервисы Разработка API Чат-бот

Описание

Проект является самостоятельным 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-устройства с облачными сервисами

Оценили проект:

Другие проекты

Все проекты →
Веб-разработка и IT AI-чат-бот поддержки и разрешения споров для маркетплейса Nixbuy
AI-чат-бот поддержки и разрешения споров для маркетплейса Nixbuy
17
Веб-разработка и IT CV/ML-система распознавания товаров для автоматизированного минибара
CV/ML-система распознавания товаров для автоматизированного минибара
23
Веб-разработка и IT AI-система автоматизированного минибара для гостиниц
AI-система автоматизированного минибара для гостиниц
26
Веб-разработка и IT PLC Web — браузерная среда проектирования и симуляции PLC-программ
PLC Web — браузерная среда проектирования и симуляции PLC-программ
18