Voltronic-MQTT на esp8266

В нашей лаборатории солнечный инвертор Deltron Ultra 11kW (он же Voltronic Axpert Ultra). Инвертор умеет подключаться к wifi и слать телеметрию в своё облако. Но нам надо автономно, по этому читаем данные с rs232 и забираем на наш mqtt сервер.

Первоначально это был скрипт на php, а инвертор подключался к серверу через переходник rs232 — usb, но надёжность работы переходника оставляла желать лучшего, по этому было решено перенести функционал на esp8266.

Что умеет устройство

  • Опрашивает инвертор командами QPIGS (сеть, выход, нагрузка, АКБ, солнечные панели, температура), QMOD (режим работы) и QPI (версия протокола).
  • Читает второй вход солнечных панелей (QPIGS2) у моделей с двумя MPPT, например Axpert Ultra. Датчики второго входа появляются, только если инвертор отвечает на эту команду.
  • Публикует все данные одним JSON в MQTT, а статус online / offline — через Last Will.
  • Поддерживает MQTT Discovery: в Home Assistant устройство и все датчики появляются сами, без YAML.
  • Имеет веб-интерфейс на английском или русском: страница статуса, настройки MQTT, интервала опроса, пинов и скорости порта.
  • Первая настройка Wi-Fi через собственную точку доступа, как у Tasmota.
  • Показывает на странице статуса, сколько байт пришло с RS232 и что именно ответил инвертор. Это сильно упрощает поиск ошибок в проводке прямо у инвертора, с телефона.

Проверено на Voltronic Axpert Ultra. Протокол у инверторов Voltronic общий, поэтому устройство должно работать и с другими моделями с портом RS232 на RJ45 (Axpert, MKS, King, VM и их клоны под другими брендами).

На скриншоте сокращённая карточка, из которой я убрал не интересные мне параметры. Всего их 24.

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

ДетальПримечание
NodeMCU v3 (ESP8266)Подойдёт любая плата на ESP8266
Модуль RS232-TTL на MAX3232 с разъёмом DB9Именно MAX3232: он работает от 3,3 В. Модули на MAX232 рассчитаны на 5 В
Кабель с RJ45Родной кабель инвертора RJ45–DB9 или самодельный
Питание 5 ВЛюбая USB-зарядка

Схема подключения

Инвертор RJ45  ──RS232──  MAX3232 (DB9)  ──TTL 3,3 В──  NodeMCU

Модуль MAX3232 и NodeMCU

NodeMCUМодуль MAX3232
D1 (GPIO5), приёмTXD
D2 (GPIO4), передачаRXD
3V3VCC
GNDGND

Важно: питайте модуль только от 3,3 В. При 5 В на выводе TXD модуля тоже будет 5 В, а входы ESP8266 на это не рассчитаны. Пины можно переназначить в веб-интерфейсе, так что если TXD и RXD на вашем модуле подписаны иначе, перепаивать ничего не нужно.

Инвертор и модуль: «папа» или «мама»

На разъёме RJ45 инвертора Voltronic: вывод 1 — передача данных (TX), вывод 2 — приём (RX), вывод 8 — земля. Выход одной стороны всегда идёт на вход другой, а какой вывод DB9 у модуля выход, зависит от разъёма на модуле. Модули продаются с обоими вариантами разъёма.

RJ45 инвертораDB9 «папа» (штырьки)DB9 «мама» (гнёзда)
1 (TX инвертора)23
2 (RX инвертора)32
8 (GND)55

Модуль с разъёмом «папа» устроен как COM-порт компьютера, поэтому родной кабель инвертора вставляется в него напрямую. Модуль с разъёмом «мама» рассчитан на подключение к компьютеру, и у него выводы 2 и 3 нужно перекрестить. С родным кабелем для этого подойдёт нуль-модемный переходник «папа–папа». Обычный прямой переходник не поможет.

На этом мы и попались сами: модуль с разъёмом «мама» прекрасно работал с компьютером, а от инвертора не пришло ни одного байта. Причина простая: и модуль, и инвертор рассчитаны на подключение к компьютеру, поэтому соединять их напрямую нельзя. Достаточно поменять местами провода на выводах 2 и 3. Если сомневаетесь, проверьте вольтметром: выход RS232 в покое держит около −5…−6 В относительно земли, а вход — около нуля.

Прошивка и настройка

Прошивка собирается в PlatformIO:

git clone https://github.com/ibuben/esp8266-voltronic-mqtt.git
cd esp8266-voltronic-mqtt
pio run -t upload
  1. После прошивки плата поднимает точку доступа voltronic-XXXX. Подключитесь к ней с телефона, портал настройки откроется сам или по адресу 192.168.4.1.
  2. Выберите сеть Wi-Fi и укажите адрес MQTT-брокера, логин и пароль.
  3. Плата подключится к сети, а в Home Assistant появится устройство со всеми датчиками.

Остальное настраивается в веб-интерфейсе платы: топики, интервал опроса (по умолчанию 5 секунд), пины и скорость порта. Интерфейс по умолчанию на английском, русский включается в настройках. Чтобы снова открыть портал Wi-Fi, удерживайте кнопку FLASH на плате 3 секунды.

Что приходит в MQTT

На каждом цикле опроса плата отправляет один JSON. Фрагмент:

{
  "grid_voltage_v": 230.1,
  "output_frequency_hz": 49.9,
  "output_active_power_w": 410,
  "battery_voltage_v": 52.4,
  "battery_capacity_pct": 85,
  "pv_power_w": 0,
  "pv2_power_w": 0,
  "pv_total_power_w": 0,
  "mode": "Battery"
}

Полный список полей, светодиодная индикация и таблица типичных неисправностей — в инструкции на GitHub.