AutoAC improved with controlled fan speed option and protection of manual changes

This commit is contained in:
2026-07-12 23:43:56 +02:00
parent 57efbc273f
commit 59eef91edd
@@ -34,22 +34,62 @@ blueprint:
filter:
- domain: climate
fan_ctrl:
name: Auto AC controls fan speed
description: Allow Auto AC to set fan speed accordingly to difference between actual and target temperature
default: false
selector:
boolean: {}
override_duration:
name: Manual Override Duration
description: Hours to pause automatic control if a manual change is detected
default: 1
selector:
number:
min: 1
max: 24
step: 0.5
unit_of_measurement: hours
mode: restart
variables:
target_AC: !input climate_target
target_temp: !input temp_threshold
target_hist: !input temp_hist
fan_control: !input fan_ctrl
override_hours: !input override_duration
triggers:
# Trigger when the room temperature changes
- trigger: state
entity_id: !input climate_target
attribute: current_temperature
id: temp_change
# Trigger instantly when someone manually changes the AC mode
- trigger: state
entity_id: !input climate_target
id: state_change
conditions: []
conditions:
# 1. Verifica di sicurezza sullo stato dell'entità
- condition: template
value_template: "{{ trigger.to_state is not none }}"
# 2. Se l'automazione sta già eseguendo il "delay" di override, ignora i cambi di temperatura
- condition: template
value_template: >-
{{ not (this.attributes.current == 1 and trigger.id == 'temp_change') }}
actions:
- choose:
# DETECT MANUAL OVERRIDE: Triggered by state change, but context shows it was NOT the automation itself
- conditions:
- condition: template
value_template: "{{ trigger.id == 'state_change' and trigger.to_state.context.id != context.id }}"
sequence:
- delay:
hours: "{{ override_hours | int(2) }}"
# CONDITION 1: Turn AC ON & Adjust Fan
- conditions:
- condition: template
@@ -74,25 +114,40 @@ actions:
entity_id: !input climate_target
data:
hvac_mode: cool
- action: climate.set_fan_mode
- action: climate.set_swing_mode
target:
entity_id: !input climate_target
data:
fan_mode: >-
{% set curr_temp = state_attr(target_AC, 'current_temperature') | float(0) -%}
{% set targ_temp = state_attr(target_AC, 'temperature') | float(0) -%}
{% set diff_temp = curr_temp - targ_temp -%}
{% if diff_temp >= 4.0 -%}
5
{% elif diff_temp >= 3.5 and diff_temp < 4.0 -%}
4
{% elif diff_temp >= 3.0 and diff_temp < 3.5 -%}
3
{% elif diff_temp >= 1.5 and diff_temp < 3.0 -%}
2
{% else -%}
Auto
{% endif %}
swing_mode: Horizontal
- if:
- condition: template
value_template: "{{ fan_control }}"
then:
- action: climate.set_fan_mode
target:
entity_id: !input climate_target
data:
fan_mode: >-
{% set curr_temp = state_attr(target_AC, 'current_temperature') | float(0) -%}
{% set targ_temp = state_attr(target_AC, 'temperature') | float(0) -%}
{% set diff_temp = curr_temp - targ_temp -%}
{% if diff_temp >= 4.0 -%}
5
{% elif diff_temp >= 3.5 and diff_temp < 4.0 -%}
4
{% elif diff_temp >= 3.0 and diff_temp < 3.5 -%}
3
{% elif diff_temp >= 1.5 and diff_temp < 3.0 -%}
2
{% else -%}
Auto
{% endif %}
else:
- action: climate.set_fan_mode
target:
entity_id: !input climate_target
data:
fan_mode: Auto
# CONDITION 2: Turn AC OFF (Hysteresis)
- conditions:
@@ -103,6 +158,16 @@ actions:
entity_id: !input climate_target
state: "cool"
sequence:
- action: climate.set_swing_mode
target:
entity_id: !input climate_target
data:
swing_mode: Horizontal
- action: climate.set_fan_mode
target:
entity_id: !input climate_target
data:
fan_mode: Auto
- action: climate.turn_off
target:
entity_id: !input climate_target