← Калибровка датчиков | Содержание | Далее: Интеграция с Home Assistant →
11. Руководство по интеграции MQTT
Version: 1.2.0
Date: 2025-12-24
Полное руководство по подключению ACRouter через MQTT, включая структуру топиков и интеграцию с Home Assistant.
Содержание
- Обзор
- Возможности
- Быстрый старт
- Структура топиков
- Консольные команды
- Конфигурация
- Тестирование топиков
- Устранение неполадок
Обзор
ACRouter поддерживает протокол MQTT для:
- Мониторинг в реальном времени — метрики мощности, напряжение, токи, состояние роутера
- Удалённое управление — переключение режимов, управление диммером, аварийная остановка
- Конфигурация — удалённая настройка параметров
- Интеграция с Home Assistant — автоматическое обнаружение для бесшовной интеграции с умным домом
The MQTT client is based on ESP-IDF's esp-mqtt library with automatic reconnection, Last Will & Testament (LWT), and QoS support.
Возможности
| Возможность | Описание |
|---|---|
| Автопереподключение | Автоматическое восстановление соединения при разрыве |
| LWT (Last Will) | Publishes "offline" status when device disconnects |
| Retained-сообщения | Топики статуса и конфигурации сохраняются на брокере |
| Уровни QoS | QoS 0 для метрик, QoS 1 для команд |
| HA Discovery | Автоматическое создание сущностей в Home Assistant |
| Агрегация в JSON | Объединённые метрики в одном JSON-сообщении |
| Сохранение в NVS | Конфигурация сохраняется между перезагрузками |
Быстрый старт
1. Включение MQTT через последовательную консоль
# Set broker URL (replace with your broker IP)
mqtt-broker mqtt://192.168.1.10:1883
# Enable MQTT
mqtt-enable
# Check status
mqtt-status
2. Проверка подключения
======================================================
MQTT Status
======================================================
State: Connected
Enabled: Yes
Broker: mqtt://192.168.1.10:1883
Device ID: 039C7C
Device Name: (default)
HA Discovery: Enabled
Pub Interval: 5000 ms
------------------------------------------------------
Uptime: 125 sec
Published: 250 messages
Received: 3 messages
======================================================
3. Подписка на топики
Пример с использованием клиентских утилит Mosquitto:
# Subscribe to all ACRouter topics
mosquitto_sub -h 192.168.1.10 -t "acrouter/#" -v
Структура топиков
Все топики следуют шаблону: acrouter/{device_id}/category/name
{device_id} генерируется автоматически из последних 6 символов MAC-адреса (например, 039C7C) или может быть задан вручную.
Топики статуса (Retained)
| Топик | Описание | Пример значения |
|---|---|---|
status/online |
Доступность устройства (LWT) | online / offline |
status/mode |
Текущий режим роутера | auto, manual, boost... |
status/state |
Состояние контроллера | idle, increasing, at_max... |
status/dimmer |
Уровень диммера | 0 - 100 (%) |
status/wifi_rssi |
Уровень сигнала WiFi | -65 (дБм) |
Топики метрик (не Retained)
Публикуются каждые 5 секунд (настраивается).
| Топик | Описание | Единица |
|---|---|---|
metrics/voltage |
Напряжение AC RMS | В |
metrics/power_grid |
Мощность сети (+ потребление, - отдача) | Вт |
metrics/power_solar |
Мощность солнечной генерации | Вт |
metrics/power_load |
Потребляемая мощность нагрузки | Вт |
metrics/current_grid |
Ток сети | А |
metrics/current_solar |
Ток солнечной панели | А |
metrics/current_load |
Ток нагрузки | А |
metrics/direction |
Направление потока энергии | consuming, supplying, balanced |
Топики конфигурации (Retained)
| Топик | Описание | Диапазон |
|---|---|---|
config/control_gain |
Коэффициент усиления P-регулятора | 10 - 1000 |
config/balance_threshold |
Зона нечувствительности баланса | 0 - 1000 Вт |
config/manual_level |
Ручной уровень диммера | 0 - 100 % |
Топики команд (только запись)
Отправляйте команды, публикуя сообщения в эти топики:
| Топик | Описание | Payload |
|---|---|---|
command/mode |
Установить режим роутера | off, auto, eco, offgrid, manual, boost |
command/dimmer |
Установить диммер (ручной режим) | 0 - 100 |
command/emergency_stop |
Аварийная остановка | любое значение |
command/reboot |
Перезагрузить устройство | любое значение |
command/refresh |
Принудительно опубликовать все данные | любое значение |
Системные топики (Retained)
| Топик | Описание | Пример |
|---|---|---|
system/version |
Версия прошивки | 1.1.0 |
system/ip |
IP-адрес устройства | 192.168.1.100 |
system/mac |
MAC-адрес | AA:BB:CC:DD:EE:FF |
system/uptime |
Время работы в секундах | 3600 |
system/free_heap |
Свободная память heap | 150000 |
Агрегированные JSON-топики
Для повышения эффективности метрики также публикуются в виде агрегированного JSON:
Топик: json/metrics
{
"voltage": 230.5,
"power_grid": -150.2,
"power_solar": 1250.0,
"power_load": 1100.0,
"current_grid": 0.65,
"current_solar": 5.43,
"current_load": 4.78,
"direction": "supplying"
}
Консольные команды
Управление подключением
| Команда | Описание |
|---|---|
mqtt-status |
Показать статус подключения и статистику |
mqtt-enable |
Включить MQTT-клиент |
mqtt-disable |
Отключить MQTT-клиент |
mqtt-reconnect |
Принудительное переподключение |
mqtt-publish |
Принудительно опубликовать все данные |
Конфигурация
| Команда | Описание |
|---|---|
mqtt-config |
Показать всю конфигурацию MQTT |
mqtt-broker |
Задать URL брокера (например, mqtt://192.168.1.10:1883) |
mqtt-user |
Задать имя пользователя для аутентификации |
mqtt-pass |
Задать пароль для аутентификации |
mqtt-device-id |
Задать пользовательский ID устройства для топиков |
mqtt-device-name |
Задать имя устройства (для Home Assistant) |
mqtt-interval |
Задать интервал публикации (1000–60000 мс) |
mqtt-ha-discovery <0\|1> |
Включить/отключить обнаружение Home Assistant |
Примеры
# Configure broker with authentication
mqtt-broker mqtt://192.168.1.10:1883
mqtt-user myuser
mqtt-pass mypassword
mqtt-enable
# Set custom device name for Home Assistant
mqtt-device-name "Solar Router Kitchen"
# Reduce publish frequency to 10 seconds
mqtt-interval 10000
# Disable Home Assistant auto-discovery
mqtt-ha-discovery 0
Конфигурация
Ключи хранилища NVS
Все настройки MQTT сохраняются в NVS (энергонезависимое хранилище):
| Ключ | Описание |
|---|---|
mqtt_enabled |
Флаг включения MQTT |
mqtt_broker |
URL брокера |
mqtt_user |
Имя пользователя |
mqtt_pass |
Пароль |
mqtt_dev_id |
ID устройства |
mqtt_dev_name |
Имя устройства |
mqtt_interval |
Интервал публикации |
mqtt_ha_disc |
Флаг HA Discovery |
Значения по умолчанию
| Параметр | Значение |
|---|---|
| Включено | Нет |
| Брокер | (пусто) |
| ID устройства | Автоматически из MAC-адреса |
| Интервал публикации | 5000 мс |
| HA Discovery | Включено |
Тестирование топиков
Для тестирования топиков можно использовать любой MQTT-клиент. В примерах ниже используются утилиты Mosquitto (mosquitto_sub / mosquitto_pub).
Подписка на все топики
mosquitto_sub -h 192.168.1.10 -t "acrouter/#" -v
Подписка на конкретные топики
# Status only
mosquitto_sub -h 192.168.1.10 -t "acrouter/039C7C/status/#" -v
# Metrics only
mosquitto_sub -h 192.168.1.10 -t "acrouter/039C7C/metrics/#" -v
# JSON aggregated
mosquitto_sub -h 192.168.1.10 -t "acrouter/039C7C/json/#" -v
Отправка команд
# Change mode to AUTO
mosquitto_pub -h 192.168.1.10 -t "acrouter/039C7C/command/mode" -m "auto"
# Set dimmer to 50% (in MANUAL mode)
mosquitto_pub -h 192.168.1.10 -t "acrouter/039C7C/command/dimmer" -m "50"
# Emergency stop
mosquitto_pub -h 192.168.1.10 -t "acrouter/039C7C/command/emergency_stop" -m "1"
# Reboot device
mosquitto_pub -h 192.168.1.10 -t "acrouter/039C7C/command/reboot" -m "1"
# Force refresh all data
mosquitto_pub -h 192.168.1.10 -t "acrouter/039C7C/command/refresh" -m "1"
Обновление конфигурации через MQTT
# Set control gain
mosquitto_pub -h 192.168.1.10 -t "acrouter/039C7C/config/control_gain/set" -m "200"
# Set balance threshold
mosquitto_pub -h 192.168.1.10 -t "acrouter/039C7C/config/balance_threshold/set" -m "25"
Устранение неполадок
Проблемы с подключением
Симптом: esp-tls: select() timeout
Решения:
- Проверьте, что брокер запущен и доступен
- Убедитесь, что файрвол разрешает порт 1883
- Проверьте формат URL брокера:
mqtt://IP:PORT - Протестируйте подключение к брокеру с другого клиента
"Client has started" Error
Симптом: Повторяющиеся ошибки mqtt_client: Client has started
Решение: Это был баг в ранних версиях. Обновите прошивку до последней версии, где esp_mqtt_client_start() вызывается только один раз.
WiFi не подключён
Symptom: MQTT doesn't connect on boot
Пояснение: Теперь MQTT ожидает подключения WiFi перед попыткой соединения. Сначала проверьте состояние WiFi:
wifi-status
Сообщения не принимаются
Симптом: Команды отправлены, но не обрабатываются
Решения:
- Проверьте правильность написания топика (учитывается регистр)
- Убедитесь, что ID устройства совпадает:
mqtt-status - Проверьте, что сообщение получено: в логе устройства отображается
MQTT: Command: mode = auto
Home Assistant не обнаруживает устройство
Symptom: Device doesn't appear in Home Assistant
Решения:
- Убедитесь, что HA Discovery включено:
mqtt-ha-discovery 1 - Проверьте, что интеграция MQTT в HA настроена
- Выполните повторную публикацию:
mqtt-publishили перезагрузите устройство - Проверьте логи HA на наличие сообщений обнаружения
Смотрите также
- 12_HOME_ASSISTANT.md — подробности интеграции с Home Assistant
- 07_COMMANDS_EN.md — полный справочник команд
- 05_API_REFERENCE_EN.md — документация REST API
Последнее обновление: 2025-12-24
← Калибровка датчиков | Содержание | Далее: Интеграция с Home Assistant →