ЕНЕРГЕТИЧНИЙ ВАМПІР-ПОСІБНИК РОЗРОБНИКА ТА АДМІНІСТРАТОРА

Це інструкція зі створення інтелектуальної системи керування потужністю бойлера для повного поглинання сонячної енергії. Це для власників мікроінверторів/інверторів які домішують енергію сонця до споживання будинку але не мають лімітерів для запобігання експорту зайвої енергії у мережу. Зайву енергію сонця заливаємо у бойлер щоб запобігти споживанюю з мережі.
У документі детально описано архітектуру рішення на базі мікроконтролера ESP32-C3 та мікроінвертора, принцип роботи алгоритму пакетного керування (Burst Control) за методом Брезенхема для мінімізації мережевих перешкод, а також наведено повні коди скетчів та конфігураційні файли для інтеграції в систему Home Assistant. Матеріал охоплює всі етапи: від фізичного підключення компонентів і теплових розрахунків симістора до логіки автоматизації «чистого надлишку», що робить його практичним інструментом для побудови надійної та енергоефективної системи «Smart Home».
Ознайомтесь з Розділом 13: Відмова від відповідальності (Disclaimer)

Документація для радіолюбителів-аматорів. Програмні коди створено з використанням Gemini, великої мовної моделі (LLM), яка була розроблена компанією Google
Автор: Магазин електронних модулів https://arduinka.biz.ua


ESP32 SOLAR DIVERTER (ДІМЕР) V5.5 ВАМПІР

В якості обладнання використана плата ESP32-C3 SuperMini PRO/PLUS
https://arduinka.biz.ua/esp32-c3-supermini-plata-razrabotki-wifi-ble-usb
В якості дімера використано  Димер 220В для Arduino та ESP8266
https://arduino.ua/prod2958-dimmer-220v-dlya-arduino
 
  1. ВСТУП ТА ПРИНЦИП РОБОТИ 

Цей документ описує конфігурацію системи керування потужністю електричного бойлера (ТЕН 2000W) на базі контролера ESP32-C3 TENSTAR та сервера Home Assistant. Протокол обміну даними WiFi. Управління теном здіснюється через симісторний димер з детектором нульового переходу. Задача: забезпечити плавну безпечну для інвертора передачу сонячної енергії бойлеру з мінімальними спотвореннями мережі.  
1.1. Основний Алгоритм управління (Автоматичний Режим)
Система реалізує принцип Пріоритету Надлишку сонячної генерації з динамічним урахуванням фонового споживання домогосподарства.
  • Логіка обчислення: Home Assistant отримує дані про поточну сонячну генерацію та віднімає від неї  фіксоване значення споживання серверів та мережевого обладнання що стаорюють фонове навантаження
  • Формула: Цільова Потужність = MAX(0, Сонячна Генерація - Фон).
     
  • Автономність: Оскільки MQTT-брокер працює локально на сервері Home Assistant, система зберігає повну працездатність у межах локальної мережі Wi-Fi навіть за умови відсутності зовнішнього інтернет-з'єднання.
1.2. Режими керування
  1. Автоматичний (PV): Потужність на ТЕН подається лише при виникненні надлишку сонячної енергії (понад фонове споживання, яке можна налаштувати і таке що дорівнює нулю).
  2. Ручний режим: Користувач власноруч встановлює бажану потужність (у прикладі налаштовано  0-800W) через інтерфейс Home Assistant, що має пріорітет над вимірами сонячної генерації.

 
  1. КОНФІГУРАЦІЯ АПАРАТНОЇ ЧАСТИНИ (GPIO)

Для забезпечення стабільної роботи та безпеки мікроінвертора використовуються наступні піни контролера ESP32-C3 SuperMini: -
Для управління димером дистанційно може бути використаний любий контролер в якому є WiFi. Для цього треба переписати код скетча і врахувати управляючі піни так, щоб один використовувався для детекції нуля синусоїди, а інший подавав сигнал для відкриття симістора.


3. СЛОВНИК КОНСТАНТ ТА МАКРОСІВ (КОНФІГУРАЦІЯ)

Ці параметри знаходяться у розділі МАКРОСИ ТА КОНФІГУРАЦІЯ (КОНСТАНТИ) і вимагають оновлення при зміні мережі або пристроїв.
Дані з таблиці включено в код програми для ESP32
 
Константа
Скетчу
GPIO Пін Функція
ZERO_CROSS_PIN 5 Вхід від модуля Zero-Cross (детектор перетину нуля для синхронізації). Ловить перетин синусоїди потужності через ноль
TRIAC_GATE_PIN 4 Вихід на керування симістором (TRIAC Gate) за методом Burst Control. Обрізає пакети синусоїди рівними порціями щоб її не спотворити і не створювати гармоніки
LED_PIN 8 Пін керування вбудованим адресним RGB LED (WS2812B) для діагностики. Забезпечує індикацію режимів роботи та аварій системи
 

4. ОПИС MQTT-ТОПІКІВ HOME ASSISTANT

Принцип взаємодії через MQTT: Обмін даними базується на моделі "видавець-передплатник", де Home Assistant виступає центральним вузлом (брокером). Контролер ESP32 після завантаження встановлює постійне TCP-з’єднання з брокером і "підписується" на топіки керування. Як тільки в Home Assistant змінюється значення сонячної генерації або користувач перемикає тумблер ручного режиму, сервер миттєво публікує нове повідомлення у відповідний топік. ESP32 отримує цей пакет даних майже миттєво (затримка зазвичай не перевищує кілька мілісекунд), що дозволяє системі оперативно реагувати на хмари або ввімкнення інших приладів у будинку.
Для забезпечення надійності обміну використовується механізм "Retain" повідомлень та контроль активності сесії. Окрім отримання команд, ESP32 регулярно відправляє (публікує) зворотний звіт про свою фактичну вихідну потужність у топік статусу. Це створює замкнутий цикл моніторингу: Home Assistant бачить не тільки те, що він "наказав" зробити димеру, а й те, яку саме потужність пристрій розрахунково видає на ТЕН у цей момент з урахуванням роботи програмної рампи. Якщо зв'язок розривається на фізичному рівні (наприклад, збій Wi-Fi), брокер фіксує відключення клієнта, а контролер, не отримавши чергового оновлення даних, активує захисний режим Watchdog.
 
Топік (Константа) MQTT-шлях (Приклад) Тип Опис
TOPIC_TARGET_POWER solar/sensor/calculated_surplus Вхід Отримує обчислений "чистий" надлишок (W) від HA (Сонце - 35W). 13
TOPIC_MANUAL_POWER homeassistant/input_number/boiler_power_manual/state Вхід Отримує цільову потужність (W) при роботі в Ручному режимі. 14
TOPIC_MANUAL_MODE homeassistant/input_boolean/boiler_manual_mode/state Вхід Отримує статус Ручного режиму (ON / OFF). 15
TOPIC_BOILER_STATUS homeassistant/sensor/boiler_power/state Вихід Публікує фактичну потужність (W), яку контролер подає на ТЕН. 16
 

5. СЛОВНИК ЗМІННИХ СИСТЕМИ

Ці змінні визначають поточний стан контролера esp32-c3
Змінна (Тип) Призначення Опис
volatile int gridFlow Вхід (W) Останнє отримане значення Надлишку або Цільової Потужності.
volatile int manualPower Вхід (W) Значення потужності, задане користувачем у Ручному режимі.
volatile bool isManualMode Вхід (bool) true — Ручний режим, false — Автоматичний режим.
volatile int currentOutputPower Вихід (W) Фактична потужність на бойлері (з урахуванням роботи рампи).
volatile int dimmerValue Керування Значення для розрахунку затримки або кількості імпульсів (0-255).
long lastMqttReceived Watchdog (мс) Час останнього успішного отримання будь-якого MQTT-пакету.

6. ВІЗУАЛЬНА ДІАГНОСТИКА (RGB LED WS2812B)

Світлодіод використовує динамічний блінк (0.5 с ON / 2.0 с OFF) для індикації робочих режимів та швидкий блінк для аварії.
Використовується вбудований піксельний адресний світлодіод ws2812
 
Колір Поведінка Статус Умова Спрацьовування
Червоний Швидке блимання Аварія Зв'язку / Watchdog MQTT відключено АБО дані не надходили понад 30 секунд.
Зелений Повільне блимання Активна Робота Потужність на бойлер подається (currentOutputPower > 0).
Синій Повільне блимання Очікування Потужність бойлера дорівнює 0 W
 

6.1. Діагностика через Serial Monitor (Arduino IDE)

Для поглибленого моніторингу та налагодження системи передбачено вивід технічних даних у серійний порт (Serial Port) зі швидкістю 115200 бод. Через інтерфейс Arduino IDE користувач може спостерігати за логікою прийняття рішень контролером у реальному часі: у вікно монітора виводяться поточні значення отриманої через MQTT «Цілі» (Target), стан режиму (Автоматичний/Ручний), а також фактичне значення потужності на виході з урахуванням роботи програмної рампи. Протоколом виводу також передбачено службові повідомлення про статус Wi-Fi з’єднання, IP-адресу пристрою, підтвердження отримання MQTT-пакетів та критичні попередження системи захисту (Watchdog), що дозволяє адміністратору оперативно виявляти причини можливих затримок або збоїв зв'язку без демонтажу пристрою.

В таблиці- приклади повідомлення від ESP32 через порт серыйний в Arduino IDE

Повідомлення в Serial Monitor Опис / Значення Коли з'являється
WiFi connected. IP: 192.168.0.XX Успішне підключення до роутера. Показує локальну адресу ESP32. При старті або перепідключенні.
Attempting MQTT connection... Контролер намагається авторизуватися на вашому сервері Home Assistant. При старті або після збою мережі.
MQTT connected Зв’язок з брокером встановлено. ESP32 готова отримувати дані. Одразу після успішної авторизації.
Target Power received: 450W Відображає значення, яке прийшло з HA (чистий надлишок). Щоразу, коли змінюється генерація сонця.
Manual Mode: ON. Target: 500W Повідомляє, що активувався ручний режим і встановлено конкретну потужність. При перемиканні тумблера в HA.
Ramp: 320W -> 340W Крок програмної рампи. Показує плавне підтягування реальної потужності до цілі. Кожні 100 мс під час зміни навантаження.
!!! WARNING: MQTT TIMEOUT! Power -> 0W Повідомлення захисту Watchdog. Дані не надходили понад 30 сек. При збої зв'язку (світиться червоний LED).
New Dimmer Value: 128 Технічне значення (0-255), яке передається на симістор для пакетного керування. При кожній зміні вихідної потужності.
 

7. ФУНКЦІОНАЛЬНІСТЬ ЗАХИСТУ

7.1. Захист Watchdog (MQTT Timeout)

Система реалізує функцію безперервного контролю зв'язку. Якщо увімкнений Автоматичний режим (isManualMode = false) і з моменту останнього отримання даних з MQTT минуло більше ніж 30 секунд (MQTT_TIMEOUT_MS):
  1. Система негайно встановлює currentOutputPower = 0 W для безпеки.
  2. Світлодіод переходить у режим Червоної Аварії за відсутністю звязку.
  3. У Serial Monitor виводиться повідомлення: !!! WARNING: MQTT TIMEOUT! Power set to 0 W for safety. !!!.
Цей захист запобігає неконтрольованому споживанню енергії з мережі (ГРІД) у разі збою Home Assistant або роутера

8. ОСОБЛИВОСТІ ТА ЛОГІКА КЕРУВАННЯ (v10.1)

Цей розділ описує фізичні принципи роботи дімера, оптимізовані для безпеки мікроінвертора та точності використання надлишку.
8.1. Принцип Керування: Пакетне Керування (Burst Control)
Ми використовуємо метод Burst Control замість фазового дімування для зпобігання спотворень синусоїди в мережі. ТЕН вмикається та вимикається лише в моменти перетину синусоїдою нуля (Zero-Crossing).
Перевага: Нульове генерування високочастотних перешкод. Це забезпечує стабільну роботу мікроінвертора без ризику помилок синхронізації.
8.2. Точність Керування
Завдяки встановленню TOTAL_CYCLES = 160, ми досягаємо високої роздільної здатності:
  • Максимальна потужність: 800 W (прогрмується).
  • Крок регулювання: 5 W. Кожен крок відповідає вмиканню симістора на одну півхвилю зі 160 (загальний час циклу 1.6 с).
8.3. Динаміка Керування: Програмна Рампа (Ramp-Up/Down)
Для захисту мережі від різких стрибків потужності використовується механізм плавного змінення навантаження. Це захищає мікроівертор від зайвих збуджень
  • Швидкість: 20 W кожні 100 мс (або 200 W/сек).
  • Результат: Різкий стрибок цілі (наприклад, на 600 W) буде "розтягнутий" у часі до 3 секунд, що гарантує стабільність роботи інвертора.
8.4. Багаторівнева система обмеження та надійність
  • Система спроектована з пріоритетом на максимальну відмовостійкість. Незважаючи на те, що фізична потужність ТЕНа становить 2000 Вт, програмне обмеження в коді ESP32 (SOLAR_MAX_POWER 800) та налаштуваннях Home Assistant встановлено на позначці 800 Вт, що суворо відповідає номіналу мікроінвертора.
  • Використання силового симістора BTA16-600 (розрахованого на 16А) у такому режимі забезпечує роботу навантаження лише на 22-25% від його фізичної спроможності. Це гарантує мінімальне теплове виділення, запобігає деградації напівпровідників та виключає ризик аварійного перевантаження інвертора. Таким чином, досягається високий коефіцієнт надійності, де кожен компонент системи працює з великим запасом міцності


9. НАЛАШТУВАННЯ СЕРВЕРА ХА ЧЕРЕЗ ПАКАДЖ

Пакадж (Package) у системі Home Assistant являє собою програмний модуль, який об’єднує в одному файлі всі необхідні інструменти для інтеграції дімера в систему Розумного будинку: віртуальні перемикачі режимів, налаштування ручної потужності, програмні сенсори для обчислення «чистого» надлишку та автоматизації для MQTT-обміну. Його основне призначення полягає в автономному опрацюванні логіки «Сонце мінус 35 Ватт» та забезпеченні безперервної передачі команд на ESP32. Така структура дозволяє легко масштабувати систему та тримати всі налаштування бойлера в одному місці, не розсіюючи їх по загальній конфігурації сервера.
 
Завантажити конфігурацію бойлера

Переглянути конфігурацію бойлера
 

10. ВІЗУАЛІЗАЦІЯ ТА МОНІТОРИНГ (APEXCHARTS)

Для контролю роботи системи в реальному часі використовується спеціалізована картка ApexCharts, яка відображає баланс енергії та швидкість реакції ТЕНа.

10.1. Налаштування Графіка

Для забезпечення точності відображення та уникнення викривлення історії (особливо при миттєвих перемиканнях потужності) застосовуються такі параметри:
  • Curve: stepline (для лінії "Ціль"): Використовується для сенсора boiler_target_effective. Це дозволяє бачити чіткі сходинки при зміні команд (наприклад, 800W -> 100W) без діагональних спотворень.
  • Curve: smooth (для лінії "Факт"): Відображає реальну роботу програмної рампи на ESP32, демонструючи плавне наростання або спадання потужності ТЕНа.

10.2. Колірна Індикація та Легенда

  • Фіолетовий (Area): Загальна сонячна генерація з мікроінвертора.
  • Червоний (Line): Ефективна ціль для бойлера. На графіку чітко видно "зазор" у 35W між Сонцем та Ціллю — це енергія, що зарезервована для роботи серверів та будинку.
  • Зелений (Line): Фактичне споживання, отримане з розетки бойлера (sensor.bojler_power). В ідеальних умовах ця лінія має максимально наближатися до червоної лінії Цілі.

10.3. Динамічний статус

Заголовок картки автоматично змінює колір та назву залежно від активного режиму:

Заголовок картки автоматично змінює колір та назву залежно від активного режиму:

  • РУЧНИЙ РЕЖИМ: Пріоритет налаштувань користувача.
  • АВТОМАТИКА (PV): Система працює в режимі Zero Export, підлаштовуючись під сонце.

YAML-код картки візуалізації призначений для створення інтерактивного графічного інтерфейсу в Home Assistant, який дозволяє в реальному часі моніторити баланс енергії між сонцем та бойлером. Реалізація базується на використанні кастомного елемента apexcharts-card , де за допомогою математичних моделей stepline та smooth забезпечується коректне відображення миттєвих команд цілі та плавної роботи фізичної рампи ТЕНа. Для впровадження цієї картки на сервер необхідно перейти в режим редагування дашборду Lovelace, обрати пункт «Додати картку», знайти в списку «Manual» (Ручна картка) та просто вставити нижченаведений код у текстове поле, замінивши стандартний вміст.





Вигляд картки управління потужністю дімера
На малюнку сонце генерує 41 Ват, розрахована потужність це різниця між сонячною генерацією і фоновим сподживанням енергії будинком що подана на дімер бойлера (ціль) 6Ват, факт 0Ват – нульове споживання оскільки бойлер вже нагрітий і спрацювала внутрішня автоматика відключення.
Фонове споживання (інтернет, роутер, комутатори, серверХА, індикація на прилладах що не вимкнені і інші). В прграмі фонове споживання = константа=35Ват, тому ціль=сонце-фон= 41-35=6 Ват

Завантажити конфігурацію картки управління ESP32

Переглянути конфігурацію картки управління ESP32

 

11. СКЕТЧ УПРАВЛІННЯ ESP32-C3 Supermini    solar_dimmer_v10.2.ino

  
Завантажити sketch-esp32-dimer-ha

Переглянути sketch-esp32-dimer-ha
 

12. ТЕОРІЯ ВИКОРИСТАННЯ ДЕТЕКТОРА НУЛЯ (ZERO CROSS) ЗА АЛГОРИТМОМ БРЕЗЕНХЕМА

ESP32 використовує зовнішні переривання (External Interrupts) для синхронізації з мережею, і це критично важливо для вашого методу керування.
Ось як саме це працює у коді:

1. Детектор нуля (Zero Cross)

Модуль дімера має спеціальний вихід (Zero-Cross), який підключений до одного з пінів ESP32. У скетчі налаштоване переривання на цей пін (через функцію attachInterrupt з параметром RISING).
  • Кожні 10 мілісекунд (при 50 Гц це півперіод), коли напруга в розетці проходить через нуль, спрацьовує це переривання.
  • Це «серцебиття» системи. ESP32 не просто «рахує час», вона чекає фізичного сигналу від мережі, щоб знати, коли починається нова синусоїда.

2. Алгоритм Брезенхема (Пакетне керування)

Саме всередині цього переривання виконується розрахунок: відкривати симістор зараз чи ні?
  • ESP32 не розраховує час затримки (як у фазовому димері), вона працює з цілими пакетами (циклами).
  • Якщо ваша «Ціль» — 400 Вт із 2000 (20%), то алгоритм Брезенхема всередині переривання каже: «Так, зараз пропускаємо 1 повний цикл (2 переривання), а потім 4 цикли (8 переривань) відпочиваємо».

Чому це краще, ніж просто «рахувати час»?

  • Точність: Якби ми просто використовували delay() або millis(), час ESP32 міг би трохи «пливти» відносно частоти мережі 50 Гц. Переривання змушує код працювати в ідеальному такті з електромережею.
  • Відсутність завад: Оскільки переривання відбувається саме в «нулі», симістор вмикається без іскри і без радіоперешкод (що дуже важливо для вашого мікроінвертора).
  • Стабільність: Навіть якщо ESP32 на мить відволікається на обробку MQTT або Wi-Fi, апаратне переривання має найвищий пріоритет і спрацює вчасно.
Тож: Ми використовуємо зовнішні переривання для відстеження «нуля» мережі, а алгоритм Брезенхема в реальному часі вирішує, чи відкривати симістор для наступного пакета енергії.
До речі, саме завдяки цьому ви бачите ті «спалахи щосекунди» на осцилографі — це результат пропуску певної кількості періодів, відрахованих через переривання.
 

13. Відмова від відповідальності (Disclaimer)

⚠️ УВАГА: Важливе застереження щодо безпеки!
Цей посібник носить виключно інформаційний характер і є описом приватного практичного досвіду автора. Весь наведений матеріал, включаючи схеми підключення, програмний код та методику налаштування, надається за принципом «як є» (as is), без будь-яких гарантій щодо працездатності в інших конфігураціях мережі чи безпеки для обладнання третіх осіб.
Оскільки реалізація проєкту передбачає роботу з небезпечною для життя напругою, силовими приладами та втручання в енергосистему будинку, автор не несе жодної відповідальності за будь-які прямі чи опосередковані наслідки, матеріальні збитки, вихід обладнання з ладу або травми, спричинені використанням цієї інформації. Користувач бере на себе всі ризики та повну відповідальність за результати власної діяльності.

Відгуків: 0 / Написати відгук
Супутні товари
Плата контролер ESP32 C3 Super mini
ESP32-C3 SuperMini — це ультракомпактна плата розробки на базі енергоефективного чипа ESP32-C3 з підтримкою Wi-Fi та Bluetooth Low Energy (BLE 5.0). Ідеально підходить для IoT-проєктів, автомати..
2 відгуків
129.00 грн.
Схожі статті
Використання сонячної енергії без експорту і без акумулятора
10.06.2025 435
Використання сонячної енергії без експорту і без акумулятора
Використання сонячної енергії набуло нового забарвлення після масштабних відключень світла. Рятуючись від блекаутів населення придбало чимало сонячних панелей і акумуляторів. Однак, блекауті..
Написати відгук
Увага: HTML не підтримується. Використовуйте звичайний текст.
    Погано            Добре