Перейти до публікації
Пошук в
  • Додатково...
Шукати результати, які містять...
Шукати результати в...

ПВУ_DIY

yur43

Рекомендовані повідомлення

7 годин тому, yur43 сказав:

веб сторінка трохи перегружена інформацією. 

А якби ще датчиків з десяток?

Знімок екрана 2024-02-08 144520.png

Знімок екрана 2024-02-08 144532.png

Ви кожного дня переглядаєте графіки цих датчиків чи що? )) Один раз налаштувати, а далі про це все забудеться, хоть там 20-50-100 датчиків, головне щоб все злагоджено працювало в автоматичному режимі.

Якось так 🤣

image.png.d61ac0f6fa3f70cfdf12cae75f739faf.png

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

  • 2 тижні потому...

Все працює бездоганно. Якщо зацікавило кого і бажає повторити, код 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 .

Цікава ідея попередження обмерзанню частковим відкриванням приточного байпасу, але її так і не вдалося перевірити - морози скінчилися. 

В перспективі можливо додам диференційний  датчик тиску, тоді можна буде побачити реальну ситуацію з балансом вентиляторів.

Змінено користувачем yur43
  • Лайк 3
Посилання на коментар
Поділитися на інших сайтах

  • 3 тижні потому...

Додав ще датчик температури "вхід з вулиці" і термостат 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();

 

 

Змінено користувачем yur43
  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

  • 2 тижні потому...

дорекуперувались. Прийшло літо, як далі жити ..

Знімок екрана 2024-03-31 121803.png

Змінено користувачем yur43
  • Конфуз 1
Посилання на коментар
Поділитися на інших сайтах

  • 2 тижні потому...

Прийшло тепло, спробував охолодження увімкненням байпасу, діє. Але на вулиці раптово стало холодно і в будинок дує 15С, відчутно прохолодно.

Мабуть треба вбудованим термостатом "охолодження" задавати певну комфортну температуру охолодження, якою керувати зовні, з НА.

Коротше алгоритм охолодження ще непродуманий.

Посилання на коментар
Поділитися на інших сайтах

2 години тому, yur43 сказав:

Коротше алгоритм охолодження ще непродуманий.

Кондиціонер? :)

В нас тут сонячна погода було і вище 20 градусів вдень, від чого мій будинок встиг добре нагрітись, бо сонце ще відносно низько і добре потрапляє у вікна. Я вирішив включити кондиціонери на охолодження, бо байпасу нема, а відкривати вікна не хочу, бо там шум, пил і комахи. За два дні кондиціонери спожили аж 5 кВт•год електрики, згенерованої сонцем.

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

7 годин тому, volomoto сказав:

Кондиціонер? :)

Кондиціонер, це крайня міра. Воно неінверторне, дує як дурне. Вмикається коли день + всі вийшли з будинку, або вручну. Як хто зайшов - вимикається.

Змінено користувачем yur43
  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

4 години тому, yur43 сказав:

Кондиціонер, це крайня міра. Воно неінверторне, дує як дурне. Вмикається коли день + всі вийшли з будинку, або вручну. Як хто зайшов - вимикається.

Якщо старт-стоп, то я б дійсно заморочувався з байпасом, якщо найближчим часом заміна кондицінера не планується. Теоретично PID контроллера, який працює по заданій внутрішній температурі, мало б бути достатньо.

Посилання на коментар
Поділитися на інших сайтах

1 година тому, volomoto сказав:

Теоретично PID контроллера, який працює по заданій внутрішній температурі, мало б бути достатньо.

Ні. Писав вище, що дує холодним з байпаса. Треба робити подачу 19-20С, тоді воно відчувається приємно.

Тобто алгоритм буде вмикати-вимикати вбудований термостат подачі по двом факторам: температура вулиці має бути нижче 20С, температура в будинку має бути вище 23С. А термостат вже забезпечує подачу в комфортному діапазоні 19-20С.

Посилання на коментар
Поділитися на інших сайтах

11 хвилин тому, yur43 сказав:

Ні. Писав вище, що дує холодним з байпаса. Треба робити подачу 19-20С, тоді воно відчувається приємно.

Можливо я не так зрозумів, але байпас можна відкривати поступово і досягати змішування з повітрям з теплообмінника. Під заданою внутрішньою температурою я мав на увазі температуру подачі, а не температуру в приміщенні.

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

на колінці зліпив тимчасову автоматизацію

Прихований текст

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

термостат двоточковий, щоб менше смикало шторки

image.png.bab5872800a75b6af94d89a5c1cddf57.png

вночі тест

Посилання на коментар
Поділитися на інших сайтах

image.thumb.png.e161a7f10540fb5979b886f765ec8c16.pngimage.png.4fb00c82868ea8613c4c285751ad0e7f.png

температура вулиці знизилась, автоматизація запустила режим охолодження, байпас увійшов в коридор комфорта = дує прохолодна подача, але не зовсім холодна. Якщо буде потрібно, байпас підрулює потрібну температуру подачі. Коли зникне потреба в охолодженні, увімкнеться рекуперація.

  • Лайк 2
Посилання на коментар
Поділитися на інших сайтах

image.thumb.png.fbf0396c76975f177e91cf35ee1da8b6.png

заданий коридор тримає чітко, можна переносити алгоритм з НА в ESP. Вийде повністю автономний модуль керування вентиляцією, зможе працювати без інтернету.

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

Створіть акаунт або увійдіть у нього для коментування

Ви маєте бути користувачем, щоб залишити коментар

Створити акаунт

Зареєструйтеся для отримання акаунта. Це просто!

Зареєструвати акаунт

Увійти

Вже зареєстровані? Увійдіть тут.

Увійти зараз
×
×
  • Створити...