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

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. Нейросеть анализирует и строит графики, но не управляет оборудованием. Это инструмент аналитики, не система управления.
Я вижу в связке MQTT плюс Model Context Protocol нечто большее, чем удобную обёртку для SQL. Это первый случай, когда протокол общения LLM с внешним миром по-настоящему стандартизирован и поддержан крупными компаниями: Anthropic разработала MCP, Google и Microsoft его поддерживают. Для промышленной аналитики в России это окно возможностей: стек полностью открытый, данные не покидают ваш сервер, а LLM можно заменить на локальную модель с открытыми весами.
Честная оговорка: гайд покрывает прототип. До продакшена на реальном заводе нужны авторизация Mosquitto, шифрование трафика, ограничение прав MCP-сервера (только чтение, не запись) и мониторинг. Но для того, чтобы за два часа показать руководству работающий демо-стенд, где нейросеть отвечает на вопросы о датчиках, этого хватит.
Попробуйте промпт-конструктор dzen.guru
Составляйте точные промпты для аналитических запросов к MCP-серверу и другим инструментам. Конструктор помогает формулировать задачу так, чтобы модель давала результат с первого раза.
Попробовать конструкторПротокол MCP превращает языковую модель из собеседника в рабочий инструмент, который сам ходит за данными. Соберите прототип на двух датчиках, покажите первый график из чата, и вопрос «зачем нам это на производстве» отпадёт сам.

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

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

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

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