standov Опубліковано: 7 жовтня 2024 Поділитись Опубліковано: 7 жовтня 2024 Вибачте за прямоту, дуже багато тексту і дуже мало конкретики "всі умови" "певні умови" - це не схоже на оформлену ідею а скоріше на гравіцапу яка ртбить пищь. Реалізація всього цього на есп не реалістична, як мінімум тому що ви захоче е в петлю в процесі. Такі алгортми на нізькоровневій мові з урахуванням невеликих ресурсів заліза, наявності величезної кількості нюансів про які ви дізнаєтесь в процесі, потребують ресурсів команди з досвідом і півсотні версій. Якщо прям хочется ото все багацтво - робіть максимально- простий функціонал на есп (фактично завертання датчиків/реле в mqtt) і пишіть всю бізнес-логіку засобами ha/openhab/nodered, там є розвинені мови, багаті можливості, бібліотеки і тп. Ви вже на етапі роботи з таймерами "офігеєте" ) 1 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
standov Опубліковано: 7 жовтня 2024 Поділитись Опубліковано: 7 жовтня 2024 4 минуты назад, TaurosRMK сказал: Вже все є готове і працює Та покажіть вже нарешті, код в гітхабі там. Мені правда цікаво як в вас то вийшло. Що саме у вас вже є? Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 7 жовтня 2024 Автор Поділитись Опубліковано: 7 жовтня 2024 5 хвилин тому, standov сказав: "всі умови" "певні умови" - це не схоже на оформлену ідею Так а що зміниться, якщо я розпишу конкретніше? То ще більше тексту буде, бо тоді будуть реальні дані і фактично це вже буде частина автоматизації тільки написана словами )) Наприклад: Натиснута кнопка "Старт", команда на запуск вентиляції, спочатку треба відкрити заслінки, вони привязані до вентиляторів (на одному реле), тобто подаєтсья команда на ПЛК DO1 / DO2 для подачі живлення на вентилятори і заслінки, але оберти вентиляторів поки на нулі, час відкриття заслінки 75 сек, після чого можна запускати вентилятори. Перевірка вуличної температури, якщо це зимовий період (наприклад Т < 15°C), то можливо є сенс спочатку запустити витяжний вентилятор на більші оберти, щоб прогріти трохи рекуператор. Це може бути як по часу так і по даних з датчиків, після цього можна запускати приточний вентилятор. Знову перевірка температури, якщо Т < 3°C, потрібно включати нагрів, але він включиться тільки при умові що оберти приточно вентилятора більше ***. Якщо це літній період (Т > 15°C), то вентилятори стартують одночасно і нагрівачі не потрібні. Запустилися обидва вентилятори, нагрівач, все наче працює, допустимо пройшов деякий час і по датчику температури повітря з вулиці має підтримуватися на позначці не менше +3°C, а температура впала нижче і так триває вже 60-120 сек (налаштовується), а при тому під регулятор наче дає команду на нагрів. Значить щось не то, є ризик обмерзання рекуператора, треба фіксувати аварію і повідомити про це, шлемо mms на нокію і вимикаємо вентиляцію. Буває так що уставку +3°C інколи можна понизити, в залежності від показників інших датчиків. Це також треба вміти робити автоматично. Дальше може бути ситуація з обмерзанням рекуператора, коли температура витяжки після рекуператції падає нижче +5С. В такому випадку потрібно за цим слідкувати, трохи збільшувати нагрів або оберти витяжного вентилятора, щоб краще прогрівався рекуператор. Ті ж фільтри, для початку фіксувати час напрацювання і дивитися чи не спрацював пресостат на фільтрах. Якщо вийшов термін роботи фільтрів (налаштовується), то нагадати про це, якщо термін перевищив уставку наприклад на 5-10 днів, то нагадати ще раз, можливо зафіксувати аварію, бо фільтр вже потребує заміни і може бути дизбаланс потоків, що погано відобразиться на рекуперації. Натискаємо кнопку "Стоп", перевіряємо чи працюють в цей момент нагрівачі. Якщо так, то ще можна перевірити на яку потужність, якщо там дуже мало, то можна вентилятори вимикати зразу, думаю нічого страшного не станеться від 50-100 Вт потужності без обдуву. А якщо гріють на 1-1.2 кВт, то спочатку вимикаємо нагрівачі, потім даємо приточному вентилятору покрутитися ще деякий час 1-3 хв, щоб обдути ТЕНи, або просто по датчиках слідкувати, якщо температура починає знижуватися, то можна вимикати вентилятор. І це мабудь лише частина з того що задумано. Хоча дещо може не буде реалізовано так як описано, дещо може відпаде, але в цілому логіка така що просто робляться налаштування, якісь уставки і воно все працює на автоматі. Розумію що для новачка то може не просто, але попробувати треба 🤣 Частково такий функціонал був записаний на старій системі в тому "нерозумному" ПЛК, але то скучно робити програму на FBD і тоді було менше датчків і обладнання інше. 10 хвилин тому, standov сказав: максимально- простий функціонал на есп (фактично завертання датчиків/реле в mqtt) і пишіть всю бізнес-логіку засобами ha/openhab/nodered Так саме про це і запитав сьогодні в першому повідомленні )) Спочатку думав все писати в код ESP, але якось є сумніви що все вийде, тому і питав. Бо може може краще не пхати все в ESP, а вибрати щось інше. 9 хвилин тому, standov сказав: Та покажіть вже нарешті, код в гітхабі там. Мені правда цікаво як в вас то вийшло. Що саме у вас вже є? А що там показувати? Стандартний код ESPHome, фактично зчитування регістрів Modbus з "нерозумного" ПЛК/реле і посилання команд на нього і на контролер обертів вентилятора. І це все закинуто в НА, на тому й все. Вибачте, я не програміст, мене не є на гітхабі, я з тим не знайомий )) Кусок кину тут, там на 700+ рядків, буде забагато, але плюс мінус то все однотипне. На даний момент в ручному режимі можна робити практично все - вкл/викл вентилятори, разом з ними заслінки, змінювати оберти, вкл/викл нагрівачі, вкл/викл всі релешки на ПЛК, моніторити всі датчики. Але це просто ручний режим, хоча що потрібно в літній період, запустив вентилятори і хай працюють 24/7. На зиму так не прокатить вже. Прихований текст # Fan # ================================== fan: # Supply Fan - platform: speed output: vo1_output id: supply_fan name: "Fan Supply" restore_mode: ALWAYS_ON speed_count: 100 on_turn_off: then: - climate.control: id: pid_preheater mode: "OFF" - climate.control: id: pid_postheater mode: "OFF" - delay: 2000ms - switch.turn_off: heater1_relay - switch.turn_off: heater2_relay on_turn_on: then: - delay: 2000ms - switch.turn_on: heater1_relay - switch.turn_on: heater2_relay - delay: 60000ms - climate.control: id: pid_preheater mode: "HEAT" - climate.control: id: pid_postheater mode: "HEAT" # Exhaust Fan - platform: speed output: vo2_output id: exhaust_fan name: "Fan Exhaust" restore_mode: ALWAYS_ON speed_count: 100 # SWITCH # ================================== switch: - platform: template name: "MVHR_ON-OFF" id: mvhr_onoff lambda: |- if (id(supply_fan).state || id(exhaust_fan).state) { return true; } else { return false; } turn_on_action: - fan.turn_on: supply_fan - fan.turn_on: exhaust_fan turn_off_action: - fan.turn_off: supply_fan - fan.turn_off: exhaust_fan # MVHR ON/OFF - platform: modbus_controller modbus_controller_id: rs485_pr100 name: "ON/OFF" id: mvhr_on_off icon: mdi:power register_type: coil address: 8320 # Digital Outputs # DO1 - Supply Fan - platform: modbus_controller modbus_controller_id: rs485_pr100 name: "PR200 DO1" id: do_1 icon: mdi:electric-switch register_type: coil address: 8352 # DO2 - Exhaust Fan - platform: modbus_controller modbus_controller_id: rs485_pr100 name: "PR200 DO2" id: do_2 icon: mdi:electric-switch register_type: coil address: 8353 # DO3 - Lamp Blue - platform: modbus_controller modbus_controller_id: rs485_pr100 name: "PR200 DO3" id: do_3 icon: mdi:electric-switch register_type: coil address: 8354 # DO4 - Lamp Red - platform: modbus_controller modbus_controller_id: rs485_pr100 name: "PR200 DO4" id: do_4 icon: mdi:electric-switch register_type: coil address: 8355 climate: # PreHeater - platform: pid name: "pid_preheater" id: pid_preheater sensor: temp_oda default_target_temperature: 3.5°C heat_output: preheater_power visual: min_temperature: 0 max_temperature: 10 temperature_step: 0.1 control_parameters: kp: 0.36587 ki: 0.00283 kd: 11.81758 deadband_parameters: threshold_high: 0.25°C threshold_low: -0.25°C # PostHeater - platform: pid name: "pid_postheater" id: pid_postheater sensor: ds18b20_postheater default_target_temperature: 20°C heat_output: postheater_power visual: min_temperature: 12 max_temperature: 30 temperature_step: 0.1 control_parameters: kp: 0.33825 # 0.23506 / 0.35950 / 0.38197 / 0.42882 / 0.31878 ki: 0.00282 # 0.00163 / 0.00324 / 0.00479 / 0.00282 / 0.00188 kd: 11.17415 # 8.46213 / 9.97621 / 7.61215 / 16.29531 / 13.54810 deadband_parameters: threshold_high: 0.3°C threshold_low: -0.3°C Прихований текст І це все просто в НА в якості сенсорів, свічів і тд. Посилання на коментар Поділитися на інших сайтах More sharing options...
standov Опубліковано: 8 жовтня 2024 Поділитись Опубліковано: 8 жовтня 2024 Ну це не автоматизація наразц, ви просто звели потрібні вам реле датчики, ну і плюс два піда. Від цього до ваших хотелок - провалля) я би тепер то все заводив в опенхаб/ха і продовжував там 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 8 жовтня 2024 Автор Поділитись Опубліковано: 8 жовтня 2024 16 хвилин тому, standov сказав: Ну це не автоматизація наразц, ви просто звели потрібні вам реле датчики, ну і плюс два піда. Від цього до ваших хотелок - провалля) я би тепер то все заводив в опенхаб/ха і продовжував там Так я наче це і писав, що ніякої автоматизації немає, все в ручному режимі )) ну крім того що в НА зробив переключення режимів вентиляторів по графіку 😂 Посилання на коментар Поділитися на інших сайтах More sharing options...
standov Опубліковано: 8 жовтня 2024 Поділитись Опубліковано: 8 жовтня 2024 Шось я перестав все розуміти. То ви пишете полотно на 10500 пунктів з автоматизацією і кажете що вже майже готово, то пишете що автоматизації нема. В общем нічо не понятно, але вам удачі і натхнення, знадобиться ) 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 8 жовтня 2024 Автор Поділитись Опубліковано: 8 жовтня 2024 (змінено) 7 годин тому, standov сказав: То ви пишете полотно на 10500 пунктів з автоматизацією і кажете що вже майже готово, то пишете що автоматизації нема. Покажіть де я писав що в мене готова автоматизація, бо я щось тоже перестав розуміти ))) Здається декілька разів згадував що все працює в ручному режимі і тільки, а тепер це все треба автоматизувати, для чого і створена тема 😁 15 годин тому, TaurosRMK сказав: На даний момент в ручному режимі можна робити практично все - вкл/викл вентилятори, разом з ними заслінки, змінювати оберти, вкл/викл нагрівачі, вкл/викл всі релешки на ПЛК, моніторити всі датчики. Але це просто ручний режим 19 годин тому, TaurosRMK сказав: Зараз воно все працює вже декілька місяців, але фактично в ручному режимі і без будь якої логіки, тобто запустив і на тому все, ну окрім ПІД регуляторів, які недавно додав, бо вже була потреба в нагрівачі. Грубо кажучи зараз все на такому етапі, що все окремо працює і моніториться, але між собою ніяк не зв'язано. Для прикладу в хаті в кожній кімнаті є датчики руху і розумні світильники, і вони працюють, фіксують рухи, але освітлення ніяк не автоматизовано, треба вручну вкл/викл. Так само в мене і з вентиляцією 😄 Змінено 8 жовтня 2024 користувачем TaurosRMK Посилання на коментар Поділитися на інших сайтах More sharing options...
standov Опубліковано: 8 жовтня 2024 Поділитись Опубліковано: 8 жовтня 2024 В 03.10.2024 в 02:51, TaurosRMK сказал: І за допомогою ESP32 і невеликої плати для зв'язку по RS485 той "нерозумний" контролер став розумним і всі дані були показані в НА, звідти і відбувалося керування вентиляцією. На той момент система вентиляції була трохи іншою, з іншим обладнанням, а з початку 2024-го була перероблена, замінено багато обладнання, додано нове. Також зміни потерпів щит керування вентиляцією, "нерозумний" контролер залишився в якості модуля аналогових/дискретних входів/виходів, а вся робота покладена на контролер на базі ESP32 - Kincony A2, який без проблем інтегрувався в НА через ESPHome і керує всіма пристроями. вибачте, я мабуть не вірно інтерпретував оце ) тобто контролер не став розумним, і керує не він а ви ) ну окей, значить нічого немає ще. Зрозумів 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 8 жовтня 2024 Автор Поділитись Опубліковано: 8 жовтня 2024 3 хвилини тому, standov сказав: вибачте, я мабуть не вірно інтерпретував оце ) тобто контролер не став розумним, і керує не він а ви ) ну окей, значить нічого немає ще. Зрозумів "Розумний" я мав на увазі що інтегрований і повністю керуєтсья через НА 😀 Бо до того ніякого зв'язку з реальністю він не мав, працював сам по собі. Посилання на коментар Поділитися на інших сайтах More sharing options...
smartdom Опубліковано: 8 жовтня 2024 Поділитись Опубліковано: 8 жовтня 2024 2 часа назад, TaurosRMK сказал: а тепер це все треба автоматизувати ну stm32 в помощь ) подобрать по кол входов выходов и с++ реализует все невозможные хотелки. и выкинуть тот овен. это просто совет, чтоб потом опять не пришлось переделывать через время. Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 8 жовтня 2024 Автор Поділитись Опубліковано: 8 жовтня 2024 25 хвилин тому, smartdom сказав: подобрать по кол входов выходов Варіанти хоть запропонуйте )) Посилання на коментар Поділитися на інших сайтах More sharing options...
k-master Опубліковано: 9 жовтня 2024 Поділитись Опубліковано: 9 жовтня 2024 12 годин тому, TaurosRMK сказав: Варіанти хоть запропонуйте )) Та там вже на кроку обрати стм з вайфаем чи езернетом виникнуть складності. STM32 у кращому випадку має езернет (ну там ще додатково LAN8720 треба, але у есп езернет такий самий). І готових плат на али з стм та хочаб езернетом я не бачив (ну дев боарди за велики грощі не рахуємо). Хоча в принципі езернет на STM32 працює: 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
smartdom Опубліковано: 9 жовтня 2024 Поділитись Опубліковано: 9 жовтня 2024 17 часов назад, TaurosRMK сказал: Варіанти хоть запропонуйте )) находите в ютуб уроки понравившиеся и покупаете как в уроках для ознакомления. а дальше хоть с сенсорными панелями. Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 9 жовтня 2024 Автор Поділитись Опубліковано: 9 жовтня 2024 3 години тому, smartdom сказав: покупаете как в уроках для ознакомления. а дальше хоть с сенсорными панелями. А щось готове, ну там аналогові/дискретні входи/виходи, в корпусі на дін рейку, поставив, дроти підключив і готово? Якщо це конструктор, то трохи не підходить, бо знову треба щось нове вивчати і тд. Цікавлять саме готові рішення, без необхідності щось крутити і паяти. Посилання на коментар Поділитися на інших сайтах More sharing options...
smartdom Опубліковано: 9 жовтня 2024 Поділитись Опубліковано: 9 жовтня 2024 2 часа назад, TaurosRMK сказал: А щось готове, ну там аналогові/дискретні входи/виходи, в корпусі на дін рейку, поставив, дроти підключив і готово? Якщо це конструктор, то трохи не підходить, бо знову треба щось нове вивчати і тд. Цікавлять саме готові рішення, без необхідності щось крутити і паяти. я не встречал. это как ардуины, только проф. Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 19 листопада 2024 Автор Поділитись Опубліковано: 19 листопада 2024 Що не так з автоматизацією? Зробив, перевіряю, а вона спрацьовує навіть якщо якась з умов не виконується? В даному випадку Fan Supply вимкнено і RPM відповідно = 0. Чи при ручному запуску автоматизація буде спрацьовувати в будь якому випадку? Посилання на коментар Поділитися на інших сайтах More sharing options...
shneider_vova Опубліковано: 19 листопада 2024 Поділитись Опубліковано: 19 листопада 2024 49 хвилин тому, TaurosRMK сказав: Чи при ручному запуску автоматизація буде спрацьовувати в будь якому випадку? здається, так 2 Посилання на коментар Поділитися на інших сайтах More sharing options...
volomoto Опубліковано: 19 листопада 2024 Поділитись Опубліковано: 19 листопада 2024 6 годин тому, TaurosRMK сказав: Чи при ручному запуску автоматизація буде спрацьовувати в будь якому випадку? Так. При ручному запуску безумовно відпрацьовує секція Actions (Тоді виконати). 2 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 23 листопада 2024 Автор Поділитись Опубліковано: 23 листопада 2024 Який підхід чи принцип створення автоматизацій (в даному випадку в НА) найбільш правильний/зручний/кращий/логічний? Створювати окремі автоматизації зі своїми тригерами/умовами, чи краще спочатку робити якісь невеликі кусочки, які можуть десь повторюватися, а на їх основі вже робити більш ширші автоматизації? І тут зразу наступне питання, конструктор автоматизацій в НА дозволяє робити будь які автоматизації, чи все ж таки є щось таке, що в ньому не можна зробити і прийдеться кодом писати? Чи може зразу з коду починати, заодно трохи практики буде? Просто не знайомий ще з цим всім і в цілому який підхід має бути, щоб потім десь на середині роботи не виявилося що треба все переробляти, бо щось працює не так як треба ))) Посилання на коментар Поділитися на інших сайтах More sharing options...
volomoto Опубліковано: 27 листопада 2024 Поділитись Опубліковано: 27 листопада 2024 23.11.2024 в 20:38, TaurosRMK сказав: Створювати окремі автоматизації зі своїми тригерами/умовами, чи краще спочатку робити якісь невеликі кусочки, які можуть десь повторюватися, а на їх основі вже робити більш ширші автоматизації? Краще всі функціональні блоки виносити в скрипти, а автоматизаціями просто ці скрипти запускати, передаючи туди потрібні аргументи. 23.11.2024 в 20:38, TaurosRMK сказав: І тут зразу наступне питання, конструктор автоматизацій в НА дозволяє робити будь які автоматизації, чи все ж таки є щось таке, що в ньому не можна зробити і прийдеться кодом писати? Чи може зразу з коду починати, заодно трохи практики буде? Робота зі змінними тільки через ямл. 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
ЯД Опубліковано: 30 листопада 2024 Поділитись Опубліковано: 30 листопада 2024 (змінено) . Змінено 30 листопада 2024 користувачем ЯД 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 26 грудня 2024 Автор Поділитись Опубліковано: 26 грудня 2024 Вирішив попробувати з ESP32 передавати дані через Modbus на головний пристрій, тобто зробити пристрій на ESP32 як slave. На практиці це може пригодитися якщо є якийсь DIY пристрій на базі ESP32 і потрібно передати дані по Modbus на Master пристрій. Прошивка ESPHome, код скопійований з документації, але там трохи заплутаний приклад, тому методом тику вийшло ось так. Може хтось поправить, якщо щось не правильно. Для тесту взяв ESP32 C3 Super Mini, модуль TTL to RS-485 MAX485 і датчик DS18B20. Відповідно ESP32 зчитує дані з датчика і відправляє їх на Master пристрій, чи точніше Master пристрій їх зчитує (не знаю як воно правильно працює). Дані по Modbus передаються в цілих числах, тому показання датчика множаться на 10, щоб при даних з датчика 21.7°C на виході отримувати значення 217, а не округлення до 22. Тут не знаю чи це так нормально, чи щось потрібно змінити, щоб результат відправлявся з крапкою. На Master пристрої їх потрібно помножити на 0.1, щоб отримати 21.7°C. На комп'ютері підключився через Modbus Poll, все ок, дані отримую. uart: - id: uart_modbus_server baud_rate: 115200 tx_pin: 21 rx_pin: 20 stop_bits: 1 modbus: - uart_id: uart_modbus_server id: modbus_server role: server modbus_controller: - modbus_id: modbus_server address: 0x3 # Slave ID server_registers: - address: 2 value_type: S_DWORD_R read_lambda: |- return id(ds18b20_rs485).state; one_wire: - platform: gpio pin: GPIO2 # 0xc60119373c9a4328 sensor: - platform: dallas_temp address: 0xc60119373c9a4328 id: ds18b20_rs485 name: temperature update_interval: 1s accuracy_decimals: 3 filters: - multiply: 10 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 26 грудня 2024 Автор Поділитись Опубліковано: 26 грудня 2024 Як то кажуть, не пройшло і пів року, нарешті почав робити автоматизацю ПВУ 🤣 Але тим не менше, початок покладено. Роблю це вперше, тому паралельно вивчаю. Вирішив по можливості писати все в коді на ESP32 (прошивка ESPHome), щоб контролер працював незалежно від сервера НА. Попередньо не бачу що там будуть якісь складні розрахунки і тд, в більшості лише логічні операції, з чим контролер на ESP32 має без проблем справлятися. Якщо щось піде не так, то ніколи не пізно перенести все в НА. Ось кусок з того, що можна сказати готове. Здається все написано правильно, але може гуру бачать якісь нюанси, щось не правильно або не логічно зроблено, або щось потрібно додати щоб працювало більш коректно? Я ще не перевіряв чи взагалі працює 😄 Що тут відбувається. Автоматизація нагрівача вуличного повітря (для постнагріву буду аналогічна). По-перше, нагрівачі (переднагрів і постнагрів) можуть працювати тільки за умови що працює приточний вентилятор і має оберти які забезпечують швидкість повітря не менше 1.5 м/с (рекомендація виробника). В моєму випадку це ~95 м³/год для 150 мм діаметру при 750-775 RPM. Записав не менше 700 RPM, думаю не страшно. Якщо умова не виконується, то нагрівачі зразу переходять в стан "Вимкнено". Також є ще додаткові умови при яких нагрівач переходить в стан "Вимкнено". Можна в ручному режимі вимкнути, або ж по спрацюванню термореле, або по датчку, якщо зафіксується занадто висока температура. Запускаєтсья автоматизація по датчику температури витяжного повітря на виході з теплообмінника. Якщо температура падає нижче 5°C на час більше 3 хв, то запускається автоматизація, якщо температура піднімаєтсья вище 5.5°C на час більше 30 хв, то автоматизація вимикає нагрівач і обезточує його. Нагрів керується PID регулятором через твердотіле реле 4-20 mA. Коефіцієнти підібралися автоматично в режимі "Автотюнінг". # Режим роботи нагрівачів # Переднагрів - platform: template id: preheater_mode name: "PreHeater Mode" options: - "Auto" - "Disable" initial_option: "Auto" restore_value: true optimistic: true # Прапорець - нагрів дозволено - platform: template name: "Heating Allowed" id: heating_allowed condition: and: - switch.is_on: do_1 - fan.is_on: supply_fan - sensor.in_range: id: supply_fan_rpm above: 700 # Переднагрів - platform: template name: "PreHeater Automation" id: preheater_automation condition: and: - lambda: 'return id(preheater_mode).state == "Auto";' - binary_sensor.is_on: heating_allowed - binary_sensor.is_off: alert_heater1_ts - binary_sensor.is_off: alert_overheating_heater1 on_press: then: - if: condition: for: time: 3min condition: sensor.in_range: id: sht30_eha_temp below: 5 then: - switch.turn_on: heater1_relay - delay: 3s - climate.control: id: pid_preheater mode: HEAT else: - if: condition: for: time: 30min condition: sensor.in_range: id: sht30_eha_temp abowe: 5.5 then: - climate.control: id: pid_preheater mode: "OFF" - delay: 3s - switch.turn_off: heater1_relay on_release: then: - climate.control: id: pid_preheater mode: "OFF" - delay: 3s - switch.turn_off: heater1_relay # PID - PreHeater # Регулятор нагрівача №1 - platform: pid name: "PID PreHeater" id: pid_preheater sensor: sht30_oda_temp default_target_temperature: 1°C heat_output: preheater_power visual: min_temperature: -5 max_temperature: 10 temperature_step: 0.1 control_parameters: kp: 0.20034 ki: 0.00072 kd: 13.92368 deadband_parameters: threshold_high: 0.25°C threshold_low: -0.25°C Я тут що попробував, якщо задати правильно запит, то MS Copilot навіть пропонує якісь автоматизації ))) Може він і напише все що треба 🤣 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 26 грудня 2024 Автор Поділитись Опубліковано: 26 грудня 2024 Ох блін, і чому не звернувся за допомогою раніше )))) Сидів пару днів розбирався як написати простий код, а тут за декілька хвилин готовий результат 🤣 Це про сенсори швидкості повітря, в темі про вентиляцію. sensor: - platform: dht pin: D2 temperature: name: "Air Temperature" id: air_temperature humidity: name: "Air Humidity" id: air_humidity update_interval: 60s - platform: adc pin: A0 name: "Pressure Difference Sensor" id: pressure_difference unit_of_measurement: "Pa" accuracy_decimals: 2 filters: - multiply: 100.0 # Коефіцієнт для перетворення значень сенсора interval: - interval: 30s then: - lambda: |- float T = id(air_temperature).state + 273.15; // Температура в Кельвінах float RH = id(air_humidity).state / 100.0; // Відносна вологість у долях float P = 101325.0; // Атмосферний тиск в Па (можна налаштувати) // Обчислення тиску насиченої пари при температурі T (у Па) float e_s = 610.78 * exp(T * 17.27 / (T + 237.3)); // Обчислення парціального тиску водяної пари float e = RH * e_s; // Обчислення парціального тиску сухого повітря float p_d = P - e; // Обчислення густини повітря (кг/м³) float R_d = 287.05; float R_v = 461.5; float rho = (p_d / (R_d * T)) + (e / (R_v * T)); float delta_p = id(pressure_difference).state; // Перепад тиску в Па float air_speed = sqrt((2 * delta_p) / rho); // Швидкість повітря в м/с // Розрахунок об'ємного потоку через канал діаметром 150 мм (0.15 м) float diameter = 0.15; // Діаметр каналу в метрах float area = 3.14159 * pow((diameter / 2), 2); // Площа перетину каналу в м² float volumetric_flow_rate = air_speed * area; // Об'ємний потік в м³/с // Об'ємний потік за годину в м³/год float volumetric_flow_rate_per_hour = volumetric_flow_rate * 3600; ESP_LOGI("custom", "Air Temperature: %.2f °C", id(air_temperature).state); ESP_LOGI("custom", "Air Humidity: %.2f %%", id(air_humidity).state); ESP_LOGI("custom", "Air Density: %.3f kg/m³", rho); ESP_LOGI("custom", "Air Speed: %.2f m/s", air_speed); ESP_LOGI("custom", "Volumetric Flow Rate: %.2f m³/s", volumetric_flow_rate); ESP_LOGI("custom", "Volumetric Flow Rate per Hour: %.2f m³/h", volumetric_flow_rate_per_hour); 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 30 грудня 2024 Автор Поділитись Опубліковано: 30 грудня 2024 (змінено) Спільними зусиллями з AI процес зрушив з місця 😂 Пермикач "Запуск системи", перевірив, наче працює справно. При включенні запускається система. Спочатку відкриваються дві заслінки (час відкриття 75 сек), потім запускається витяжний вентилятор і перевіряються умови чи потрібен прогрів теплообмінника. Оскільки ПВУ на холодному горищі і хоть трохи утеплена, але це все рівно не спасає від остивання температури в ПВУ і повітроводах. Тому при температурі на вулиці близькій до 0С і нижче краще деякий час прогріти ТО витяжним повітрям. Після цього вмикається приточний вентилятор, відмічаєтсья прапорець що система запущена і додатково надсилається повідомлення на мобільний додаток НА. При вимкненні ситуація зворотня, тільки з перевіркою інших умов. Якщо в момент виключення працюють нагрівачі (хоча б один), то приточний вентилятор вимикається з затримкою 2 хв, щоб продути ТЕНи, попередньо PID регулятори вимикаються. Далі нагрівачі обезточуються, заслонки закриваються і надсилаються повідомлення в додаток що система вимкнена. switch: - platform: template name: "Start MVHR" id: start_mvhr optimistic: true #restore_mode: ALWAYS_OFF turn_on_action: - switch.turn_on: do_1 # Приточна заслонка і вентилятор - switch.turn_on: do_2 # Витяжна заслонка і вентилятор - lambda: |- ESP_LOGI("MVHR", "Opening the dampers"); - switch.turn_on: do_3 # Індикатор роботи - delay: 75s # Затримка відкриття заслонок - lambda: |- ESP_LOGI("MVHR", "Dampers are open"); - fan.turn_on: id: exhaust_fan - lambda: |- // Збереження поточної швидкості витяжного вентилятора id(current_exhaust_speed) = id(exhaust_fan).speed; ESP_LOGI("MVHR", "Current exhaust fan speed saved: %f", id(current_exhaust_speed)); - delay: 5s - delay: !lambda |- float exhaust_temp = id(sht30_eta_temp).state; int delay_time = 0; id(exhaust_warmup_speed) = id(current_exhaust_speed); // Початкова швидкість - поточна швидкість if (exhaust_temp < 17.0) { delay_time = 6; // 6 хвилин id(exhaust_warmup_speed) = 60; // Швидкість встановлюється на 60 ESP_LOGI("MVHR", "Exhaust temperature < 17.0°C, delay for 6 minutes, setting speed to 60"); } else if (exhaust_temp >= 17.0 && exhaust_temp <= 19.0) { delay_time = 3; // 3 хвилини id(exhaust_warmup_speed) = 60; // Швидкість встановлюється на 60 ESP_LOGI("MVHR", "Exhaust temperature between 17.0°C and 19.0°C, delay for 3 minutes, setting speed to 60"); } else { ESP_LOGI("MVHR", "Exhaust temperature > 19.0°C, using current speed: %f", id(exhaust_warmup_speed)); } auto call = id(exhaust_fan).turn_on(); call.set_speed(id(exhaust_warmup_speed)); call.perform(); return delay_time * 60000; // Конвертуємо хвилини в мілісекунди - lambda: |- // Повернення швидкості витяжного вентилятора до поточної, якщо була затримка на прогрів if (id(exhaust_warmup_speed) != id(current_exhaust_speed)) { auto call = id(exhaust_fan).turn_on(); call.set_speed(id(current_exhaust_speed)); call.perform(); ESP_LOGI("MVHR", "Exhaust fan speed restored to %f", id(current_exhaust_speed)); } - fan.turn_on: id: supply_fan - lambda: |- // Збереження поточної швидкості приточного вентилятора id(current_supply_speed) = id(supply_fan).speed; ESP_LOGI("MVHR", "Current supply fan speed saved: %f", id(current_supply_speed)); - binary_sensor.template.publish: id: system_is_running state: ON - lambda: |- ESP_LOGI("MVHR", "System is running"); - homeassistant.action: action: notify.mobile_app_xiaomi_14t data: message: "The MVHR system has been started." title: "MVHR System Running" turn_off_action: - fan.turn_off: id: exhaust_fan - delay: !lambda |- bool heater1_active = id(pid_preheater).mode == CLIMATE_MODE_HEAT; bool heater2_active = id(pid_postheater).mode == CLIMATE_MODE_HEAT; int delay_time = 0; if (heater1_active || heater2_active) { delay_time = 2; // 2 хвилини ESP_LOGI("MVHR", "Blowing the heaters for 2 minutes"); } // Встановлення PID регуляторів на OFF auto call_preheater = id(pid_preheater).make_call(); call_preheater.set_mode("OFF"); call_preheater.perform(); auto call_postheater = id(pid_postheater).make_call(); call_postheater.set_mode("OFF"); call_postheater.perform(); return delay_time * 60000; // Конвертуємо хвилини в мілісекунди - delay: 3s - switch.turn_off: id: heater1_relay - switch.turn_off: id: heater2_relay - fan.turn_off: id: supply_fan - lambda: |- ESP_LOGI("MVHR", "Closing the dampers"); - switch.turn_off: do_2 # Витяжна заслонка і вентилятор - switch.turn_off: do_1 # Приточна заслонка і вентилятор - delay: 75s # Затримка закриття заслонок - lambda: |- ESP_LOGI("MVHR", "Dampers are closed"); - switch.turn_off: do_3 # Індикатор роботи - binary_sensor.template.publish: id: system_is_running state: 'OFF' - lambda: |- ESP_LOGI("MVHR", "System is stopped"); - homeassistant.action: action: notify.mobile_app_xiaomi_14t data: message: "The MVHR system has been stopped." title: "MVHR System Stopped" AI генерує трохи не правильний код, але якщо задавати більше уточнюючих питань і правильно формулювати умови, то виходить майже те що треба. Залишається щось підправити під себе і готово. Змінено 30 грудня 2024 користувачем TaurosRMK Посилання на коментар Поділитися на інших сайтах More sharing options...
Рекомендовані повідомлення
Створіть акаунт або увійдіть у нього для коментування
Ви маєте бути користувачем, щоб залишити коментар
Створити акаунт
Зареєструйтеся для отримання акаунта. Це просто!
Зареєструвати акаунтУвійти
Вже зареєстровані? Увійдіть тут.
Увійти зараз