Інвертори 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-модель корпусу буде опублікована окремо. Поточний скетч продовжить доопрацьовуватися.
Якщо стаття була корисною — збережіть її або поділіться посиланням. Питання можна залишати в коментарях.