Toilet fan automotion blueprint 화장실 환풍기 자동화 블루프린트

This blueprint description is displayed in Korean.

구성요소는

fan, light, humidity sensor * 2

총 4개가 필요로 합니다.

  • 화장실 등 켜면 환풍기를 켭니다

  • 트리거 최소 습도
    화장실 습도가 설정습도 이상 일때 작동합니다.

  • 환풍기 켜기 습도차
    두 센서의 습도 차이가 설정 보다 크면 환풍기를 켭니다.
    등을 켜지 않아도 작동합니다.

  • 환풍기 끄기 습도차
    두 센서의 습도 차이가 설정 보다 작으면 환풍기를 끕니다.

  • 환풍기 최대 가동 시간
    화장실 등을 끈 후 환풍기 가동 최대 시간을 설정 합니다.
    0으로 설정시 비활성화.

  • 환풍기 최소 가동 시간 (환기용)
    화장실 등을 끈 후 환풍기 가동 최소 시간을 설정 합니다.
    0으로 설정시 비활성화

  • 환풍기 최소 가동 조건 시간
    화장실 등이 켜진 후 설정시간 이상 경과시 최소 가동 시간을 사용합니다.
    0으로 설정시 비활성화

  • Turn on the fan when the lights are on

  • trigger minimum humidity
    It operates when the humidity is higher than the set humidity.

  • Humidity difference with ventilation fan on
    Turn on the fan if the humidity difference between the two sensors is greater than the setting.
    It works even without turning on the lights.

  • Turn off the fan Humidity difference
    Turn off the fan when the humidity difference between the two sensors is less than the setting.

  • Ventilator maximum run time
    Set the maximum fan operating time after turning off the lights.
    Disabled when set to 0.

  • Ventilator minimum operating time (for ventilation)
    Set the minimum ventilation fan operation time after turning off the lights.
    Disable when set to 0

  • Ventilator minimum operating condition time
    When the set time or more elapses after the lamp is turned on, the minimum operation time is used.
    Disable when set to 0

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

blueprint:
  name: "화장실 환풍기 자동 2"
  description: "v2.3"
  domain: automation
  # source_url: ""

  input:
    toilet_fan:
      name: "화장실 환풍기"
      description: ""
      selector:
        entity:
          domain: fan
    toilet_light:
      name: "화장실 등"
      description: ""
      selector:
        entity:
          domain: light
    humidity_in:
      name: "화장실 습도 센서"
      description: "화장실 안쪽 센서"
      selector:
        entity:
          domain: sensor
          device_class: humidity
    humidity_out:
      name: "화장실 비교 습도 센서"
      description: "화장실 바깥쪽 센서"
      selector:
        entity:
          domain: sensor
          device_class: humidity
    trigger_over_humidity:
      name: "환풍기 자동 켜기 끄기 기준 습도"
      description: "화장실 습도가 설정습도 이상 일때 자동으로 환풍기가 켜집니다. (and 켜기 습도차 만족시)\n
      화장실 습도가 설정습도 이하 일때 자동으로 환풍기가 꺼집니다. (and 끄기 습도차 만족시)\n
      환풍기 최대 가동 시간은 1이상 설정시 자동켜기는 비활성화 됩니다."
      default: 70
      selector:
        number:
          min: 50
          max: 90
          unit_of_measurement: "%"
    fan_on_humidity:
      name: "환풍기 켜기 습도차"
      description: "두 센서의 습도 차이가 설정 보다 크면 환풍기를 켭니다."
      default: 30
      selector:
        number:
          min: 5
          max: 50
          unit_of_measurement: "%"
    fan_off_humidity:
      name: "환풍기 끄기 습도차"
      description: "두 센서의 습도 차이가 설정 보다 작으면 환풍기를 끕니다."
      default: 20
      selector:
        number:
          min: 5
          max: 50
          unit_of_measurement: "%"
    fan_off_time_max:
      name: "환풍기 최대 가동 시간"
      description: "등을 끈 후 환풍기 가동 최대 시간을 설정 합니다.\n0으로 설정시 비활성화.\n1이상 설정시 자동켜기 비활성화"
      default: 0
      selector:
        number:
          min: 0
          max: 120
          unit_of_measurement: "분"
    fan_off_time_min:
      name: "환풍기 최소 가동 시간 (환기용)"
      description: "등을 끈 후 환풍기 가동 최소 시간을 설정 합니다.\n0으로 설정시 비활성화"
      default: 0
      selector:
        number:
          min: 0
          max: 60
          unit_of_measurement: "분"
    fan_off_time_min_if:
      name: "환풍기 최소 가동 시간 조건"
      description: "등이 켜진 후 설정시간 이상 경과시 최소 가동 시간을 사용합니다.\n0으로 설정시 비활성화"
      default: 0
      selector:
        number:
          min: 0
          max: 60
          unit_of_measurement: "분"
    fan_auto_on_time_after:
      name: "환풍기 자동 켜기 시작 시간"
      description: "부터\n
        끝 시간 보다 클 수 없습니다.\n
        자동 켜기 조건이 만족할때 유효합니다."
      default: "8:00:00"
      selector:
        time:
    fan_auto_on_time_before:
      name: "환풍기 자동 켜기 끝 시간"
      description: "까지\n
        시작 시간 보다 작을 수 없습니다.\n
        자동 켜기 조건이 만족할때 유효합니다."
      default: "21:00:00"
      selector:
        time:

trigger:
  - platform: state # 등 켜면
    entity_id: !input toilet_light
    to: "on"
    id: lightOn
  - platform: state # 등 끄면
    entity_id: !input toilet_light
    to: "off"
    id: lightOff
  - platform: state # 등 끄고 최소 시간 지나면
    entity_id: !input toilet_light
    to: "off"
    for:
      minutes: !input fan_off_time_min
    id: offTimeMin
  - platform: state # 등 끄고 최대 시간 지마면
    entity_id: !input toilet_light
    to: "off"
    for:
      minutes: !input fan_off_time_max
    id: offTimeMax
  - platform: state # 습도변화
    entity_id: !input humidity_in
    id: changHumidtyIn
  - platform: state # 습도변화
    entity_id: !input humidity_out
    id: changHumidtyOut
  - platform: time_pattern # 1분 마다
    minutes: /1
    id: timePattern

variables:
  toilet_fan: !input toilet_fan
  toilet_light: !input toilet_light
  humidity_in: !input humidity_in
  humidity_out: !input humidity_out
  fan_on_humidity: !input fan_on_humidity
  fan_off_humidity: !input fan_off_humidity
  trigger_over_humidity: !input trigger_over_humidity
  fan_off_time_max: !input fan_off_time_max
  fan_off_time_min: !input fan_off_time_min
  fan_off_time_min_if: !input fan_off_time_min_if
  fan_auto_on_time_after: !input fan_auto_on_time_after
  fan_auto_on_time_before: !input fan_auto_on_time_before

action:
  - choose:
      # 등 켜면, 환풍기 켜기 (팬이 꺼져있을때)
      - conditions:
          - condition: trigger
            id: lightOn
          - condition: state
            entity_id: !input toilet_fan
            state: "off"
        sequence:
          - service: fan.turn_on
            target:
              entity_id: !input toilet_fan

      # 등 끄면, 환풍기 끄기 (팬이 켜져있고, 최소습도 이하 거나 외부습도차보다 낮을때, 최소시간0)
      - conditions:
          - condition: trigger
            id: lightOff
          - condition: state
            entity_id: !input toilet_fan
            state: "on"
          - condition: template # 최소습도 이하 거나 외부습도차보다 낮을때
            value_template: "{{ float(states[humidity_in].state) < trigger_over_humidity or float(states[humidity_in].state) - float(states[humidity_out].state) <= fan_off_humidity }}"
          - condition: template # 최소가동시간이0 이거나, 팬 최소가동 조건 시간 보나 작을때
            value_template: "{{ fan_off_time_min == 0 or ( now().timestamp() - trigger.from_state.last_changed.timestamp() ) / 60 < fan_off_time_min_if }}"
        sequence:
          - service: fan.turn_off
            target:
              entity_id: !input toilet_fan

      # 등 끄고 환풍기 최소 가동 시간 경과시, 환풍기 끄기 (팬이 켜져있고, 최소시간이 0보다 크면 )
      - conditions:
          - condition: trigger
            id: offTimeMin
          - condition: state
            entity_id: !input toilet_fan
            state: "on"
          - condition: template
            value_template: "{{ float(states[humidity_in].state) < trigger_over_humidity or float(states[humidity_in].state) - float(states[humidity_out].state) <= fan_off_humidity }}"
          - condition: template
            value_template: "{{ fan_off_time_min > 0 }}"
        sequence:
          - service: fan.turn_off
            target:
              entity_id: !input toilet_fan

      # 등끄고 환풍기 최대 가동 시간 경과시, 환풍기 끄기 (팬이 켜져있고, 최대시간이 0보다 크면 )
      - conditions:
          - condition: trigger
            id: offTimeMax
          - condition: state
            entity_id: !input toilet_fan
            state: "on"
          - condition: template
            value_template: "{{ fan_off_time_max > 0 }}"
        sequence:
          - service: fan.turn_off
            target:
              entity_id: !input toilet_fan

      # 1분 마다, 습도변화
      - conditions:
          - condition: trigger
            id:
              - timePattern
              - changHumidtyIn
              - changHumidtyOut
        sequence:
          - choose:
              # 환풍기 켜기 (팬이 꺼져있고, 최소습도 이상이고 외부습도보다 높고)
              - conditions:
                  - condition: state
                    entity_id: !input toilet_fan
                    state: "off"
                  - condition: template
                    value_template: "{{ float(states[humidity_in].state) >= trigger_over_humidity }}"
                  - condition: template
                    value_template: "{{ float(states[humidity_in].state) - float(states[humidity_out].state) >= fan_on_humidity }}"
                  - condition: template
                    value_template: "{{ fan_off_time_max == 0 }}"
                  - condition: template
                    value_template: "{{ today_at(fan_auto_on_time_after) <= now() and today_at(fan_auto_on_time_before) >= now() }}"
                sequence:
                  - service: fan.turn_on
                    target:
                      entity_id: !input toilet_fan

              # 환풍기 끄기 (팬이 켜져있고, 등이 꺼져있고, 최대가동시간이 만족이면)
              - conditions:
                  - condition: state
                    entity_id: !input toilet_fan
                    state: "on"
                  - condition: state
                    entity_id: !input toilet_light
                    state: "off"
                  - condition: template
                    value_template: "{{ fan_off_time_max > 0 and ( now().timestamp() - states[toilet_fan].last_changed.timestamp() ) / 60 >= fan_off_time_max }}"
                sequence:
                  - service: fan.turn_off
                    target:
                      entity_id: !input toilet_fan

              # 환풍기 끄기 (팬이 켜져있고, 등이 꺼져있고, 외부습도보다 낮고, 최소가동시간이 0일때 혹은 팬 켠시간이 조건 이하이면)
              - conditions:
                  - condition: state
                    entity_id: !input toilet_fan
                    state: "on"
                  - condition: state
                    entity_id: !input toilet_light
                    state: "off"
                  - condition: template
                    value_template: "{{ float(states[humidity_in].state) - float(states[humidity_out].state) <= fan_off_humidity }}"
                  - condition: template
                    value_template: "{{ fan_off_time_min == 0 or ( states[toilet_light].last_changed.timestamp() - states[toilet_fan].last_changed.timestamp() ) / 60 <= fan_off_time_min_if }}"
                sequence:
                  - service: fan.turn_off
                    target:
                      entity_id: !input toilet_fan

              # 환풍기 끄기 (팬이 켜져있고, 등이 꺼져있고, 외부습도보다 낮고, 최소가동시간 보다 더 가동되었을때 )
              - conditions:
                  - condition: state
                    entity_id: !input toilet_fan
                    state: "on"
                  - condition: state
                    entity_id: !input toilet_light
                    state: "off"
                  - condition: template
                    value_template: "{{ float(states[humidity_in].state) - float(states[humidity_out].state) <= fan_off_humidity }}"
                  - condition: template
                    value_template: "{{ ( now().timestamp() - states[toilet_light].last_changed.timestamp() ) / 60 >= fan_off_time_min }}"
                sequence:
                  - service: fan.turn_off
                    target:
                      entity_id: !input toilet_fan
            default: []
    default: []
mode: single

I was looking for something similar. can u do this in english?

Google translate is great! :slight_smile:
https://community.home-assistant.io/t/toilet-fan-automation-2/509979