Игорь Градов
Игорь Градов
7 мин
ai

MQTT и LLM через Model Context Protocol: датчики отвечают на вопросы текстом

Протокол MQTT (легковесный стандарт передачи сообщений между устройствами интернета вещей) давно стал рабочей лошадкой промышленных датчиков, но до недавнего времени между показаниями сенсоров и готовым ответом «почему влажность скакнула в три ночи» лежали часы ручной работы с SQL, Python и Excel.

MQTT и LLM через Model Context Protocol: датчики отвечают на вопросы текстом
Почему это важно

Model Context Protocol (MCP), открытый стандарт от Anthropic, впервые даёт языковой модели прямой и безопасный доступ к базе данных с показаниями датчиков, и инженер задаёт вопросы обычным текстом вместо написания скриптов.

Ниже собран пошаговый гайд: от установки хранилища до момента, когда вы спрашиваете нейросеть «покажи корреляцию температуры и влажности за три дня» и получаете график. Весь стек открытый, воспроизводится на одном сервере с Ubuntu.

Какую задачу решает эта связка?

На промышленном объекте датчики генерируют гигабайты телеметрии. Чтобы найти аномалию, инженер пишет SQL-запросы, выгружает CSV, строит графики в Excel, ищет закономерности глазами. На один вопрос уходит полдня.

Большие языковые модели (LLM, large language model) умеют анализировать данные, но передавать в них терабайты сырых логов дорого и бессмысленно. Model Context Protocol решает эту проблему: LLM вызывает внешний инструмент (в нашем случае запрос к базе данных временных рядов), получает компактный ответ и выдаёт человеку сводку или график.

Цепочка данных выглядит так: датчик отправляет показания через MQTT-брокер Mosquitto, агент Telegraf записывает их в TimescaleDB, а MCP-сервер открывает эту базу для языковой модели.

Что понадобится?

  • Сервер на Ubuntu (подойдёт и локальная машина, и облачная виртуалка)
  • Docker и Docker Compose для изоляции сервисов
  • Mosquitto как MQTT-брокер (лёгкий брокер сообщений для устройств интернета вещей)
  • Telegraf как агент сбора метрик
  • PostgreSQL с расширением TimescaleDB как хранилище временных рядов
  • MCP-сервер для связи базы данных с языковой моделью
  • LLM-клиент с поддержкой MCP: Claude, OpenCode или другой совместимый клиент
  • Примерно 2 часа на первую настройку, если Docker уже знаком

Пошаговая инструкция

1. Поднимаем хранилище: PostgreSQL плюс TimescaleDB

Обычный PostgreSQL под постоянным потоком данных от датчиков работает медленно. TimescaleDB добавляет к нему гипертаблицы (hypertables), которые автоматически разбивают данные на партиции по времени. Для датчиков это критично: запросы «покажи последние три дня» выполняются на порядки быстрее.

Создайте файл docker-compose.yml:

version: '3.8'
services:
  timescaledb:
    image: timescale/timescaledb:latest-pg16
    container_name: timescaledb
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${DB_USER:-postgres}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-changeme}
      POSTGRES_DB: ${DB_NAME:-sensor_data}
      TZ: UTC
    ports:
      - "${DB_PORT:-5433}:5432"
    volumes:
      - timescale_data:/var/lib/postgresql/data
      - ./backups:/backups
      - ./init:/docker-entrypoint-initdb.d
    networks:
      - iot_network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres} -d ${DB_NAME:-sensor_data}"]
      interval: 30s
      timeout: 10s
      retries: 5
    deploy:
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 512M

  pgadmin:
    image: dpage/pgadmin4:latest
    container_name: pgadmin
    restart: unless-stopped
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@example.com
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD:-changeme}
      PGADMIN_CONFIG_SERVER_MODE: 'False'
    ports:
      - "5050:80"
    volumes:
      - pgadmin_data:/var/lib/pgadmin
    networks:
      - iot_network
    depends_on:
      - timescaledb

volumes:
  timescale_data:
    name: timescale_production_data
  pgadmin_data:
    name: pgadmin_storage

networks:
  iot_network:
    name: iot_sensor_network
    driver: bridge

Порт 5433 вынесен специально: если на машине уже стоит PostgreSQL на стандартном 5432, конфликта не будет.

2. Готовим SQL-скрипт инициализации

Положите файл ./init/01-timescale.sql:

\c sensor_data;

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

CREATE SCHEMA IF NOT EXISTS sensors;
GRANT ALL PRIVILEGES ON SCHEMA sensors TO postgres;

CREATE TABLE IF NOT EXISTS sensors.mqtt_consumer (
    time TIMESTAMPTZ NOT NULL,
    host TEXT,
    topic TEXT NOT NULL,
    value DOUBLE PRECISION NOT NULL
);

SELECT create_hypertable('sensors.mqtt_consumer', 'time',
       if_not_exists => TRUE);

Гипертаблица (hypertable) здесь создаётся по полю time. TimescaleDB автоматически нарежет данные на временные куски, и запрос «покажи максимум за три дня» не будет сканировать всю таблицу.

3. Задаём переменные окружения

Создайте файл .env рядом с docker-compose.yml:

DB_USER=postgres
DB_PASSWORD=super_password_123
DB_NAME=sensor_data
DB_PORT=5433
PGADMIN_PASSWORD=super_password_pgadmin

Пароли в примере учебные. В продакшене замените на надёжные.

4. Запускаем и проверяем

docker-compose up -d

Убедитесь, что контейнеры работают:

docker compose ps
docker exec -it timescaledb psql -U postgres -d sensor_data \
  -c "SELECT extversion FROM pg_extension WHERE extname = 'timescaledb';"

Если в ответ вернулась версия TimescaleDB, хранилище готово.

5. Настраиваем MQTT-брокер Mosquitto

Датчики отправляют данные по протоколу MQTT (Message Queuing Telemetry Transport, легковесный протокол обмена сообщениями, придуманный специально для устройств с ограниченными ресурсами). Mosquitto принимает эти сообщения и передаёт их дальше по цепочке.

Конфигурацию Mosquitto с авторизацией и привязку Telegraf к базе в источнике обещают раскрыть в продолжении гайда. На этом этапе важно понять место каждого компонента: Mosquitto принимает данные, Telegraf пишет их в TimescaleDB, MCP-сервер открывает базу для языковой модели.

6. Подключаем MCP-сервер к LLM

Когда цепочка «датчик, Mosquitto, Telegraf, TimescaleDB» заработала, остаётся поднять MCP-сервер. Он выполняет одну функцию: принимает запрос от языковой модели, превращает его в SQL, отправляет в TimescaleDB и возвращает результат обратно. Модель сама решает, какой запрос составить, на основе описания инструментов, которые ей доступны через Model Context Protocol.

На стороне LLM-клиента (Claude Desktop, OpenCode или другой с поддержкой MCP) достаточно указать адрес MCP-сервера. После этого инженер общается с данными обычным текстом.

Как это применить

Допустим, на объекте два датчика: температуры и влажности. Данные пишутся в TimescaleDB. Инженер открывает чат с LLM и пишет:

Запрос: «Посмотри показания датчиков с температурой и влажностью и покажи максимальные и минимальные значения за 3 дня»

Нейросеть сама формирует SQL-запрос к базе через MCP-сервер и возвращает аккуратную сводку с числами.

Запрос: «Нарисуй гистограмму изменений температуры»

Модель строит график прямо в интерфейсе чата.

Запрос: «Проанализируй корреляцию при изменении значений температуры и влажности по времени»

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

Что делать с этим прямо сейчас, по ролям?

Инженеру на производстве. Соберите стек на тестовом сервере с парой датчиков. Не нужно сразу подключать весь завод. Убедитесь, что цепочка работает, и покажите результат руководству. Экономия полудня инженера на каждый аналитический вопрос считается быстро.

Автору Дзена, пишущему про IoT или автоматизацию. Это редкий локализованный гайд. Подобные материалы на русском почти отсутствуют, а спрос на интеграцию промышленных данных с нейросетями растёт. Тема даёт экспертный трафик.

Предпринимателю в РФ. Весь стек опенсорсный: Mosquitto, Telegraf, TimescaleDB, MCP-сервер. Санкционных рисков нет. В качестве LLM можно использовать модели с открытыми весами (open weights, модели, чьи параметры опубликованы и доступны для локальной установки), если нет возможности работать с Claude. Из российских LLM поддержку MCP пока не заявил никто, но протокол открытый, и подключение на стороне сервера, а не модели.

Частые ошибки

Пароли по умолчанию в продакшене. В примере стоят учебные пароли. На реальном объекте это дыра в безопасности. Меняйте сразу.

Конфликт портов. Если на сервере уже стоит PostgreSQL, стандартный порт 5432 занят. Именно поэтому в конфигурации вынесен порт 5433. Проверяйте до запуска.

Попытка загрузить в LLM сырые логи без MCP. Это дорого по токенам (токен, минимальная единица текста, которую обрабатывает модель) и бесполезно: модель теряет контекст на больших объёмах. MCP-сервер отдаёт модели только результат запроса, а не весь массив.

Ожидание, что LLM заменит SCADA. Нейросеть анализирует и строит графики, но не управляет оборудованием. Это инструмент аналитики, не система управления.

Мнение редакции dzen.guru

Я вижу в связке MQTT плюс Model Context Protocol нечто большее, чем удобную обёртку для SQL. Это первый случай, когда протокол общения LLM с внешним миром по-настоящему стандартизирован и поддержан крупными компаниями: Anthropic разработала MCP, Google и Microsoft его поддерживают. Для промышленной аналитики в России это окно возможностей: стек полностью открытый, данные не покидают ваш сервер, а LLM можно заменить на локальную модель с открытыми весами.

Честная оговорка: гайд покрывает прототип. До продакшена на реальном заводе нужны авторизация Mosquitto, шифрование трафика, ограничение прав MCP-сервера (только чтение, не запись) и мониторинг. Но для того, чтобы за два часа показать руководству работающий демо-стенд, где нейросеть отвечает на вопросы о датчиках, этого хватит.

Попробуйте промпт-конструктор dzen.guru

Составляйте точные промпты для аналитических запросов к MCP-серверу и другим инструментам. Конструктор помогает формулировать задачу так, чтобы модель давала результат с первого раза.

Попробовать конструктор

Протокол MCP превращает языковую модель из собеседника в рабочий инструмент, который сам ходит за данными. Соберите прототип на двух датчиках, покажите первый график из чата, и вопрос «зачем нам это на производстве» отпадёт сам.

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

Платформа тестирования ИИ: как собрать конвейер экзаменов из документов за минуты
ai

Платформа тестирования ИИ: как собрать конвейер экзаменов из документов за минуты

Платформа тестирования с искусственным интеллектом генерирует экзаменационные вопросы из нормативных документов за минуты вместо дней ручной работы методиста,…

6 мин
Omen AI привлекла $31 млн: спектрометр следит за охлаждением дата центров в реальном времени
ai

Omen AI привлекла $31 млн: спектрометр следит за охлаждением дата центров в реальном времени

Omen AI — компания, чей миниатюрный спектрометр отслеживает состояние охлаждающей жидкости в серверных стойках, — 4 июня 2025 года объявила о привлечении 31…

6 мин
Stack Overflow купили за $1,8 млрд, а потом трафик упал почти до нуля
ai

Stack Overflow купили за $1,8 млрд, а потом трафик упал почти до нуля

Stack Overflow когда-то был главным местом, где разработчик мог получить работающий ответ на конкретный вопрос по коду, и этот ресурс терял аудиторию ещё до…

6 мин