Все проекты
Эталонная архитектураПодход, по которому мы строим системы, описанный целиком. Не выполненный клиентский проект.

Парк вендинговых автоматов: телеметрия и удалённая поддержка

Автомат в 400 км перестаёт продавать. Вот программная цепочка, которая объясняет почему — без выезда техника.

Направление
Мобильные приложения и подключённые устройства
Написано
2026
Стек
  • Встраиваемый Android
  • Kotlin
  • MQTT
  • Node.js
  • PostgreSQL
  • React
The open front of a coffee vending machine during a service visit: control boards and a coin unit on the door, tubing running down from the mixing heads, and a bucket on the floor catching what is flushed through.
Содержание проекта

Проблема

У оператора вендинга или киосков — три отдельных слепых зоны. Автомат знает, что произошло, но хранит это только у себя. Платёжный провайдер знает, что с карты списали деньги, но не знает, вышел ли товар из лотка. У службы поддержки нет ни того, ни другого, поэтому каждая неоднозначная жалоба обходится в выезд на место.

Программная проблема не в самой выдаче товара — она в сверке списано с выдано, причём достаточно быстрой, чтобы клиент на линии получил ответ.

Как мы это делаем

1. Приложение на автомате

Узкоспециализированное приложение на автомате: выбор товара, оплата, выдача и локальная очередь. Оно исходит из того, что сети нет, потому что рано или поздно так и будет. Каждое событие — брошена монета, авторизована карта, повернулся мотор, сработал оптический датчик — сначала записывается в локальный журнал только на дозапись, а уже потом публикуется.

2. Транспорт

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

3. Сервис

Небольшой сервис приёма данных превращает события с устройств в две вещи: строку реестра (списано / выдано / возвращено, сверяется по идентификатору транзакции) и запись о состоянии (температура, состояние дверцы, уровень остатка, версия прошивки, время последнего выхода на связь).

4. Экран, которым реально пользуется поддержка

Одна страница на автомат: текущее состояние, последние пятьдесят событий простым языком, остатки по ячейкам и две кнопки, которые действительно важны, — повторная выдача и возврат, — обе фиксируются за оператором, который на них нажал.

Что вы получите

  • Приложение для автомата и канал его обновления
  • Сервис приёма данных и схему событий, которые принадлежат вам
  • Дашборд парка автоматов и экран одного автомата, созданный для разговора по телефону
  • Отчёт о сверке, который примет финансовый отдел

Где начинаются сложности

Рассинхронизация часов между автоматом и сервером делает порядок событий лживым — поэтому устройство ставит монотонный порядковый номер, а не просто отметку времени. Раскатка прошивки требует поэтапного канала и отката, потому что неудачное обновление на весь парк — очень дорогой урок. А оптические датчики отказывают открыто: без второго сигнала «выдано» — это только предположение.

Типовая архитектура

Автомат передаёт данные в приём, а затем — в реестр и на экран поддержкиавтоматсначала в логзатем публикацияMQTTприёмсписано / выданореестрсостояниеудалённая команда, в журнале
Шаблон, на основе которого мы строим, а не собственный дизайн этого проекта. Данные и системы клиента здесь не показаны.

Далее

Агент приёма заказов для бэк-офиса оптовой компании

Читать

Ваш следующий шаг

Есть похожая задача?

Расскажите, как устроена ваша система. Мы скажем, что из этого подходит, а что нет.