ЯД Опубліковано: 4 грудня 2025 Поділитись Опубліковано: 4 грудня 2025 Напилил себе карточку на отопление Старался сделать в стиле сансинка)) В итоге основная борде выглядит так ПС - кастомные "сенсоры" для дейли енерджи юзедж сегодня переделывал и потому считает не с начала дня) и цифры разные 4 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 4 грудня 2025 Поділитись Опубліковано: 4 грудня 2025 9 хвилин тому, ЯД сказав: карточку на отопление згадую часи коли ефективність ПВУ в мене рахувало 90%. Чогось останнім часом пише 70-80% 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
ЯД Опубліковано: 4 грудня 2025 Поділитись Опубліковано: 4 грудня 2025 1 хвилину тому, yur43 сказав: згадую часи коли ефективність ПВУ в мене рахувало 90%. Чогось останнім часом пише 70-80% Фильтры? У меня до 67 падало когда забились фильтры пылью) 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 4 грудня 2025 Поділитись Опубліковано: 4 грудня 2025 Тільки що, ЯД сказав: Фильтры? У меня до 67 падало когда забились фильтры пылью) чисто там Посилання на коментар Поділитися на інших сайтах More sharing options...
ЯД Опубліковано: 5 грудня 2025 Поділитись Опубліковано: 5 грудня 2025 Блин, я только сейчас увидел, что не в ту тему запостил )) сорри 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 5 грудня 2025 Автор Поділитись Опубліковано: 5 грудня 2025 1 годину тому, ЯД сказав: сорри Прощаю 😄 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 5 грудня 2025 Автор Поділитись Опубліковано: 5 грудня 2025 04.12.2025 в 18:59, yur43 сказав: 90% А що по вологості в конкретно даному випадку? Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 5 грудня 2025 Поділитись Опубліковано: 5 грудня 2025 2 години тому, TaurosRMK сказав: А що по вологості в конкретно даному випадку? 50% в будинку, теплообмінник повний конденсату, дренаж чистий Посилання на коментар Поділитися на інших сайтах More sharing options...
mib Опубліковано: 5 грудня 2025 Поділитись Опубліковано: 5 грудня 2025 28 минут назад, yur43 сказал: 50% в будинку, теплообмінник повний конденсату, дренаж чистий Я в очередной раз понимаю что у меня избыточная вентиляция на сейчас 38% в гостинной, 40 и 43 в с/узлах Но у меня просто вытяжки и микро на окнах Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 5 грудня 2025 Автор Поділитись Опубліковано: 5 грудня 2025 (змінено) 2 години тому, yur43 сказав: 50% в будинку, теплообмінник повний конденсату, дренаж чистий Я думав у вас датчики ті що на картинці і вологу міряють. А так середня по будинку нічого не дасть. Якщо хоча б знати яка волога витягуєтсья з будинку і поступає на теплообмінник, то можна приблизно прикинути в яку сторону дизбаланс і відкоригувати оберти вентиляторів, щоб було ближче до балансу. Ви все рівно використовуєте на одному режимі, тому один раз налаштували і буде щось близьке до балансу, і може буде очікувана ефективність. Але залежно де стоять ті датчики, що на картинці, бо якщо один на вулиці, другий в хаті, а третій десь в ПВУ, то це нічого не дасть. По вашій картинці ось так виходить. Але це грубо і без врахування вологості, і також залежно де ті датчики стоять. Змінено 5 грудня 2025 користувачем TaurosRMK 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 6 грудня 2025 Поділитись Опубліковано: 6 грудня 2025 (змінено) 14 годин тому, TaurosRMK сказав: може буде очікувана ефективність. вночі погрався балансом приток/витяжка в 2-05 додав приток +10% - ефективність ще впала, в 2-30 зробив пріоритет вихлопа +12% - ефективність зросла. Просто "на око" погрався. Змінено 6 грудня 2025 користувачем yur43 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 6 грудня 2025 Автор Поділитись Опубліковано: 6 грудня 2025 3 години тому, yur43 сказав: вночі погрався балансом приток/витяжка в 2-05 додав приток +10% - ефективність ще впала, в 2-30 зробив пріоритет вихлопа +12% - ефективність зросла. Просто "на око" погрався. Ну то відповідь від ШІ була )) Я потім собі рахував, знаючи що в мене плюс-мінус баланс, то ШІ нарахував мені на 300% більше витяжку ))) В деталі не вдавався. Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 6 грудня 2025 Автор Поділитись Опубліковано: 6 грудня 2025 3 години тому, yur43 сказав: Просто "на око" погрався. То залишіть так, додайте до своїх автоматизацій множник 1.1 до притоку. Спостерігайте декілька днів. Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 6 грудня 2025 Поділитись Опубліковано: 6 грудня 2025 1 годину тому, TaurosRMK сказав: То залишіть так, додайте до своїх автоматизацій множник 1.1 до притоку. Спостерігайте декілька днів. Просить більший вихлоп. Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: В неділю в 01:20 Автор Поділитись Опубліковано: В неділю в 01:20 (змінено) Раніше написаний в цій темі код працював цілком задовільно до певного часу. Не скажу що в тому коді реалізував все що хотів, і що все було правильно, але все працювало. В один момент щось пішло не так і контролер на ESP32 (Kincony A2) який керував всім, почав перезавантажуватися. Просто збій і все, що призводило до того, що автоматизації злітали і не виконувалися так, як треба. Згодом знайшов причину в шині І2С, яка по мірках І2С була зовсім трохи довга 🤣 В результаті було прийняте рішення дещо модифікувати контрольний пункт для ПВУ. Два окремих контролери замінив на один, також на ESP32, датчики пішли на RS485, ще дещо переніс і в результаті пів щита вільного )) Це все відповідно потягнуло за собою зміну коду. А в даний час маючи доступ до ШІ писати код простіше простого. Маючи майже рік аналізу роботи системи, я приблизно знав що хочу змінити або додати. Тому саме тим і зайнявся. Логіку розділив на дві частини, базова на стороні ESPHome, яка потрібна для автономної роботи без НА, а розширення функціоналу буде в Home Assistant. Хоча зараз закінчив з ESPHome і бачу що в НА майже немає що переносити, бо все без проблем реалізувалося на ESPHome (мається на увазі базове). А крім цього навіть не знаю що таке може знадобитися в ПВУ, що не можна реалізувати в ESPHome. А в тім, побачимо як воно буде. Озброївшись VSCode записав базовий код для контролера, а за допомогою спочатку Copilot, а потім Claude інтеграцій почав писати логіку. Ну писати код це трохи перебільшення, фактично майже все написано ШІ, я тільки писав що я хочу і коригував його роботу, поки не отримав той результат, який мені треба. Лінь доходила до того, що я писав щоб ШІ змінив інтервал оновлень сенсорів, ну просто циферки поміняти 🤣 Але навіть так, за декілька днів, особливо не розбираючись в коді, отримав готовий результат валідного коду. Перфект! Базовий функціонал це не просто увімкнути вентилятори і хай собі крутяться. А маючи набір датчиків температури і вологості як в системі, так і на вулиці, датчики потоку повітря, системою можна гнучко керувати. Тому замість простого вмикання/вимикання, система має слідкувати за змінами, підтримувати потрібний потік повітря, реагувати на команди користувача, фіксувати аварійні випадки і сповіщати про них. Отже, структура проекту розбита на папки, які підключаються в основному файлі. Зручно, чисто і зрозуміло. Звісно зараз цим нікого, а тим більше програмістів, не здивуєш, але майже 2000 рядків коду (без коментарів) пхати в один файл і ритися в тому, виглядає дурним. Тим більше що це тільки базовий функціонал, ще дещо буде додано після обкатки системи, а може і взагалі все буде зроблено на ESPHome. Прихований текст # ============================================================================= # SYSTEM COMPONENTS # ============================================================================= # Debug component for reset reason diagnostics debug: update_interval: 5s # Time synchronization with RTC time: !include mvhr_hub_components/base/time.yaml # Hardware watchdog for system freeze protection <<: !include mvhr_hub_components/base/watchdog.yaml # Global variables for state management globals: !include mvhr_hub_components/globals/variables.yaml # ============================================================================= # HARDWARE INTERFACES # ============================================================================= uart: !include mvhr_hub_components/hardware/uart.yaml modbus: !include mvhr_hub_components/hardware/modbus.yaml modbus_controller: !include mvhr_hub_components/hardware/modbus_controller.yaml i2c: !include mvhr_hub_components/hardware/i2c.yaml pcf8574: !include mvhr_hub_components/hardware/pcf8574.yaml # ============================================================================= # ENTITIES # ============================================================================= # Sensors (temperature, humidity, pressure, power, etc.) sensor: !include_dir_merge_list mvhr_hub_components/sensors # Binary sensors (status indicators, conditions, alarms) binary_sensor: !include_dir_merge_list mvhr_hub_components/binary_sensors # Text sensors (status messages, diagnostics) text_sensor: !include_dir_merge_list mvhr_hub_components/text_sensor # Analog outputs (PWM, DAC) output: !include_dir_merge_list mvhr_hub_components/outputs # Digital outputs (relays, switches) switch: !include_dir_merge_list mvhr_hub_components/switches # Controls (fans, climate) fan: !include mvhr_hub_components/controls/fans.yaml climate: !include mvhr_hub_components/controls/climate.yaml # Buttons (actions, resets) button: !include_dir_merge_list mvhr_hub_components/buttons # Number inputs (settings, thresholds) number: !include_dir_merge_list mvhr_hub_components/numbers # Scripts (automation sequences) script: !include_dir_merge_list mvhr_hub_components/scripts # Intervals (periodic automations) interval: !include mvhr_hub_components/intervals/intervals.yaml ----- Перемикач запуску системи. Нічого не звичного, перевірка стану системи, якщо в аварійному режимі, то система не запуститься, в інших випадках запуск відповідного скрипта на старт чи стоп системи. В коді ще відсутній функціонал сповіщень в телеграм, додано буде пізніше. Тому в багатьох місцях коду будуть відповідні сповіщення, щоб було зрозуміло що з системою. Прихований текст # ============================================================================= # MVHR START/STOP SWITCH # ============================================================================= # System start/stop control for physical button and Home Assistant # ============================================================================= - platform: template id: start_stop name: "Start/Stop" icon: "mdi:hvac" lambda: |- const std::string status = id(system_status); return status == "starting" || status == "running"; turn_on_action: - if: condition: lambda: |- return id(emergency_active); then: - lambda: |- ESP_LOGE("mvhr", "Cannot start - Emergency state active: %s", id(emergency_cause).c_str()); ESP_LOGE("mvhr", "Use Emergency Reset to clear"); id(start_stop).publish_state(false); else: - if: condition: lambda: |- const std::string status = id(system_status); return status == "stopped" || status == "stopping" || status == "error"; then: - script.execute: mvhr_start turn_off_action: - if: condition: lambda: |- const std::string status = id(system_status); return status == "running" || status == "starting"; then: - script.execute: mvhr_stop Скрипт запуску. Прихований текст # ============================================================================= # MVHR STARTUP SCRIPT # ============================================================================= # Initializes system: fans, dampers, and basic state setup # ============================================================================= - id: mvhr_start then: - script.stop: mvhr_stop - script.stop: mvhr_warmup - lambda: |- id(system_status) = "starting"; ESP_LOGI("mvhr", "STARTUP: Initializing system"); - switch.turn_on: do07_lamp_blue - delay: 2s - switch.turn_on: do01_fan_supply - switch.turn_on: do02_fan_exhaust # Wait for dampers to open - delay: 75s - fan.turn_on: id: fan_supply_speed speed: 40 - fan.turn_on: id: fan_exhaust_speed speed: 40 - delay: 3s - lambda: |- id(current_fan_supply_speed) = id(fan_supply_speed).speed; id(current_fan_exhaust_speed) = id(fan_exhaust_speed).speed; - lambda: |- id(system_status) = "running"; ESP_LOGI("mvhr", "STARTUP: System running"); - delay: 10s # Check if warmup is needed based on ETA temperature - if: condition: lambda: |- const float eta_temp = id(temperature_eta).state; if (isnan(eta_temp)) { return true; } return eta_temp < 19.0f; then: - script.execute: mvhr_warmup - script.wait: mvhr_warmup - lambda: |- if (id(system_status) == "running") { id(system_ready) = true; ESP_LOGI("mvhr", "STARTUP: System ready"); } else { ESP_LOGW("mvhr", "STARTUP: System was stopped during startup"); } Скрипт зупинки. Прихований текст # ============================================================================= # MVHR SHUTDOWN SCRIPT # ============================================================================= # Safely stops system: fans, dampers, and final state cleanup # ============================================================================= - id: mvhr_stop then: - script.stop: mvhr_start - script.stop: mvhr_warmup - lambda: |- id(system_status) = "stopping"; ESP_LOGI("mvhr", "SHUTDOWN: Stopping system"); - fan.turn_off: fan_exhaust_speed - fan.turn_off: fan_supply_speed - switch.turn_off: do02_fan_exhaust - switch.turn_off: do01_fan_supply # Wait for dampers to close - delay: 75s - switch.turn_off: do07_lamp_blue - lambda: |- id(system_ready) = false; id(system_status) = "stopped"; ESP_LOGI("mvhr", "SHUTDOWN: System stopped"); Скрипт прогріву теплообмінника. Прихований текст # ============================================================================= # MVHR HEAT EXCHANGER WARMUP SCRIPT # ============================================================================= # Determines warmup duration based on ETA temperature and performs warmup # ============================================================================= - id: mvhr_warmup mode: restart then: # Determine warmup duration based on ETA temperature - lambda: |- const float eta_temp = id(temperature_eta).state; const bool winter = id(season_winter_state); int warmup_minutes = 0; // Check if temperature is valid (not NaN) if (isnan(eta_temp)) { if (winter) { warmup_minutes = 10; } else { warmup_minutes = 0; return; } } else if (eta_temp < 17.0f) { warmup_minutes = 10; } else if (eta_temp >= 17.0f && eta_temp < 19.0f) { warmup_minutes = 5; } else { return; // Exit script if no warmup needed } // Store warmup time id(warmup_timer) = warmup_minutes; # Set exhaust fan to 75% for warmup - fan.turn_on: id: fan_exhaust_speed speed: 75 - lambda: |- ESP_LOGI("mvhr", "WARMUP: Started for %d minutes at 75%% exhaust speed", id(warmup_timer)); # Wait for warmup duration using while loop # Exit early if system is stopped - while: condition: lambda: |- // Continue warmup only if system is still running AND timer > 0 if (id(system_status) != "running") { ESP_LOGW("mvhr", "WARMUP: System stopped, exiting warmup"); return false; } return id(warmup_timer) > 0; then: - delay: 1min - lambda: |- id(warmup_timer)--; - lambda: |- ESP_LOGI("mvhr", "WARMUP: Finished"); # Restore exhaust fan to saved speed - lambda: |- auto call = id(fan_exhaust_speed).turn_on(); call.set_speed(id(current_fan_exhaust_speed)); call.perform(); Скрипт аварії. На даний час це фактично просто запуск скрипта зупинки системи, але не користувачем, а системою. Наразі цей скрипт ще не повноцінний, бо треба подумати що саме буде визивати аварії, а що може ігноруватися. Поки що аварію визиває загроза обмерзання теплообмінника, якщо температура на витяжці після ТО опускаєтсья нижче 3°C, то це тригер для аварійної зупинки. Прихований текст # ============================================================================= # EMERGENCY SHUTDOWN SCRIPT # ============================================================================= # Safely shuts down MVHR system in emergency conditions # ============================================================================= - id: emergency_shutdown mode: single then: - lambda: |- ESP_LOGE("emergency", "Emergency shutdown sequence initiated"); # Activate red warning lamp - switch.turn_on: do08_lamp_red # Stop MVHR system (heaters auto-disable via enable conditions) - script.execute: mvhr_stop # Shutdown complete - log cause - lambda: |- ESP_LOGE("emergency", "Emergency shutdown complete"); ESP_LOGE("emergency", "Cause: %s", id(emergency_cause).c_str()); ESP_LOGE("emergency", "Manual reset required"); Це ніби все, що пов'язано з запуском/зупинкою системи, як вручну, так і самою системою. Для базового і автономного функціоналу цього думаю достатньо. Змінено В неділю в 01:21 користувачем TaurosRMK 2 Посилання на коментар Поділитися на інших сайтах More sharing options...
standov Опубліковано: В понеділок в 12:21 Поділитись Опубліковано: В понеділок в 12:21 В 08.10.2024 в 01:18, standov сказал: Такі алгортми на нізькоровневій мові з урахуванням невеликих ресурсів заліза, наявності величезної кількості нюансів про які ви дізнаєтесь в процесі, потребують ресурсів команди з досвідом і півсотні версій. кхм ) 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: В понеділок в 19:09 Автор Поділитись Опубліковано: В понеділок в 19:09 6 годин тому, standov сказав: Такі алгортми на нізькоровневій мові з урахуванням невеликих ресурсів заліза, наявності величезної кількості нюансів про які ви дізнаєтесь в процесі, потребують ресурсів команди з досвідом і півсотні версій. Команда є, я і мої друзі Claude і Copilot 🤣 Досвід в них є, код пишуть швидко, на будь які запити ))) На рахунок версій - не впевнений нащо аж півсотні, якщо тут за пару днів можна сказати бета версія вже готова, яка на 80% має бажаний функціонал. Ну звісно це все не з нуля, а фактично повторення того, що вже було на старому контролері, тільки з деякими змінами. А що не так з алгоритмами і ресурсами заліза? От просто не розумію, якось це все працювало на аналогічній ESP32 приблизно з січня минулого року і до кінця серпня, без будь яких нюансів, 24/7 🤔 А тоді щось не так пішло з І2С (велика обнова) і трохи поламалася робота через регулярні збої. Але проблема не в залізі/коді, а в шині І2С під 10 метрів 😅 Зараз такий самий чіп ESP32-Wroom-32E-N16 (попередній взагалі був *-N4), функціонал передбачається такий самий, тільки з деякими змінами, які за рік користування захотілося змінити/покращити. Тому на мою думку і з досвідом використання контролера на ESP32 для таких задач, не бачу проблем. Має працювати. То ж не керування датацентром, де сотні операцій за секунду і складні алгоритми. Що ж такого в умовах перевірки стану датчиків і якщо умова true, то увімкнути декілька реле, змінити швидкість вентиляторів, запустити нагрів? А дальше знову моніторити стан датчиків і при потребі знову ж таки вмикати/вимикати реле. Елементарні умови і задачі. Так що я без поняння про які нюанси ви пишете. Може хоча б коротко про них розкажете, щоб я перевірив? Я не стверджую що в тому коді все зроблено по всіх канонах, точніше не в самому коді, а в побудові логіки роботи. Тому що код Claude пише дуже непоганий, навіть сам алгоритми пропонує, але як пов'язати одну задачу/алгоритм з усім проектом, щоб це все було правильно, де і які умови потрібно перевіряти, локально чи глобально і всяке таке, з цим хіба що можуть бути нюанси, тому що я не програміст і цю всю логіку, що і як має бути, не знаю. У всьому іншому, словесно описати алгоритм і з допомогою помічників довести до потрібного результату, наче не виникає нюансів. 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
Рекомендовані повідомлення
Створіть акаунт або увійдіть у нього для коментування
Ви маєте бути користувачем, щоб залишити коментар
Створити акаунт
Зареєструйтеся для отримання акаунта. Це просто!
Зареєструвати акаунтУвійти
Вже зареєстровані? Увійдіть тут.
Увійти зараз