0
0

Дистанционный мониторинг и визуализация данных солнечных контроллеров EPSolar A, LS-B Series

Дистанционный мониторинг и визуализация данных солнечных контроллеров EPSolar A, LS-B Series


Что получим в итоге

Данная статья в первую очередь будет полезна обладателям популярных солнечных контроллеров EPSolar (Epever) с наличием порта RS485, какие это модели - смотрите фото выше.

Выполнив все действия, описанные в этой статье и потратив примерно 150-350 руб. (дешевле всего покупать на Aliexpress по приведенным в статье ссылкам) вы получите достаточно функциональную систему мониторинга своей солнечной электростанции

Из любого браузера вам будут доступны текущие параметры работы, исторические графики, выгрузка в Exel и оповещения на почту при срабатывании настраиваемых триггеров.

Ниже немного фото дефолтной сцены (далее можно настроить под себя)











1. С какими моделями контроллеров EPSolar тестировался мониторинг

Схема успешно используется на нескольких объектах с контроллерами Tracer MPPT 3210A-3240A, в том числе на учебной солнечной станции Новосибирской ГЭС, посмотреть данные в реальном времени: http://open-monitoring.online/public/scene/279

Так же есть действующие системы на базе контроллеров Epsolar LS 2024B-3024B, например мониторинг моего солнечного коллектора, ссылка на сцену: http://open-monitoring.online/public/scene/240

С другими моделями система не тестировалась, но в теории работать должна со всеми, поддерживающими выносную панель MT-50 (не путать с MT-5 - там другой интерфейс!!!!)

2. Что понадобится для сборки, аппаратная часть

Для сборки мониторинга нам понадобится всего три детали:
1. Контроллер Wemos D1 Mini Купить на Aliexpress (130 руб. на момент написания)

Вы можете применить и другие платы на основе ESP8266, но я рекомендую именно эту, за ее компактность, цену, возможность прошивки по microUSB и наличие двойного питания (5В и 3,3В) - это все что нам нужно и ничего лишнего

2. Модуль преобразователя интерфейсов UART TTL – RS-485 (на MAX485) Купить на Aliexpress (30 руб. на момент написания)

3. Патч-корд любой длины либо кусок витой пары обжатый с одной стороны коннектором RJ-45

После перехода на WiFi, я думаю у каждого дома такой можно найти в кладовке ну либо обратится к знакомому сисадмину. Совсем на крайний случай зайти в ближайший компьютерный магазин.

3. Схема

Схема очень простая, но я бы посоветовал пропаять все соединения, иначе потом можно промучиться с отладкой, а проблема банально в контакте...

Обратите внимание, что выводы преобразователя интерфейсов RE и DE - объединены, распиновка rj-45 ниже

Соединив выводы по схеме, Wemos D1 Mini подключаем к компьютеру а коннектор rJ-45 к солнечному контроллеру.
На этом с аппаратной частью закончили, ниже немного поговорим о протоколе обмена и какие данные можно получить из контроллера

4. Протокол обмена данными с контроллером EPSolar

Связь с внешним миром контроллеры осуществляют при помощи распространенного промышленного протокола Modbus, именно по нему контроллер обменивается данными с выносной панелью МТ-50. Стоит заметить, что встроенный ЖК экран контроллера, показывает только малую долю доступной для считывания по протоколу информации, подстегивая тем самым к покупке дополнительных аксессуаров

Описание протокола с картой регистров привожу по ссылке: Протокол EPSolar Modbus
Желтым отмечены те параметры, которые как мне кажется являются самыми ценными и именно их мы будим отправлять в облако. Если кому-то понадобятся еще какие-то, немного разобравшись со скетчем, добавить другие параметры не составит особого труда, тем более, что резерв по переменным будет заложен.

Благодаря тому, что в автоматизации Modbus очень распространен, для платформ Arduino и ESP8266 давно написаны готовые библиотеки, поэтому мы не будем особо вдаваться в специфику протокола, а просто воспользуемся одной из таких библиотек
Как установить библиотеку в Arduino IDE - читайте здесь

5. Сцена

О том как регистрироваться в сервисе open-monitoring.online и импортировать в него готовую сцену, я уже подробно описывал в предыдущей статье
У кого еще нет аккаунта в сервисе, воспользовавшись ссылкой выше, вы с легкостью это сделаете (на сегодняшний день наблюдаются проблемы с отправкой писем активации на ящики Gmail.com, поэтому лучше использовать почту mail.ru или Яндекс)

Ссылка на скачивание конфигурации сцены: open_monitoring_epsolar_V1.controller


6. Скетч

Ссылка на скачивание архива: OpenMonitoring_EPSolar_RS485_Ver_2 (Обновлено 01.12.2023) - исправлена ошибка отображения отрицательной температуры контроллера.

Скетч для удобства разбит на 4 файла:
1. Monitoring_EPSolar_RS485_Ver_X.ino - основной, объявление переменных, настройки облака, инициализация и главный цикл;
2. Histogram.ino - функция для построения гистограммы по выработке энергии;
3. data_send.ino - функция сборки и отправки строки GET-запроса;
4. request_param.ino - функция опроса солнечного контроллера.

Код основной части
// Строки требующие редактирования в комментариях отмечены (!)

#include <ESP8266WiFi.h>                          // Стандартная библиотека в пакете
#include <SoftwareSerial.h>                       // Стандартная библиотека в пакете 
#include <ModbusMaster.h>                         // Скачать библиотеку https://github.com/4-20ma/ModbusMaster
#define FIRMWARE_VER 1                            // Версия

//*-- Настройки точки доступа
const char* ssid     = "XXXX";                    // Название точки доступа     (!)
const char* password = "XXXX";                    // Пароль                     (!)

//*-- Параметры полученные при регистрации на http://open-monitoring.online
const char* host = "open-monitoring.online";      // Адрес сервера (не менять)
const char* streamId   = "XXX";                   // ID                         (!)
const char* privateKey = "XXXXXX";                // Код доступа                (!)
unsigned long send_interval = 61000;              // Периодичность отправки пакетов на сервер (не менее 60 сек)
unsigned long request_interval = 15000;           // Периодичность опроса контроллера, желат. 3-4 опроса между отправками
unsigned long previousMillis = 0;
unsigned long requestMillis = 0;
float previousEnergy;

#define MAX485_DE      4                          // Пины для подключения RE и DE (4 - для платы ОМ)             
#define MAX485_RE_NEG  4
#define RX_PIN 0                                  // Rx - программного порта
#define TX_PIN 5                                  // Tx - программного порта
SoftwareSerial softSerial;

// instantiate ModbusMaster object
ModbusMaster node;

// Переменные физ. величин контроллера
//      1     2      3      4       5       6       7         9           10            11        12-15 - резерв
float pv_V, pv_I, batt_V, batt_I, load_U, load_I, batt_T, EnergyToday, EnergyTotal, deltaEnergy;
//      8
int batt_SOC;
//         16           17      19-20 резерв
String batt_Status, ch_Status;

uint8_t result;
uint16_t data[6];

boolean flag_1Send = true;    // Флаг первой посылки
boolean flag_TotEn = false;   // Флаг получения значения полной энергии
boolean flag_startEn = true;  // Флаг начального значения энергии
boolean LedStatus = false;    // флаг светодиода
boolean dataTrade = false;    // флаг состояния обмена данными


//*---------------- INICIALIZATION ------------------*//
void setup() {
  pinMode(MAX485_RE_NEG, OUTPUT);
  pinMode(MAX485_DE, OUTPUT);
  pinMode(2, OUTPUT);
  // Init in receive mode
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);

  Serial.begin(115200);
  softSerial.begin(115200, SWSERIAL_8N1, RX_PIN, TX_PIN, false, 32, 192);
  softSerial.enableIntTx(false);
  delay(10);
  Serial.println("");
  Serial.println("");
  Serial.print("Версия ПО: ");
  Serial.println(FIRMWARE_VER);

  // Адрес контроллера в сети ModBus (по-умолчанию - 1)
  node.begin(1, softSerial);
  // Callbacks allow us to configure the RS485 transceiver correctly
  node.preTransmission(preTransmission);
  node.postTransmission(postTransmission);

  // Подключение к сети WiFi
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    digitalWrite(2, LedStatus);
    LedStatus = !LedStatus;      // Мигаем каждые 0,5 сек пока идет подключение к сети WiFi
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}


//*------------------ MAIN CYCLE --------------------*//
void loop() {
  
  if ( millis() - requestMillis >= request_interval  || flag_1Send == true) {
    requestMillis = millis();
    if ( dataTrade == true ) {
      digitalWrite(2, false);     // Если связь есть - зажигаем светодиод на время запроса в солн. контроллер
    }
    else {
      digitalWrite(2, true);      // Если связи нет - не мигаем
    }
    tracer_data_request();        // Запрос текущих параметров контроллера
    digitalWrite(2, true);
  }

  if ( millis() - previousMillis >= send_interval || flag_1Send == true ) {
    previousMillis = millis();
    if (flag_1Send) {
      flag_1Send = false;         // Снимаем флаг первой отправки
    }
    data_send();                  // Отправка данных на сервер
  }
  
  yield();
}


Заключение

До новых встреч, всем спасибо за внимание!

open-monitoring.online, EPSolar

Комментарии