← к кейсам

IoT-платформа для мониторинга производства

2023
Laravel MQTT InfluxDB Vue Docker

Задача

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

Архитектура

Датчики публикуют данные в MQTT-брокер (Mosquitto). Написал Laravel-воркер, который подписывается на топики, валидирует входящие пакеты и пишет в InfluxDB — временно-рядовую базу данных, оптимальную для телеметрии.

Для хранения метаданных объектов (оборудование, цеха, пороговые значения) использовал PostgreSQL. Laravel API отдаёт агрегированные данные для дашборда.

Фронтенд на Vue с графиками через Chart.js — интерактивные временные ряды с возможностью выбора периода.

Алертинг

Отдельный воркер проверяет последние значения каждые 30 секунд. При выходе за пороги — уведомление в Telegram конкретному ответственному по объекту. Порог настраивается через интерфейс без деплоя.

Что было сложно

MQTT-брокер иногда дублировал сообщения при переподключении. Решил через идемпотентный ключ на основе device_id + timestamp — дубликаты при вставке в InfluxDB просто игнорируются.

Второй момент — InfluxDB требует продуманной схемы тегов заранее. Перепроектировал модель хранения данных один раз в середине проекта после нагрузочного теста.

Результат

Платформа собирает данные с 240 датчиков каждые 5 секунд. Среднее время от события на датчике до уведомления в Telegram — 35 секунд. История хранится три года при объёме ~15 ГБ в год.