Ви не увійшли.



// ---- Режим "Крива опалення" (погодозалежне регулювання) ----
ESP8266 «Котел» (opentherm_mqtt.ino) — документація
Плата виконує роль шлюзу: спілкується з котлом по протоколу OpenTherm, а з Delphi-застосунком — через MQTT (брокер CloudAMQP).
1. Підключення пінів (NodeMCU)
Пін GPIO Призначення Напрямок
D7 GPIO13 OpenTherm-адаптер — IN вхід (переривання)
D8 GPIO15 OpenTherm-адаптер — OUT вихід
D5 GPIO14 Реле насоса вихід (RELAY_ON=LOW / RELAY_OFF=HIGH)
D3 GPIO0 Кнопка скидання WiFi (вбудована FLASH-кнопка) вхід, INPUT_PULLUP
3.3V / GND — Живлення OpenTherm-адаптера та реле —
⚠️ D3 (GPIO0) зайнятий кнопкою WiFi-reset — не використовуйте його для реле чи інших периферійних пристроїв (це "strapping"-пін, критичний для завантаження ESP8266).
2. Загальна логіка роботи
setup()
├─ connectWiFi() — WiFiManager: підключення / точка доступу "Boiler"
├─ ot.begin(...) — ініціалізація бібліотеки OpenTherm
├─ pinMode(RELAYPUMP, OUTPUT) — реле в безпечний стан (вимкнено)
└─ mqtt.setServer/setCallback
loop() (виконується постійно)
├─ mqtt.loop() — обробка вхідних MQTT-повідомлень
├─ якщо минув OT_INTERVAL (1с) → otCycle() — обмін з котлом
│ └─ раз на кілька циклів → readExtParamsStep()
└─ якщо минув PUB_INTERVAL → publishState() — публікація стану в MQTT
3. Опис функцій
connectWiFi()
Піднімає WiFi через WiFiManager. Якщо при старті утримати кнопку WiFi-reset (D3/GPIO0) — скидає збережені налаштування мережі й відкриває точку доступу "Boiler" для повторного налаштування.
connectMQTT()
Підключається до брокера (goose.rmq2.cloudamqp.com), публікує online (LWT — offline при розриві), підписується на всі командні топіки (set/enable, set/temp, set/room_temp, pump/set, set/curve_mode) і одразу публікує поточні retained-стани (pump, curve_mode).
mqttCallback(topic, payload, length)
Єдина точка прийому команд від Delphi. За назвою топіка визначає, яке поле змінити:
Топік Дія
home/boiler/set/enable boiler.enabled = ...
home/boiler/set/temp boiler.setTemp (перевірка діапазону 20–80°C)
home/boiler/set/room_temp boiler.roomSetTemp (діапазон 5–30°C)
home/boiler/pump/set setPump(msg == "1")
home/boiler/set/curve_mode вмикає/вимикає режим «Крива опалення»
home/sensor/temp / temp_o кеш кімнатної/зовнішньої температури (для кривої)
setPump(bool on)
Керує реле насоса: digitalWrite(RELAYPUMP, ...), зберігає стан у pumpState, публікує підтверджений статус у home/boiler/pump (retained).
otCycle()
Головний цикл обміну з котлом по OpenTherm (виконується раз на секунду):
Встановлює статус (CH увімкнено/вимкнено, чи є помилка, чи горить пальник).
Розраховує й надсилає уставку температури теплоносія — вручну (boiler.setTemp) або автоматично за кривою (computeHeatingCurve), якщо активний curveMode.
Надсилає уставку кімнатної температури.
Читає поточну температуру подачі й обратки.
Читає код і прапорці несправності (ASF-флаги).
computeHeatingCurve(desired, in, out)
Погодозалежний розрахунок температури теплоносія за квадратичною апроксимацією класичного «температурного графіка», з поправками на бажану кімнатну температуру та фактичне відхилення термостата.
readExtParamsStep()
Читає розширені параметри OpenTherm по одному за виклик (не всі одразу), щоб не блокувати loop() на кілька секунд: тиск у системі (ID18), температура вихлопу, зовнішня температура котла (ID27), рівень модуляції пальника (ID17), макс./мін. потужність (ID15).
publishState()
Публікує повний стан котла в MQTT:
окремі топіки (temp, temp_return, flame, fault_code, fault_flags) — для швидкого доступу;
один великий JSON у home/boiler/status — всі поля разом (enabled, temp, set_temp, room_set, pump, розширені OpenTherm- параметри, curve_mode, curve_calc_temp).
handleInterrupt()
Апаратний обробник переривання OpenTherm-бібліотеки (ICACHE_RAM_ATTR — виконується з RAM для швидкодії, обов'язково для переривань на ESP8266).
4. MQTT-топіки (підсумково)
ESP → Delphi (публікує, retained): home/boiler/status (JSON), home/boiler/temp, home/boiler/temp_return, home/boiler/flame, home/boiler/pump, home/boiler/curve_mode, home/boiler/online
Delphi → ESP (команди, підписка): home/boiler/set/enable, home/boiler/set/temp, home/boiler/set/room_temp, home/boiler/pump/set, home/boiler/set/curve_mode
Неактивний
Нічого не зрозуміло але дуже цікаво (ц)
Що це взагалі було? Якийсь потік сознанія. Це ви зробили, чи хочете зробити, чи десь купили, чи хочете продати..?
Взагалі крутити котлом через opentherm цікаво, але особливого смислу я не бачу. Ну, то таке. Існують сценарії де воно непогано. Заміський маєток, куди ви навідуєтесь раз на тиждень ![]()
Незрозуміло, навіщо чіпати насос - котел і сам непогано ним управляє.
Температура 29С - для сауни малувато, для житла забагато.
І, того, не одному екрані написи і на російській і на український.. WTF?
Неактивний