Honeywell T6 Pro - How to run HVAC fan for set duration?

I’m a new user to Home Assistant (and Z-Wave) but have recently setup both alongside a Honeywell T6 Pro thermostat after Google killed my old Nest thermostat. Everything is generally working and the thermostat is accessible in Home Assistant.

My goal is to enter or select a time period in minutes to run the HVAC fan, before setting it back to the “Circulate” setting.

I’ve stumbled through and created an automation which will run the fan, then delay for a time, and then switch back to circulate. This works, but isn’t ideal:

alias: HVAC - Fan 1 Hour
description: ""
triggers:
  - event_type: ""
    trigger: event
conditions: []
actions:
  - target:
      entity_id: climate.honeywell_t6_pro_thermostat
    data:
      fan_mode: Low
    action: climate.set_fan_mode
  - delay:
      hours: 1
      minutes: 0
      seconds: 0
      milliseconds: 0
  - target:
      entity_id: climate.honeywell_t6_pro_thermostat
    data:
      fan_mode: Circulation
    action: climate.set_fan_mode
mode: single

I’ve tried modifying examples from the docs and forums, and using AI to “help”, but cannot seem to get better solutions to work.

As an example, the following automation, helpers, and cards are based on a solution from the forums to use a time trigger, which I’ve tried to modify for my purpose but when triggering via the dashboard button or manually the fan does not run:

automation

alias: Furnace Fan Timer
description: >-
  Run fan on Low for user-defined hours, then return to Circulate
triggers:
  - event_type: script_started
    event_data:
      entity_id: script.fan_timer_start
    trigger: event
  - at: input_datetime.fan_run_end_time
    trigger: time
actions:
  - choose:
      - conditions: "{{ trigger.platform == 'event' and not is_fan_on_low }}"
        sequence:
          - target:
              entity_id: "{{ climate_entity }}"
            data:
              fan_mode: low
            action: climate.set_fan_mode
          - target:
              entity_id: input_datetime.fan_run_end_time
            data:
              timestamp: >-
                {{ (now() + timedelta(hours=duration_hours)).timestamp() | int
                }}
            action: input_datetime.set_datetime
      - conditions:
          - condition: template
            value_template: "{{ trigger.platform == 'time' and is_fan_on_low }}"
        sequence:
          - target:
              entity_id: "{{ climate_entity }}"
            data:
              fan_mode: circulate
            action: climate.set_fan_mode
    default: []
variables:
  climate_entity: climate.honeywell_t6_pro_thermostat
  duration_hours: "{{ states('input_number.fan_duration_hours') | float(default=1) }}"
  is_fan_on_low: "{{ state_attr(climate_entity, 'fan_mode') == 'low' }}"
mode: single

script

alias: Fan Timer Start
sequence:
  - target:
      entity_id: automation.furnace_fan_timer
    action: automation.trigger
mode: single
description: ""

dashboard card

type: entities
entities:
  - type: call-service
    name: Run Furnace Fan
    icon: mdi:fan
    service: script.turn_on
    target:
      entity_id: script.fan_timer_start
  - entity: input_number.fan_duration_hours
    name: Fan Duration (hours)

helpers

input_number.fan_duration_hours
input_datetime.fan_run_end_time

bskytiling,Hello
Welcome the the Home Assistant Forum.

I would suggest narrowing this down with a condition, otherwise these actions might be attempted on every event. That is many many…

Either way that doesn’t look right…

I would use a much simpler straight forward automation. You’ve overly complex here

Setting the Fan Mode may not turn on the Fan as the HVAC Mode would also need to be in Fan mode.

Do you think the first automation is the right direction, just using a delay? Is there anyway to make the delay configurable through a slider element or text box that you know of?

I tested a bit with my thermostat and it doesn’t actually have a fan mode for HVAC, its just Heat/Cool, Heat, Cool, Off. The fan control seems independent of these, and even if set to Off, I can enable the fan by setting fan mode to Low. Fan mode in this case just has Auto low, Low, Circulate as options.

Well in the end I found something that will work for me, although being very new to this I can’t say how good the quality of this solution is :laughing:

Helpers:

input_boolean.hvac_fan_active
input_number.hvac_fan_hours
input_datetime.hvac_fan_off_at
sensor.hvac_fan_countdown (Template)

Script to start HVAC fan:

alias: hvac_fan_start
sequence:
  - target:
      entity_id: input_boolean.hvac_fan_active
    action: input_boolean.turn_on
  - data:
      datetime: >-
        {{ (now() +
        timedelta(hours=states('input_number.hvac_fan_hours')|int(1))).strftime('%Y-%m-%d
        %H:%M:%S') }}
    target:
      entity_id: input_datetime.hvac_fan_off_at
    action: input_datetime.set_datetime
  - target:
      entity_id: climate.honeywell_t6_pro_thermostat
    data:
      fan_mode: Low
    action: climate.set_fan_mode

Script to stop HVAC fan:

alias: hvac_fan_stop
sequence:
  - target:
      entity_id: input_boolean.hvac_fan_active
    action: input_boolean.turn_off
  - data:
      datetime: "1970-01-01 00:00:00"
    target:
      entity_id: input_datetime.hvac_fan_off_at
    action: input_datetime.set_datetime
  - target:
      entity_id: climate.honeywell_t6_pro_thermostat
    data:
      fan_mode: Circulation
    action: climate.set_fan_mode

Dashboard:

type: vertical-stack
cards:
  - type: conditional
    conditions:
      - entity: input_boolean.hvac_fan_active
        state: "off"
    card:
      type: vertical-stack
      cards:
        - type: entities
          title: HVAC Fan Timer
          entities:
            - entity: input_number.hvac_fan_hours
              name: Duration
        - type: button
          name: Start
          tap_action:
            action: call-service
            service: script.hvac_fan_start
  - type: conditional
    conditions:
      - entity: input_boolean.hvac_fan_active
        state: "on"
    card:
      type: vertical-stack
      cards:
        - type: entities
          title: HVAC Fan Timer
          entities:
            - entity: sensor.hvac_fan_countdown
              name: Remaining
        - type: button
          name: Stop
          tap_action:
            action: call-service
            service: script.hvac_fan_stop

Automation:

alias: hvac_fan_auto_stop
triggers:
  - at: input_datetime.hvac_fan_off_at
    trigger: time
actions:
  - action: script.hvac_fan_stop

Altogether this gives me the ability to manually run the HVAC fan for 1-8 hours, display how long is left until it stops running, and the ability to stop it early if I need.