Небольшая заметка на тему учета выработанной энергии с солнечных панелей. Для основного учета, как и раньше, используются модули на базе PZEM-004t + микроконтроллеры с прошивкой на базе ESP Home. Однако в последнее время развиваю тему использования солнечных панелей не только с on grid-схемой, а и для автономного обеспечения дома энергией, так как при отключениях сети энергия просто пропадает.
Для этого использую купленные ранее PZEM-017 с некоторыми модификациями. Первое – уже упомянутая выпайка моста RS232-RS485. Второе – запитка контроллера не от входной цепи, а от внешнего источника, для чего делаются 2 перемычки и убирается диод в левой части:
Это позволило делать измерения в том числе с панелей на поле, где напряжение превышает 300В. В свою очередь, “вниз” блок питания вытягивает работу вплоть до пары десятков вольт, когда инверторы или зарядки уже перестают работать и учет не нужен.
Ну и чисто конструктивные моменты: убирается ненужный входной разъем (честно говоря, не помню, чего я начал его убирать и оставлять при этом выходной – делаю уже по инерции) и мешающий USB-разъем. Часть платы срезается, чтобы втиснуть все в корпус D110 с arduino.ua.
На макетке подходящих размеров размещается остальная электроника: БП на 3.3v, разъем для вставки ESP01, пара резисторов подтяжки (для RST и EN) и шунт измерителя.
Вход/выход – через разъемы XT60.
Прошивка – в общем-то, практически дефолтный пример для pzemdc с введенной поправкой для коррекции показаний по току.
Update 2026-04-30: накопилось достаточно много изменений, так что выложу свой конфиг под ESP Home.
Основная тема – добавлен учет выработки за текущие сутки на базе кода, реализованного в “реле всего“, причем счетчик работает между перезапусками: сделан шаблон, который обновляется в реальном времени по данным от сенсора энергии, сохраняющий данные в EEPROM (и с возможностью сбросить накопленные в течение суток данные в любой момент времени) и сбрасывающийся либо в 12 ночи, либо в любое другое время суток, если это первый запуск в этот день.
Также реализован учет максимальной зарегистрированной мощности в течение дня.
Все переменные вынесены в заголовок файла.
Со стороны Home Assistant работа с сенсорами дополнена шаблоном (класс – энергия, состояние – “общее увеличение”), сохраняющим значение в момент отсутствия солнца:
{% set sauna = states(‘sensor.solar_dc_sauna_daily_energy’) | float(none) %}
{% set field = states(‘sensor.solar_dc_field_daily_energy’) | float(none) %}
{% set last_total = states(‘sensor.total_solar_daily_dc_energy’) | float(0) %}
{% if now().hour == 0 and now().minute == 0 %}
{# Сброс в полночь #}
0
{% elif sauna is not none and field is not none %}
{# Оба доступны — считаем сумму #}
{{ (sauna + field) | round(2) }}
{% else %}
{# Кто-то недоступен — держим старое значение #}
{{ last_total }}
{% endif %}
Это позволяет развивать дополнительные индикаторы – например, процент покрытия выработкой потребления в течение всего дня, а также смотреть общую выработку за день даже тогда, когда солнца уже нет и измерители оффлайн.




2 мысли о “DC-измеритель для солнечных панелей”