Инверторы MUST, Voltronic, PowMr, EASUN и их аналоги поддерживают обмен данными по RS485 Modbus, однако штатные Wi-Fi модули часто работают нестабильно, требуют облако или дают слишком мало информации.
В этой статье покажу, как собрать локальный мониторинг инвертора MUST на ESP32 с веб-интерфейсом по Wi-Fi — без сторонних облаков и подписок. Актуальная прошивка монитора — серия 3.4.x (в интерфейсе отображается строка code V 3.4.3).
Что можно видеть в реальном времени
- мощность солнечных панелей (PV)
- нагрузку на выходе инвертора
- обмен с городской сетью (импорт / экспорт)
- напряжения сети, нагрузки, АКБ, шины BUS
- режим работы (OFF GRID, Grid charging, Bypass и др.)
- температуры радиаторов AC и DC
- накопленную PV-энергию и счётчики ACCUM (buy, load, discharge…)
- состояние реле, частоту сети и инвертора
- оценку потерь инвертора (INV LOSS)
- энергетический баланс системы
Начиная с прошивки 3.4.x, веб-интерфейс повторяет структуру родной утилиты SolarPowerMonitor: помимо компактных плиток сверху, под ними выводятся четыре колонки с теми же группами параметров, что и в программе производителя.
В конце статьи — готовый скетч и планы развития проекта.
Что получится в итоге
После сборки вы получите локальный Wi-Fi мониторинг для инвертора MUST с доступом через браузер:
- работа без облака
- опрос по RS485 Modbus RTU
- ESP32-C3 + модуль MAX485
- интерфейс в стиле SolarPowerMonitor (плитки + 4 колонки)
- чтение блоков инвертора (252xx), MPPT (152xx) и настроек (201xx)
- локальный адрес
http://inverter.local - встроенная диагностика Modbus через браузер
- готовый рабочий скетч
- STL-модель корпуса для 3D-печати (в разработке)
Компоненты
Для сборки понадобятся:
- ESP32-C3 Super Mini
- модуль RS485 TTL MAX485
- кабель USB Type-C для питания контроллера
- кабель с разъёмом RJ45 (или иной, по документации инвертора) для RS485
- провода Dupont
- инвертор MUST POWER с интерфейсом RS485
Скетч — основа, которую можно расширить
- OLED-дисплей
- внешний watchdog
- Ethernet-модуль
- microSD для логов
- интеграция с Home Assistant
- параллельное чтение BMS по Bluetooth (планируется, см. раздел «Планы»)
Корпус для устройства
Устройство разрабатывается в компактном корпусе для DIN-рейки, чтобы его можно было установить рядом с инвертором или в электрощите.
Планируется:
- вентиляция корпуса
- удобный доступ к RS485
- USB для прошивки
- индикация Wi-Fi и обмена данными
- монтаж без поддержек при 3D-печати
Корпус печатается на обычном FDM 3D-принтере. STL-модель будет опубликована после успешных испытаний.
Схема подключения
ESP32 подключается к инвертору через модуль RS485:
A → A
B → B
GND → GND
Протокол: Modbus RTU.
Параметры порта (для MUST PV1800 / аналогов):
19200 baud
8N1
Slave ID: 0x04 (4)
Код и логика работы
ESP32 создаёт локальный WEB-интерфейс с обновлением данных примерно каждые 3 секунды (/api в формате JSON).
Основная логика:
- чтение блока инвертора 25201…25280
- отдельное чтение 25273…25275 (мощность и ток АКБ)
- чтение блока MPPT 15201…15220
- чтение настроек 20101…20150
- однократное чтение идентификации 20000…20008 (модель, версии)
- расчёт энергобаланса и оценки потерь инвертора
- отображение через WEB-интерфейс
Библиотеки (Arduino IDE):
- WiFi.h
- ESPAsyncWebServer.h
- ModbusMaster.h
- ESPmDNS.h
WEB-интерфейс
Открывается локально:
http://inverter.local
или по IP-адресу ESP32 в вашей Wi-Fi сети.
Верхние плитки (быстрый обзор)
| Плитка | Формат | Описание |
|---|---|---|
| AC RAD TEMP | °C | Температура AC-радиатора (рег. 25233) |
| SOLAR | V | W | Напряжение PV и мощность (15208) |
| DC RAD TEMP | °C | Температура DC-радиатора (25235) |
| GRID | V | W | Напряжение сети (25207) и мощность порта сети (25214, «−» = импорт) |
| SYSTEM BALANCE | W | режим | % | Расчётный баланс, краткий режим (25201) и загрузка (25216) |
| LOAD | V | W | Напряжение и мощность нагрузки (25215) |
| INV LOSS | W | Оценка потерь инвертора (не путать с реактивной составляющей VA−W) |
| BAT | CHARGE / DISCHARGE / IDLE | V | W | Режим и мощность АКБ; при расчётной модели — суффикс «~» |
| PV ENERGY | kWh | Накопленная солнечная энергия |
| Offgrid work enable | ON / OFF | Разрешение off-grid (20101) |
| Current mode | SBU / SUB / UTI / SOL | Режим энергосистемы (20109) |
| Charger priority | текст | Приоритет зарядки (20143) |
Четыре колонки — как в SolarPowerMonitor
Под плитками выводятся блоки, аналогичные родной утилите Must:
DEVICE INFO
Статическая информация об устройстве (читается один раз при старте):
- code — версия прошивки ESP32-монитора (например,
V 3.4.3) - тип и мощность машины (20000, 20001)
- Hardware / Software version (Inverter) — 20004, 20005
- Hardware / Software version (Charge) — 20007, 20008 (если заполнены)
- Protocol Edition — 20006
Версии декодируются в формате SolarPowerMonitor (например, 10101 → 1.01.01).
CHARGER MESSAGE (LIVE)
Данные MPPT и зарядного тракта: Work state, Mppt state, Charging state, PV voltage, Battery voltage, Current, Power, температуры, реле Battery/PV, BattVol Grade, ACCUM power.
INVERTER MESSAGE A
AC-сторона в реальном времени: напряжения (Grid, Inverter, BUS, Battery), мощности PInverter, PGrid (синим), PLoad, Load percent, SGrid (VA) и др.
INVERTER MESSAGE B
Статус и накопители: температуры, состояние релё (Inverter / Grid / Load), ACCUM charge / discharge / buy / sell / load / self_use / PV_sell / grid_charge, Batt power (зелёным), Batt current, Inverter Hz, Grid Hz.
Цветовая индикация
BAT (плитка)
- зелёный — CHARGE
- красный — DISCHARGE
- синий — IDLE
SYSTEM BALANCE
- зелёный — положительный баланс
- красный — отрицательный баланс
- синий — баланс около нуля
Колонки INVERTER MESSAGE
- PGrid — синий (мощность порта сети, рег. 25214)
- Batt power — зелёный (рег. 25273, если инвертор его отдаёт)
Какие регистры используются
Основные Modbus-регистры (проверено на MUST PV1800):
| Параметр | Регистр | Примечание |
|---|---|---|
| Work state (режим) | 25201 | 2=OFF GRID, 4=Bypass, 6=Grid CHRG… |
| Battery voltage | 25205 | ×0,1 V |
| Grid voltage | 25207 | ×0,1 V |
| Grid power (active) | 25214 | signed W, «−» = импорт из сети |
| Load power | 25215 | W |
| Load percent | 25216 | 0…100 % |
| Grid apparent power | 25218 | VA |
| Inverter power | 25213 | W |
| Battery power | 25273 | W; живой в OFF GRID, часто 0 в Grid CHRG |
| Battery current | 25274 | A (целые амперы) |
| PV power | 15208 | W |
| AC / DC radiator temp | 25233 / 25235 | °C |
| ACCUM counters | 25245…25260 | пары hi/lo, ÷10 → kWh |
| Модель, версии | 20000…20008 | статика |
Регистры в целом подходят для многих инверторов MUST, Voltronic, Axpert, PowMr и EASUN, но детали зависят от модели и прошивки инвертора.
Ограничения без связи с BMS
На тестовом инверторе MUST PV1800 BMS аккумулятора не подключена к инвертору по RS485/CAN — Li-ion в меню есть, но обмена с BMS нет. Это типичная ситуация для бюджетных связок «инвертор + отдельная BMS».
Из-за этого часть параметров приходится считать или брать с ограничениями, даже если интерфейс выглядит так же, как SolarPowerMonitor:
Мощность сети (GRID / PGrid)
Регистр 25214 показывает активную мощность на порту сети инвертора, а не всегда полный отбор из розетки. В режиме Grid charging (ws=6) при зарядке АКБ от сети часто наблюдается:
- 25214 ≈ −PLoad (только нагрузка, например −90 W)
- 25273 / 25274 = 0, хотя BMS может показывать заряд ~200 W
- полный импорт (нагрузка + заряд − PV) в Modbus не виден
Родная утилита Must ведёт себя так же: PGrid показывает 25214, а не «счётчик квартиры».
Аккумулятор (плитка BAT)
На плитке BAT мощность считается как энергетический остаток:
BAT ≈ PV + импорт_сети − LOAD
При корректном разряде в режиме OFF GRID цифры близки к реальности. В Grid CHRG остаток часто даёт IDLE | 0 W ~, потому что 25214 не включает заряд АКБ — на плитке появляется пометка «~» (расчётная модель).
В колонке Batt power выводится сырой регистр 25273 (как в утилите). В OFF GRID он коррелирует с разрядом; в CHRG при зарядке от сети — обычно 0.
Что работает хорошо без BMS
- напряжения, температуры, реле, частоты
- PLoad, PV, режим работы (25201)
- накопители ACCUM (buy, load, discharge…) в kWh
- разряд АКБ в OFF GRID по 25273 / 25274
- импорт на нагрузку в CHRG (25214 ≈ −LOAD)
Что без BMS или отдельного датчика не восстановить
- мощность заряда АКБ от сети в режиме Grid CHRG
- полный мгновенный отбор из городской сети (LOAD + заряд − PV)
- точный ток/мощность АКБ при зарядке, если 25273 молчит
Для точного контроля заряда нужен отдельный источник: BMS по Bluetooth/UART, шунт или инвертор с полноценным обменом с BMS.
Скан Modbus через браузер
В прошивке есть встроенная диагностика регистров (компьютер или телефон — в той же Wi-Fi сети, что ESP32).
/scan — произвольный блок
http://inverter.local/scan?addr=25201&count=50
Параметры: addr — стартовый регистр, count — количество (макс. 50).
/scanrange — диапазон
http://inverter.local/scanrange?from=25201&to=25279&nz=1
nz=1 — только ненулевые значения.
/scanbat — поиск регистров АКБ при Grid CHRG
http://inverter.local/scanbat?nz=1
Удобно запускать, когда BMS показывает заряд, а 25273 = 0.
Пример ответа /scan:
[25201] = 6
[25202] = 230
[25214] = -104
[25215] = 104
Настройка и проверка
После прошивки ESP32:
- Укажите SSID и пароль Wi-Fi в скетче.
- Подключите RS485 (A/B/GND), проверьте Slave ID (обычно 4).
- Откройте
http://inverter.local. - В колонке DEVICE INFO убедитесь, что отображается нужная версия
code V …. - Сравните PGrid, PLoad и Batt power с SolarPowerMonitor.
Если данных нет:
- проверьте линии A/B (частая ошибка — перепутаны)
- скорость 19200 8N1
- Slave ID 0x04
- общий GND между ESP32 и линией RS485
Возможные проблемы
Нет связи с инвертором
Проверьте питание MAX485, A/B, GND, скорость порта и Slave ID.
Отрицательные мощности на PGrid
Это нормально: регистр 25214 signed, минус означает импорт из сети.
Цифры не совпадают с BMS
Ожидаемо без связи инвертор↔BMS. См. раздел «Ограничения без связи с BMS».
Wi-Fi нестабилен
Используйте качественный USB-блок питания и короткий кабель.
Видео работы устройства
Здесь будет размещено видео работы мониторинга и WEB-интерфейса.
Скачать и использовать
Для самостоятельной сборки понадобятся:
- полный рабочий скетч (файл
code-new.txt, прошивка 3.4.x) - список библиотек
- простейший корпус для ESP32-C3 Super Mini (STL — позже)
- схема подключения и список компонентов из этой статьи
Библиотеки:
- ModbusMaster
- ESPAsyncWebServer
Итог
ESP32 даёт полноценный локальный мониторинг инвертора MUST без облаков и подписок. В прошивке 3.4.x интерфейс повторяет структуру SolarPowerMonitor: те же группы параметров в четырёх колонках плюс быстрые плитки сверху.
Проект подходит как основа для:
- домашней солнечной системы
- автономного питания
- диагностики Modbus и поиска регистров
- будущей интеграции с Home Assistant
Тестирование выполнялось на MUST PV1800 без подключения BMS к инвертору. На этой модели по одному только Modbus можно достоверно видеть разряд АКБ в OFF GRID и параметры сети/нагрузки в Grid CHRG, но мощность заряда от сети в открытых регистрах часто отсутствует — отсюда расчётная плитка BAT с пометкой «~» и расхождения с показаниями BMS при зарядке.
Планы развития
В следующих версиях планируется улучшенный скетч, в котором возможно появятся:
- параллельное чтение BMS по Bluetooth — для точных тока и мощности заряда/разряда, дополнения GRID «полным» импортом и снятия ограничений режима Grid CHRG;
- хранение статистики — накопление истории параметров (графики, суточные/месячные итоги);
- вынос HTML в LittleFS — веб-страницы на файловой системе ESP32 вместо одной большой строки в прошивке: проще править интерфейс без пересборки всего скетча.
STL-модель корпуса будет опубликована отдельно. Текущий скетч продолжит дорабатываться.
Если статья была полезна — сохраните её или поделитесь ссылкой. Вопросы можно оставлять в комментариях.