TaurosRMK Опубліковано: 8 лютого Поділитись Опубліковано: 8 лютого 7 годин тому, yur43 сказав: веб сторінка трохи перегружена інформацією. А якби ще датчиків з десяток? Ви кожного дня переглядаєте графіки цих датчиків чи що? )) Один раз налаштувати, а далі про це все забудеться, хоть там 20-50-100 датчиків, головне щоб все злагоджено працювало в автоматичному режимі. Якось так 🤣 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 23 лютого Автор Поділитись Опубліковано: 23 лютого (змінено) Все працює бездоганно. Якщо зацікавило кого і бажає повторити, код ESP з останніми змінами Прихований текст esphome: name: hrv-kc868-a4 friendly_name: HRV_kc868-a4 on_boot: then: - number.set: id: dac_min value: 0.11 - number.set: id: dac_max value: 0.35 - number.set: id: dac_bal value: -0.024 - output.set_level: id: set_level level: 0.4 esp32: board: esp32dev framework: type: arduino logger: level: error #web_server: # port: 80 api: encryption: key: "***" services: - service: scd4x_calibrate_co2_value variables: co2_ppm: int then: - scd4x.perform_forced_calibration: value: !lambda 'return co2_ppm;' id: scd40 - service: scd4x_factory_reset then: - scd4x.factory_reset: scd40 #mqtt: # broker: 192.168.1.*** # topic_prefix: HRV # username: mqtt_homeassistant #password: mqtt_homeassistant # birth_message: # will_message: #reboot_timeout: 24h ota: password: "***" wifi: ssid: "********" password: "********" reboot_timeout: 5h ap: ssid: "Hrv-Kc868-A4 Fallback Hotspot" password: "********" captive_portal: rtttl: output: rtttl_out id: my_rtttl number: - name: dac_min id: dac_min platform: template min_value: 0 max_value: 0.3 step: 0.01 mode: box optimistic: true entity_category: config - name: dac_max id: dac_max platform: template min_value: 0 max_value: 0.6 step: 0.01 mode: box optimistic: true entity_category: config - name: dac_bal id: dac_bal platform: template min_value: -0.1 max_value: 0.1 step: 0.001 mode: box optimistic: true entity_category: config - name: dac_power platform: template id: dac_power min_value: 0 max_value: 1 step: 0.001 mode: box optimistic: true entity_category: diagnostic - name: PID_power platform: template id: PID_power min_value: 0 max_value: 1 step: 0.001 mode: box optimistic: true entity_category: diagnostic climate: - platform: bang_bang name: "defrost" visual: min_temperature: 1 max_temperature: 6 temperature_step: 0.1 sensor: temp1 default_target_temperature_low: 2 °C default_target_temperature_high: 3 °C heat_action: - switch.turn_on: defrost_on idle_action: - switch.turn_off: defrost_off - switch.turn_off: defrost_on cool_action: - switch.turn_on: defrost_off - platform: pid name: "PID_CO2" id: PID_CO2 visual: min_temperature: 500 max_temperature: 1500 temperature_step: 10 sensor: CO2 default_target_temperature: 800 cool_output: PID_level control_parameters: kp: 0.0033 ki: 0 kd: 0 output_averaging_samples: 1 # smooth the output over 5 samples derivative_averaging_samples: 1 # smooth the derivative value over 10 samples i2c: sda: GPIO19 scl: GPIO21 scan: false id: bus_a tca9548a: - address: 0x70 id: multiplex0 i2c_id: bus_a channels: - bus_id: multiplex0channel0 channel: 0 - bus_id: multiplex0channel1 channel: 1 - bus_id: multiplex0channel2 channel: 2 - bus_id: multiplex0channel3 channel: 3 - bus_id: multiplex0channel4 channel: 4 - bus_id: multiplex0channel5 channel: 5 - bus_id: multiplex0channel6 channel: 6 - bus_id: multiplex0channel7 channel: 7 dallas: - pin: GPIO13 id: hub_1 update_interval: 60s switch: - platform: template name: "defrost" id: defrost_on turn_on_action: - switch.turn_off: defrost_off - switch.turn_off: relay_2 - repeat: count: 25 then: - switch.turn_on: relay_1 - delay: 1s - switch.turn_off: relay_1 - delay: 1min - platform: template name: "defrost_off" id: defrost_off turn_on_action: - switch.turn_off: defrost_on - switch.turn_off: relay_1 - repeat: count: 27 then: - switch.turn_on: relay_2 - delay: 1s - switch.turn_off: relay_2 - delay: 1min - platform: template name: "bypass" id: bypass turn_on_action: - switch.turn_off: relay_2 - switch.turn_off: relay_4 - switch.turn_on: relay_1 - switch.turn_on: relay_3 - delay: 1min - switch.turn_off: relay_1 - switch.turn_off: relay_3 turn_off_action: - switch.turn_off: relay_1 - switch.turn_off: relay_3 - switch.turn_on: relay_2 - switch.turn_on: relay_4 - delay: 1min - switch.turn_off: relay_2 - switch.turn_off: relay_4 - platform: gpio name: "bypass_in_on" id: relay_1 pin: 2 inverted: false - platform: gpio name: "bypass_in_off" id: relay_2 pin: 15 inverted: false - platform: gpio name: "bypass_out_on" id: relay_3 pin: 5 inverted: false - platform: gpio name: "bypass_out_off" id: relay_4 pin: 4 inverted: false #binary_sensor: # - platform: gpio # name: "input1" # pin: # number: 36 # inverted: true # - platform: gpio # name: "input2" # pin: # number: 39 # inverted: true sensor: # - platform: homeassistant # id: CO2_Qingping # entity_id: sensor.qingping_air_monitor_lite_co2_carbon_dioxide # - platform: homeassistant # id: CO2_Tuya # entity_id: sensor.co2_co2 # - platform: kalman_combinator # name: "co2_1" # id: co2_1 # unit_of_measurement: ppm #process_std_dev: 0.005 # sources: # - source: CO2 # error: 1.0 # - source: CO2_Qingping # error: 1.0 # - source: CO2_Tuya # error: 1.0 - platform: pulse_counter pin: 14 name: "fan1" filters: - multiply: 0.5 update_interval: 30s accuracy_decimals: 0 unit_of_measurement: "RPM" on_value_range: - below: 100 then: - delay: 2min - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' - platform: pulse_counter pin: 27 name: "fan2" filters: - multiply: 0.5 update_interval: 30s accuracy_decimals: 0 unit_of_measurement: "RPM" on_value_range: - below: 100 then: - delay: 2min - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' - platform: dallas dallas_id: hub_1 address: 0xb401204ec799da28 name: "temp_outR" accuracy_decimals: 1 id: temp1 - platform: bme280_i2c i2c_id: multiplex0channel1 address: 0x76 temperature: name: "BME280 Temp_room" oversampling: 16x pressure: name: "BME280 Press_room" humidity: name: "BME280 Humid_room" update_interval: 1min - platform: bme280_i2c i2c_id: multiplex0channel7 address: 0x76 temperature: name: "BME280 Temp_ino" oversampling: 16x pressure: name: "BME280 Press_ino" humidity: name: "BME280 Humid_ino" update_interval: 1min - platform: bme280_i2c i2c_id: multiplex0channel6 address: 0x76 temperature: name: "BME280 Temp_in" oversampling: 16x pressure: name: "BME280 Press_in" id: bme_pressure humidity: name: "BME280 Humid_in" id: Humid_in update_interval: 1min - platform: scd4x i2c_id: multiplex0channel6 co2: name: "CO2" id: CO2 filters: - exponential_moving_average: alpha: 0.12 send_every: 1 automatic_self_calibration: false altitude_compensation: 242m measurement_mode: low_power_periodic ambient_pressure_compensation_source: bme_pressure temperature_offset: 0 temperature: name: "scd40_Temperature" accuracy_decimals: 1 humidity: name: "scd40_Humidity" accuracy_decimals: 0 id: scd40 update_interval: 1min output: - platform: ledc pin: GPIO18 id: rtttl_out - platform: esp32_dac pin: GPIO26 id: dac_output1 inverted: false min_power: 0 max_power: 1 - platform: esp32_dac pin: GPIO25 id: dac_output2 inverted: false min_power: 0 max_power: 1 - platform: template type: float id: set_level write_action: - lambda: |- // зберегти значення, необовязково id(dac_power).publish_state(state); // розподілення балансу auto v1 = id(dac_min).state + (state * (1 + id(dac_bal).state) * 0.9); auto v2 = id(dac_min).state + (state * (1 - id(dac_bal).state) * 0.9); // вихід на ЦАПи id(dac_output1).set_level(v1); id(dac_output2).set_level(v2); - platform: template type: float id: PID_level write_action: - lambda: |- // встановити стан Fan if (id(fans).state) { // Fan is ON, do something here } else { // Fan is OFF, do something else here } // зберегти значення PID id(PID_power).publish_state(state); // якщо Fan вимкнено, то auto v = state * id(dac_max).state; if (!id(fans).state) { id(set_level).set_level(v); } fan: - platform: speed output: set_level name: "fan" id: fans on_turn_off: then: - output.set_level: id: set_level level: 0.15 on_turn_on: then: - delay: 30min - lambda: !lambda |- id(fans).turn_off(); за основу взята плата, яка мені обійшлася 13$ з доставкою. Сенсори придбані там же. Бачу надлишковість в ЦАП, не бачу сенсу в балансуванні, можна обійтись і одним ЦАПом. Також більшість датчиків по суті не використовується, досить було даласів по сторонам рекуператора і CSD40 , який в своєму складі має датчик вологості. Гарно зарекомендував P-регулятор по CO2 . Цікава ідея попередження обмерзанню частковим відкриванням приточного байпасу, але її так і не вдалося перевірити - морози скінчилися. В перспективі можливо додам диференційний датчик тиску, тоді можна буде побачити реальну ситуацію з балансом вентиляторів. Змінено 23 лютого користувачем yur43 3 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 12 березня Автор Поділитись Опубліковано: 12 березня (змінено) Додав ще датчик температури "вхід з вулиці" і термостат COOL для автоматичного увімкнення байпасу в літньому режимі, для охолодження. Логіка проста: по температурі вулиці нижче 22С термостат вмикається, вище 23С термостат вимикається. Далі вже термостат слідкує за температурою приміщення і поступово відкриває обидві заслонки байпасу. Щоб заслонки не смикало часто, введений параметр часової інерції, там для початку стоїть 100сек, можна збільшити під свої вимоги. Або перевести термостат в двоточковий з мертвою зоною. Ще треба буде пробувати то по жарі. Ці дії для літнього охолодження вуличним повітрям. Якщо вночі жара спаде менше 22С, то даний термостат почне підтримувати задану температуру в приміщенні. Якщо функція непотрібна - ставимо термостат на максимум, він і не спрацює. Прихований текст captive_portal: rtttl: output: rtttl_out id: my_rtttl number: - name: dac_min id: dac_min platform: template min_value: 0 max_value: 0.3 step: 0.01 mode: box optimistic: true entity_category: config - name: dac_max id: dac_max platform: template min_value: 0 max_value: 0.6 step: 0.01 mode: box optimistic: true entity_category: config - name: dac_bal id: dac_bal platform: template min_value: -0.1 max_value: 0.1 step: 0.001 mode: box optimistic: true entity_category: config - name: dac_power platform: template id: dac_power min_value: 0 max_value: 1 step: 0.001 mode: box optimistic: true entity_category: diagnostic - name: PID_power platform: template id: PID_power min_value: 0 max_value: 1 step: 0.001 mode: box optimistic: true entity_category: diagnostic climate: - platform: thermostat name: "COOL" id: COOL visual: min_temperature: 20 max_temperature: 26 temperature_step: 0.1 sensor: temp_in min_cooling_off_time: 100s min_cooling_run_time: 100s min_idle_time: 100s cool_action: - switch.turn_on: cool_on idle_action: - switch.turn_off: cool_off - platform: bang_bang name: "defrost" visual: min_temperature: 1 max_temperature: 6 temperature_step: 0.1 sensor: temp1 default_target_temperature_low: 2 °C default_target_temperature_high: 3 °C heat_action: - switch.turn_on: defrost_on idle_action: - switch.turn_off: defrost_off - switch.turn_off: defrost_on cool_action: - switch.turn_on: defrost_off - platform: pid name: "PID_CO2" id: PID_CO2 visual: min_temperature: 500 max_temperature: 1500 temperature_step: 10 sensor: CO2 default_target_temperature: 850 cool_output: PID_level control_parameters: kp: 0.003 ki: 0 kd: 3 output_averaging_samples: 1 # smooth the output over 5 samples derivative_averaging_samples: 1 # smooth the derivative value over 10 samples i2c: sda: GPIO19 scl: GPIO21 scan: false id: bus_a tca9548a: - address: 0x70 id: multiplex0 i2c_id: bus_a channels: - bus_id: multiplex0channel0 channel: 0 - bus_id: multiplex0channel1 channel: 1 - bus_id: multiplex0channel2 channel: 2 - bus_id: multiplex0channel3 channel: 3 - bus_id: multiplex0channel4 channel: 4 - bus_id: multiplex0channel5 channel: 5 - bus_id: multiplex0channel6 channel: 6 - bus_id: multiplex0channel7 channel: 7 dallas: - pin: GPIO13 id: hub_1 update_interval: 60s switch: - platform: template name: "cool_on" id: cool_on turn_on_action: - switch.turn_off: cool_off - switch.turn_off: relay_2 - switch.turn_off: relay_4 - repeat: count: 25 then: - switch.turn_on: relay_1 - switch.turn_on: relay_3 - delay: 1s - switch.turn_off: relay_1 - switch.turn_off: relay_3 - delay: 1min - platform: template name: "cool_off" id: cool_off turn_on_action: - switch.turn_off: cool_on - switch.turn_off: relay_1 - switch.turn_off: relay_3 - repeat: count: 27 then: - switch.turn_on: relay_2 - switch.turn_on: relay_4 - delay: 1s - switch.turn_off: relay_2 - switch.turn_off: relay_4 - delay: 1min - platform: template name: "defrost" id: defrost_on turn_on_action: - switch.turn_off: defrost_off - switch.turn_off: relay_2 - repeat: count: 25 then: - switch.turn_on: relay_1 - delay: 1s - switch.turn_off: relay_1 - delay: 1min - platform: template name: "defrost_off" id: defrost_off turn_on_action: - switch.turn_off: defrost_on - switch.turn_off: relay_1 - repeat: count: 27 then: - switch.turn_on: relay_2 - delay: 1s - switch.turn_off: relay_2 - delay: 1min - platform: template name: "bypass" id: bypass turn_on_action: - switch.turn_off: relay_2 - switch.turn_off: relay_4 - switch.turn_on: relay_1 - switch.turn_on: relay_3 - delay: 1min - switch.turn_off: relay_1 - switch.turn_off: relay_3 turn_off_action: - switch.turn_off: relay_1 - switch.turn_off: relay_3 - switch.turn_on: relay_2 - switch.turn_on: relay_4 - delay: 1min - switch.turn_off: relay_2 - switch.turn_off: relay_4 - platform: gpio name: "bypass_in_on" id: relay_1 pin: 2 inverted: false - platform: gpio name: "bypass_in_off" id: relay_2 pin: 15 inverted: false - platform: gpio name: "bypass_out_on" id: relay_3 pin: 5 inverted: false - platform: gpio name: "bypass_out_off" id: relay_4 pin: 4 inverted: false #binary_sensor: # - platform: gpio # name: "input1" # pin: # number: 36 # inverted: true # - platform: gpio # name: "input2" # pin: # number: 39 # inverted: true sensor: # - platform: homeassistant # id: CO2_Qingping # entity_id: sensor.qingping_air_monitor_lite_co2_carbon_dioxide # - platform: homeassistant # id: CO2_Tuya # entity_id: sensor.co2_co2 # - platform: kalman_combinator # name: "co2_1" # id: co2_1 # unit_of_measurement: ppm #process_std_dev: 0.005 # sources: # - source: CO2 # error: 1.0 # - source: CO2_Qingping # error: 1.0 # - source: CO2_Tuya # error: 1.0 - platform: pulse_counter pin: 14 name: "fan1" filters: - multiply: 0.5 update_interval: 30s accuracy_decimals: 0 unit_of_measurement: "RPM" on_value_range: - below: 100 then: - delay: 2min - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' - platform: pulse_counter pin: 27 name: "fan2" filters: - multiply: 0.5 update_interval: 30s accuracy_decimals: 0 unit_of_measurement: "RPM" on_value_range: - below: 100 then: - delay: 2min - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' - platform: dallas dallas_id: hub_1 address: 0xb401204ec799da28 name: "temp_outR" accuracy_decimals: 1 id: temp1 - platform: dallas dallas_id: hub_1 address: 0xce0000034b298828 name: "temp_out" accuracy_decimals: 1 id: temp_out on_value_range: - below: 22 then: climate.control: id: COOL mode: "COOL" - above: 23 then: climate.control: id: COOL mode: "OFF" - platform: bme280_i2c i2c_id: multiplex0channel1 address: 0x76 temperature: name: "BME280 Temp_room" oversampling: 16x pressure: name: "BME280 Press_room" humidity: name: "BME280 Humid_room" update_interval: 1min - platform: bme280_i2c i2c_id: multiplex0channel7 address: 0x76 temperature: name: "BME280 Temp_ino" oversampling: 16x pressure: name: "BME280 Press_ino" humidity: name: "BME280 Humid_ino" update_interval: 1min - platform: bme280_i2c i2c_id: multiplex0channel6 address: 0x76 temperature: name: "BME280 Temp_in" id: temp_in oversampling: 16x pressure: name: "BME280 Press_in" id: bme_pressure humidity: name: "BME280 Humid_in" id: Humid_in update_interval: 1min - platform: scd4x i2c_id: multiplex0channel6 co2: name: "CO2" id: CO2 filters: - exponential_moving_average: alpha: 0.12 send_every: 1 automatic_self_calibration: false altitude_compensation: 242m measurement_mode: low_power_periodic ambient_pressure_compensation_source: bme_pressure temperature_offset: 0 # temperature: # name: "scd40_Temperature" # accuracy_decimals: 1 # humidity: # name: "scd40_Humidity" # accuracy_decimals: 0 id: scd40 update_interval: 3min output: - platform: ledc pin: GPIO18 id: rtttl_out - platform: esp32_dac pin: GPIO26 id: dac_output1 inverted: false min_power: 0 max_power: 1 - platform: esp32_dac pin: GPIO25 id: dac_output2 inverted: false min_power: 0 max_power: 1 - platform: template type: float id: set_level write_action: - lambda: |- // зберегти значення, необовязково id(dac_power).publish_state(state); // розподілення балансу auto v1 = id(dac_min).state + (state * (1 + id(dac_bal).state) * 0.9); auto v2 = id(dac_min).state + (state * (1 - id(dac_bal).state) * 0.9); // вихід на ЦАПи id(dac_output1).set_level(v1); id(dac_output2).set_level(v2); - platform: template type: float id: PID_level write_action: - lambda: |- // встановити стан Fan if (id(fans).state) { // Fan is ON, do something here } else { // Fan is OFF, do something else here } // зберегти значення PID id(PID_power).publish_state(state); // якщо Fan вимкнено, то auto v = state * id(dac_max).state; if (!id(fans).state) { id(set_level).set_level(v); } fan: - platform: speed output: set_level name: "fan" id: fans on_turn_off: then: - output.set_level: id: set_level level: 0.15 on_turn_on: then: - delay: 30min - lambda: !lambda |- id(fans).turn_off(); Змінено 12 березня користувачем yur43 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 15 березня Автор Поділитись Опубліковано: 15 березня досліди з охолодженням байпасом 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 24 березня Автор Поділитись Опубліковано: 24 березня fb.watch/q-SR-aZpkt/ є хороші фільтри на ПВУ, кажуть - вічні 2 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 31 березня Автор Поділитись Опубліковано: 31 березня (змінено) дорекуперувались. Прийшло літо, як далі жити .. Змінено 1 квітня користувачем yur43 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 10 квітня Автор Поділитись Опубліковано: 10 квітня Прийшло тепло, спробував охолодження увімкненням байпасу, діє. Але на вулиці раптово стало холодно і в будинок дує 15С, відчутно прохолодно. Мабуть треба вбудованим термостатом "охолодження" задавати певну комфортну температуру охолодження, якою керувати зовні, з НА. Коротше алгоритм охолодження ще непродуманий. Посилання на коментар Поділитися на інших сайтах More sharing options...
volomoto Опубліковано: 10 квітня Поділитись Опубліковано: 10 квітня 2 години тому, yur43 сказав: Коротше алгоритм охолодження ще непродуманий. Кондиціонер? В нас тут сонячна погода було і вище 20 градусів вдень, від чого мій будинок встиг добре нагрітись, бо сонце ще відносно низько і добре потрапляє у вікна. Я вирішив включити кондиціонери на охолодження, бо байпасу нема, а відкривати вікна не хочу, бо там шум, пил і комахи. За два дні кондиціонери спожили аж 5 кВт•год електрики, згенерованої сонцем. 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 11 квітня Автор Поділитись Опубліковано: 11 квітня (змінено) 7 годин тому, volomoto сказав: Кондиціонер? Кондиціонер, це крайня міра. Воно неінверторне, дує як дурне. Вмикається коли день + всі вийшли з будинку, або вручну. Як хто зайшов - вимикається. Змінено 11 квітня користувачем yur43 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
volomoto Опубліковано: 11 квітня Поділитись Опубліковано: 11 квітня 4 години тому, yur43 сказав: Кондиціонер, це крайня міра. Воно неінверторне, дує як дурне. Вмикається коли день + всі вийшли з будинку, або вручну. Як хто зайшов - вимикається. Якщо старт-стоп, то я б дійсно заморочувався з байпасом, якщо найближчим часом заміна кондицінера не планується. Теоретично PID контроллера, який працює по заданій внутрішній температурі, мало б бути достатньо. Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 11 квітня Автор Поділитись Опубліковано: 11 квітня 1 година тому, volomoto сказав: Теоретично PID контроллера, який працює по заданій внутрішній температурі, мало б бути достатньо. Ні. Писав вище, що дує холодним з байпаса. Треба робити подачу 19-20С, тоді воно відчувається приємно. Тобто алгоритм буде вмикати-вимикати вбудований термостат подачі по двом факторам: температура вулиці має бути нижче 20С, температура в будинку має бути вище 23С. А термостат вже забезпечує подачу в комфортному діапазоні 19-20С. Посилання на коментар Поділитися на інших сайтах More sharing options...
volomoto Опубліковано: 11 квітня Поділитись Опубліковано: 11 квітня 11 хвилин тому, yur43 сказав: Ні. Писав вище, що дує холодним з байпаса. Треба робити подачу 19-20С, тоді воно відчувається приємно. Можливо я не так зрозумів, але байпас можна відкривати поступово і досягати змішування з повітрям з теплообмінника. Під заданою внутрішньою температурою я мав на увазі температуру подачі, а не температуру в приміщенні. 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 11 квітня Автор Поділитись Опубліковано: 11 квітня на колінці зліпив тимчасову автоматизацію Прихований текст alias: охолодження байпас description: "" trigger: - platform: time_pattern minutes: " 30" condition: [] action: - if: - type: is_temperature condition: device device_id: b4238fde6f5225f3782b6d06244fbdb9 entity_id: 6c66b82cb3c9ab101a960be3ec8380fe domain: sensor below: 20 - type: is_temperature condition: device device_id: b4238fde6f5225f3782b6d06244fbdb9 entity_id: 71deb9fc90b703fe4339b98c4ca30dd7 domain: sensor above: 23 then: - device_id: b4238fde6f5225f3782b6d06244fbdb9 domain: climate entity_id: a73079a029791bc033278042f56bd8e2 type: set_hvac_mode hvac_mode: heat_cool else: - device_id: b4238fde6f5225f3782b6d06244fbdb9 domain: climate entity_id: a73079a029791bc033278042f56bd8e2 type: set_hvac_mode hvac_mode: "off" - type: turn_on device_id: b4238fde6f5225f3782b6d06244fbdb9 entity_id: de9fa09f1dda1d034c013c2053e4d252 domain: switch - type: turn_on device_id: b4238fde6f5225f3782b6d06244fbdb9 entity_id: 605091adbe12ca7006a21bb4aab12862 domain: switch - delay: hours: 0 minutes: 1 seconds: 0 milliseconds: 0 - type: turn_off device_id: b4238fde6f5225f3782b6d06244fbdb9 entity_id: de9fa09f1dda1d034c013c2053e4d252 domain: switch - type: turn_off device_id: b4238fde6f5225f3782b6d06244fbdb9 entity_id: 605091adbe12ca7006a21bb4aab12862 domain: switch mode: single термостат двоточковий, щоб менше смикало шторки вночі тест Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 11 квітня Автор Поділитись Опубліковано: 11 квітня температура вулиці знизилась, автоматизація запустила режим охолодження, байпас увійшов в коридор комфорта = дує прохолодна подача, але не зовсім холодна. Якщо буде потрібно, байпас підрулює потрібну температуру подачі. Коли зникне потреба в охолодженні, увімкнеться рекуперація. 2 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 13 квітня Автор Поділитись Опубліковано: 13 квітня заданий коридор тримає чітко, можна переносити алгоритм з НА в ESP. Вийде повністю автономний модуль керування вентиляцією, зможе працювати без інтернету. 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 3 травня Автор Поділитись Опубліковано: 3 травня Остання версія прошивки, виправлені помилки автоохолодження. Прихований текст esphome: name: hrv-kc868-a4 friendly_name: HRV_kc868-a4 on_boot: then: - number.set: id: dac_min value: 0.11 - number.set: id: dac_max value: 0.35 - number.set: id: dac_bal value: -0.024 - output.set_level: id: set_level level: 0.4 esp32: board: esp32dev framework: type: arduino logger: level: DEBUG web_server: port: 80 api: encryption: key: "***************************" services: - service: scd4x_calibrate_co2_value variables: co2_ppm: int then: - scd4x.perform_forced_calibration: value: !lambda 'return co2_ppm;' id: scd40 - service: scd4x_factory_reset then: - scd4x.factory_reset: scd40 ota: password: "*****************" wifi: ssid: "**********" password: "********" reboot_timeout: 5h ap: ssid: "Hrv-Kc868-A4 Fallback Hotspot" password: "////////**" rtttl: output: rtttl_out id: my_rtttl number: - name: dac_min id: dac_min platform: template min_value: 0 max_value: 0.3 step: 0.01 mode: box optimistic: true entity_category: config - name: dac_max id: dac_max platform: template min_value: 0 max_value: 0.6 step: 0.01 mode: box optimistic: true entity_category: config - name: dac_bal id: dac_bal platform: template min_value: -0.1 max_value: 0.1 step: 0.001 mode: box optimistic: true entity_category: config - name: dac_power platform: template id: dac_power min_value: 0 max_value: 1 step: 0.001 mode: box optimistic: true entity_category: diagnostic - name: PID_power platform: template id: PID_power min_value: 0 max_value: 1 step: 0.001 mode: box optimistic: true entity_category: diagnostic climate: - platform: bang_bang name: "cool_wind" id: cool_wind visual: min_temperature: 10 max_temperature: 30 temperature_step: 0.1 sensor: temp_ino default_target_temperature_low: 18.2 °C default_target_temperature_high: 19.5 °C cool_action: - switch.turn_on: cool_on heat_action: - switch.turn_on: cool_off idle_action: - switch.turn_off: cool_on - switch.turn_off: cool_off - platform: bang_bang name: "defrost" visual: min_temperature: 1 max_temperature: 6 temperature_step: 0.1 sensor: temp_outR default_target_temperature_low: 2 °C default_target_temperature_high: 3 °C heat_action: - switch.turn_on: defrost_on idle_action: - switch.turn_off: defrost_off - switch.turn_off: defrost_on cool_action: - switch.turn_on: defrost_off - platform: pid name: "PID_CO2" id: PID_CO2 visual: min_temperature: 500 max_temperature: 1500 temperature_step: 10 sensor: CO2 default_target_temperature: 850 cool_output: PID_level control_parameters: kp: 0.003 ki: 0 kd: 0 i2c: sda: GPIO19 scl: GPIO21 scan: false id: bus_a tca9548a: - address: 0x70 id: multiplex0 i2c_id: bus_a channels: - bus_id: multiplex0channel0 channel: 0 - bus_id: multiplex0channel1 channel: 1 - bus_id: multiplex0channel2 channel: 2 - bus_id: multiplex0channel3 channel: 3 - bus_id: multiplex0channel4 channel: 4 - bus_id: multiplex0channel5 channel: 5 - bus_id: multiplex0channel6 channel: 6 - bus_id: multiplex0channel7 channel: 7 dallas: - pin: GPIO13 switch: - platform: template name: "wind" id: wind turn_on_action: - lambda: |- { auto call = id(cool_wind).make_call(); call.set_mode("HEAT_COOL"); call.perform(); } # - climate.control: # id: cool_wind # mode: HEAT_COOL turn_off_action: - lambda: |- { auto call = id(cool_wind).make_call(); call.set_mode("OFF"); call.perform(); } - switch.turn_off: cool_on - switch.turn_off: cool_off - switch.turn_on: relay_2 - switch.turn_on: relay_4 - delay: 50s - switch.turn_off: relay_2 - switch.turn_off: relay_4 - platform: template name: "cool_on" id: cool_on turn_on_action: - switch.turn_off: cool_off - switch.turn_off: relay_2 - switch.turn_off: relay_4 - repeat: count: 50 then: - switch.turn_on: relay_1 - switch.turn_on: relay_3 - delay: 1s - switch.turn_off: relay_1 - switch.turn_off: relay_3 - delay: 250s - platform: template name: "cool_off" id: cool_off turn_on_action: - switch.turn_off: cool_on - switch.turn_off: relay_1 - switch.turn_off: relay_3 - repeat: count: 60 then: - switch.turn_on: relay_2 - switch.turn_on: relay_4 - delay: 1s - switch.turn_off: relay_2 - switch.turn_off: relay_4 - delay: 250s - platform: template name: "defrost_on" id: defrost_on turn_on_action: - switch.turn_off: defrost_off - switch.turn_off: relay_2 - repeat: count: 40 then: - switch.turn_on: relay_1 - delay: 1s - switch.turn_off: relay_1 - delay: 200s - platform: template name: "defrost_off" id: defrost_off turn_on_action: - switch.turn_off: defrost_on - switch.turn_off: relay_1 - repeat: count: 45 then: - switch.turn_on: relay_2 - delay: 1s - switch.turn_off: relay_2 - delay: 200s - platform: gpio name: "bypass_in_on" id: relay_1 pin: 2 on_turn_on: - delay: 60s - switch.turn_off: relay_1 - platform: gpio name: "bypass_in_off" id: relay_2 pin: 15 on_turn_on: - delay: 60s - switch.turn_off: relay_2 - platform: gpio name: "bypass_out_on" id: relay_3 pin: 5 on_turn_on: - delay: 60s - switch.turn_off: relay_3 - platform: gpio name: "bypass_out_off" id: relay_4 pin: 4 on_turn_on: - delay: 60s - switch.turn_off: relay_4 sensor: - platform: pulse_counter pin: 14 name: "fan1" filters: - multiply: 0.5 update_interval: 30s accuracy_decimals: 0 unit_of_measurement: "RPM" on_value_range: - below: 300 then: - delay: 2min - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' - platform: pulse_counter pin: 27 name: "fan2" filters: - multiply: 0.5 update_interval: 30s accuracy_decimals: 0 unit_of_measurement: "RPM" on_value_range: - below: 300 then: - delay: 2min - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' - platform: dallas address: 0xb401204ec799da28 name: "temp_outR" accuracy_decimals: 2 id: temp_outR - platform: dallas address: 0xce0000034b298828 name: "temp_out" accuracy_decimals: 2 id: temp_out - platform: bme280_i2c i2c_id: multiplex0channel1 address: 0x76 temperature: name: "BME280 Temp_room" accuracy_decimals: 2 humidity: name: "BME280 Humid_room" accuracy_decimals: 1 update_interval: 3min - platform: bme280_i2c i2c_id: multiplex0channel7 address: 0x76 temperature: name: "BME280 Temp_ino" id: temp_ino accuracy_decimals: 2 humidity: name: "BME280 Humid_ino" accuracy_decimals: 1 update_interval: 30s - platform: bme280_i2c i2c_id: multiplex0channel6 address: 0x76 temperature: name: "BME280 Temp_in" id: temp_in accuracy_decimals: 2 humidity: name: "BME280 Humid_in" id: Humid_in accuracy_decimals: 1 update_interval: 1min - platform: scd4x i2c_id: multiplex0channel6 co2: name: "CO2" id: CO2 # filters: # - exponential_moving_average: # alpha: 0.12 # send_every: 1 automatic_self_calibration: false altitude_compensation: 242m measurement_mode: low_power_periodic id: scd40 output: - platform: ledc pin: GPIO18 id: rtttl_out - platform: esp32_dac pin: GPIO26 id: dac_output1 - platform: esp32_dac pin: GPIO25 id: dac_output2 - platform: template type: float id: set_level write_action: - lambda: |- id(dac_power).publish_state(state); auto v1 = id(dac_min).state + (state * (1 + id(dac_bal).state) * 0.9); auto v2 = id(dac_min).state + (state * (1 - id(dac_bal).state) * 0.9); id(dac_output1).set_level(v1); id(dac_output2).set_level(v2); - platform: template type: float id: PID_level write_action: - lambda: |- if (id(fans).state) { // Fan is ON, do something here } else { // Fan is OFF, do something else here } id(PID_power).publish_state(state); auto v = state * id(dac_max).state; if (!id(fans).state) { id(set_level).set_level(v); } fan: - platform: speed output: set_level name: "fan" id: fans on_turn_off: then: - output.set_level: id: set_level level: 0.15 on_turn_on: then: - delay: 60min - lambda: !lambda |- id(fans).turn_off(); time: - platform: sntp on_time: - minutes: /60 then: - lambda: |- if (id(temp_in).state > 23 && id(temp_out).state < 22) { id(wind).turn_on(); } else { id(wind).turn_off(); } 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 4 травня Поділитись Опубліковано: 4 травня Я так розумію у вас ніяких нагрівачів немає? Рекуператор справляється, холодним не дує? Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 4 травня Автор Поділитись Опубліковано: 4 травня (змінено) 1 година тому, TaurosRMK сказав: Я так розумію у вас ніяких нагрівачів немає? Рекуператор справляється, холодним не дує? без нагрівача. Вбудований алгоритм попередження обмерзанню зниженням ефективності рекуперації. Теоретично має дути прохолодним, на практиці ще не було такого. Змінено 4 травня користувачем yur43 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 4 травня Автор Поділитись Опубліковано: 4 травня (змінено) по схожому принципу працює і охолодження влітку. Коли повітря вулиці охололо - відкривається байпас, коли вже дуже холодно - працює підмішування рекуперованого повітря, зранку байпас знову повністю відкритий, коли на вулиці більше 22С - байпас повністю закривається. В будинку добре, подача прохолодна але комфортна. Вечорами тепло з під перекриття витягується, на день поки вистачає без примусового охолодження перекриття гео. Змінено 4 травня користувачем yur43 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 4 травня Поділитись Опубліковано: 4 травня 40 хвилин тому, yur43 сказав: без нагрівача. Вбудований алгоритм попередження обмерзанню зниженням ефективності рекуперації Я мав на увазі звичайну роботу, а не захист від обмерзання. Тобто при звичайній роботі температура повітря на подачі комфортна, не прохолодно? Як часто вмикався захист від обмерзання при мінусових температурах нижче -5С? В теорії він мав би дуже часто вмикатися, тому що то вже критичні температури вхідного повітря. Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 4 травня Автор Поділитись Опубліковано: 4 травня 51 хвилину тому, TaurosRMK сказав: Я мав на увазі звичайну роботу, а не захист від обмерзання. Тобто при звичайній роботі температура повітря на подачі комфортна, не прохолодно? Як часто вмикався захист від обмерзання при мінусових температурах нижче -5С? В теорії він мав би дуже часто вмикатися, тому що то вже критичні температури вхідного повітря. 1. при звичайній роботі подача дуже близько до Т приміщення, пару градусів. 2. Захист не вмикався жодного разу, з січня наче. Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 4 травня Поділитись Опубліковано: 4 травня 18 хвилин тому, yur43 сказав: 1. при звичайній роботі подача дуже близько до Т приміщення, пару градусів. А це скільки, 21-22С чи менше 20С? У вас повітроводи розведені по теплому контуру? 19 хвилин тому, yur43 сказав: 2. Захист не вмикався жодного разу, з січня наче. А тоді були морози чи постійно було вище нуля? Цікаві практичні показники майже однакових теплообмінників/ПВУ, одні пишуть що без переднагріву не обійтися, інші що постнагрів при низьких температурах обов'язково потрібен, а у декого без нагрівачів все працює 😁 Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 4 травня Автор Поділитись Опубліковано: 4 травня (змінено) 1 година тому, TaurosRMK сказав: А це скільки, 21-22С чи менше 20С? У вас повітроводи розведені по теплому контуру? А тоді були морози чи постійно було вище нуля? Цікаві практичні показники майже однакових теплообмінників/ПВУ, одні пишуть що без переднагріву не обійтися, інші що постнагрів при низьких температурах обов'язково потрібен, а у декого без нагрівачів все працює 😁 29,02,2024р 02,03,2024р Змінено 4 травня користувачем yur43 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
TaurosRMK Опубліковано: 4 травня Поділитись Опубліковано: 4 травня 6 годин тому, yur43 сказав: 29,02,2024р 02,03,2024р А в мене таке саме питання, яке ви в моїй темі задавали 😁 Вихлоп хтось підігріває чи як? Чи може витягуєтсья більше, ніж подається? Калькулятор рахує що там мало б бути десь 5-6С, а у вас 10-11С. Прихований текст Посилання на коментар Поділитися на інших сайтах More sharing options...
yur43 Опубліковано: 4 травня Автор Поділитись Опубліковано: 4 травня 6 хвилин тому, TaurosRMK сказав: А в мене таке саме питання, яке ви в моїй темі задавали 😁 Вихлоп хтось підігріває чи як? Чи може витягуєтсья більше, ніж подається? Калькулятор рахує що там мало б бути десь 5-6С, а у вас 10-11С. Приховати вміст датчики цифрові, покази розходились не більше 0,05С, але швидкодія різна. І швидкість потоків приток-витяжка може бути різна. Я цим не переймаюсь поки. Згодом планую додати дифманометр приміщення-вулиця і ним балансувати потоки. Рахувати формули не планую. Параметри вологості і тиску взагалі відключив. 1 Посилання на коментар Поділитися на інших сайтах More sharing options...
Рекомендовані повідомлення
Створіть акаунт або увійдіть у нього для коментування
Ви маєте бути користувачем, щоб залишити коментар
Створити акаунт
Зареєструйтеся для отримання акаунта. Це просто!
Зареєструвати акаунтУвійти
Вже зареєстровані? Увійдіть тут.
Увійти зараз