Files
fresh-home/automations/things/automatic_fan_speeds.yaml
2025-12-06 09:12:49 -05:00

298 lines
12 KiB
YAML

alias: Automatic Fan Speeds
id: automation_fan_speeds
mode: parallel
max: 4
triggers:
- trigger: homeassistant
event: start
id: start
- trigger: numeric_state
entity_id: sensor.girls_room_multisensor_air_temperature
id: girls_room_off
below: input_number.girls_room_fan_low_temp
- trigger: numeric_state
entity_id: sensor.girls_room_multisensor_air_temperature
id: girls_room_low
above: input_number.girls_room_fan_low_temp
below: input_number.girls_room_fan_medium_temp
- trigger: numeric_state
entity_id: sensor.girls_room_multisensor_air_temperature
id: girls_room_mid
above: input_number.girls_room_fan_medium_temp
below: input_number.girls_room_fan_high_temp
- trigger: numeric_state
entity_id: sensor.girls_room_multisensor_air_temperature
id: girls_room_high
above: input_number.girls_room_fan_high_temp
- trigger: numeric_state
entity_id: sensor.master_bedroom_multisensor_air_temperature
below: input_number.master_bedroom_fan_low_temp
id: mbr_off
- trigger: numeric_state
entity_id: sensor.master_bedroom_multisensor_air_temperature
above: input_number.master_bedroom_fan_low_temp
below: input_number.master_bedroom_fan_medium_temp
id: mbr_low
- trigger: numeric_state
entity_id: sensor.master_bedroom_multisensor_air_temperature
above: input_number.master_bedroom_fan_medium_temp
below: input_number.master_bedroom_fan_high_temp
id: mbr_med
- trigger: numeric_state
entity_id: sensor.master_bedroom_multisensor_air_temperature
above: input_number.master_bedroom_fan_high_temp
id: mbr_high
- trigger: state
entity_id: input_boolean.girls_room_occupied
- trigger: state
entity_id: input_boolean.bedroom_occupied
- trigger: state
entity_id: input_boolean.girls_room_asleep
- trigger: state
entity_id: input_boolean.master_bedroom_asleep
# Chose not to use conditions so fan speeds will be updated regardless of trigger
condition:
- alias: "Only turn the fans on if it's warm enough outside"
condition: template
value_template: "{{ (states('sensor.front_yard_thermostat_temperature') | float(default=0) > 60.0) or is_state('group.ceiling_fans','on') }}"
action:
- alias: "Calculate fan speeds"
variables:
girls_room_fan_speed: "{{((states('sensor.girls_room_multisensor_air_temperature') | float(default=0) - states('input_number.girls_room_fan_min_temp') | float(default=0))/(states('input_number.girls_room_fan_high_temp') | float(default=1) - states('input_number.girls_room_fan_min_temp') | float(default=0)) * 100)|int(default=0) }}"
master_bedroom_fan_speed: "{{((states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) - states('input_number.master_bedroom_fan_min_temp') | float(default=0))/(states('input_number.master_bedroom_fan_high_temp') | float(default=1) - states('input_number.master_bedroom_fan_min_temp') | float(default=0)) * 100)|int(default=0) }}"
# - action: logbook.log
# data_template:
# name: Automatic Fan Speeds
# entity_id: automation.automatic_fan_speeds
# message: >
# Outdoor Air Temp: {{states('sensor.front_yard_thermostat_temperature') | float(default=0)}}
# Girls Room Air Temp: {{states('sensor.girls_room_multisensor_air_temperature') | float(default=0)}}
# Girls Room Min Temp: {{states('input_number.girls_room_fan_min_temp') | float(default=0)}}
# Girls Room High Temp: {{states('input_number.girls_room_fan_high_temp') | float(default=0)}}
# Girls Room Calculated: {{ girls_room_fan_speed }}
# Master Bedroom Air Temp: {{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0)}}
# Master Bedroom Min Temp: {{states('input_number.master_bedroom_fan_min_temp') | float(default=0)}}
# Master Bedroom High Temp: {{states('input_number.master_bedroom_fan_high_temp') | float(default=0)}}
# Master Bedroom Calculated: {{ master_bedroom_fan_speed }}
- alias: "Set Girls Room fan speed"
choose:
- conditions:
- alias: "It is too cold outside to start the girls_room fan"
condition: numeric_state
entity_id: sensor.girls_room_multisensor_air_temperature
below: input_number.girls_room_fan_min_temp
- alias: "Girls Room fan on"
condition: state
entity_id: fan.girls_room_fan_light_switch_fan
state: "on"
sequence:
- alias: "Turn girls_room fan off because it is too cold outside"
action: fan.turn_off
target:
entity_id: fan.girls_room_fan_light_switch_fan
- conditions:
- alias: "Nusery not occupied and window is closed"
condition: state
entity_id: input_boolean.girls_room_occupied
state: "off"
- alias: "Nusery not asleep"
condition: state
entity_id: input_boolean.girls_room_asleep
state: "off"
- alias: "Girls Room fan on"
condition: state
entity_id: fan.girls_room_fan_light_switch_fan
state: "on"
- alias: "Girls Room window is closed"
condition: state
entity_id: binary_sensor.girls_room_window_contact
state: "off"
sequence:
- alias: "Turn girls_room fan off because room isn't occupied"
action: fan.turn_off
target:
entity_id: fan.girls_room_fan_light_switch_fan
- conditions:
- alias: "Girls Room below low"
condition: template
value_template: "{{states('sensor.girls_room_multisensor_air_temperature') | float(default=0) <= states('input_number.girls_room_fan_min_temp') | float(default=0)}}"
- alias: "Girls Room fan on"
condition: state
entity_id: fan.girls_room_fan_light_switch_fan
state: "on"
sequence:
- alias: "Turn girls_room fan off because the room is too cool"
action: fan.turn_off
target:
entity_id: fan.girls_room_fan_light_switch_fan
- conditions:
- alias: "Girls Room is occupied"
condition: state
entity_id: input_boolean.girls_room_occupied
state: "on"
- alias: "Nusery above high"
condition: template
value_template: "{{states('sensor.girls_room_multisensor_air_temperature') | float(default=0) > states('input_number.girls_room_fan_high_temp') | float(default=0)}}"
sequence:
- alias: "Turn girls_room fan on to percentage speed"
action: fan.set_percentage
target:
entity_id: fan.girls_room_fan_light_switch_fan
data:
percentage: 100
- conditions:
- alias: "Girls Room is occupied"
condition: state
entity_id: input_boolean.girls_room_occupied
state: "on"
- alias: "Nusery above medium"
condition: template
value_template: "{{states('sensor.girls_room_multisensor_air_temperature') | float(default=0) > states('input_number.girls_room_fan_medium_temp') | float(default=0)}}"
sequence:
- alias: "Turn girls_room fan on to percentage speed"
action: fan.set_percentage
target:
entity_id: fan.girls_room_fan_light_switch_fan
data:
percentage: 66
- conditions:
- alias: "Girls Room is occupied"
condition: state
entity_id: input_boolean.girls_room_occupied
state: "on"
- alias: "Nusery above low"
condition: template
value_template: "{{states('sensor.girls_room_multisensor_air_temperature') | float(default=0) > states('input_number.girls_room_fan_low_temp') | float(default=0)}}"
sequence:
- alias: "Turn girls_room fan on to percentage speed"
action: fan.set_percentage
target:
entity_id: fan.girls_room_fan_light_switch_fan
data:
percentage: 33
- alias: "Set Master Bedroom fan speed"
choose:
- conditions:
- alias: "It is too cold outside, so turn off the master bedroom fan"
condition: numeric_state
entity_id: sensor.master_bedroom_multisensor_air_temperature
below: input_number.master_bedroom_fan_min_temp
sequence:
- alias: "Turn master bedroom fan off because it is too cold outside"
action: fan.turn_off
target:
entity_id: fan.master_bedroom_fan_light_switch_fan
- conditions:
- alias: "Master Bedroom not occupied"
condition: state
entity_id: input_boolean.bedroom_occupied
state: "off"
- alias: "Master Bedroom not asleep"
condition: state
entity_id: input_boolean.master_bedroom_asleep
state: "off"
- alias: "Master Bedroom fan on"
condition: state
entity_id: fan.master_bedroom_fan_light_switch_fan
state: "on"
- alias: "Master bedroom window is closed"
condition: state
entity_id: binary_sensor.master_bedroom_window_contact
state: "off"
sequence:
- alias: "Turn master bedroom fan off because room isn't occupied"
action: fan.turn_off
target:
entity_id: fan.master_bedroom_fan_light_switch_fan
- conditions:
- alias: "Master Bedroom below low"
condition: template
value_template: "{{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) <= states('input_number.master_bedroom_fan_min_temp') | float(default=0)}}"
- alias: "Master Bedroom fan on"
condition: state
entity_id: fan.master_bedroom_fan_light_switch_fan
state: "on"
sequence:
- alias: "Turn master bedroom fan off because the room is too cool"
action: fan.turn_off
target:
entity_id: fan.master_bedroom_fan_light_switch_fan
- conditions:
- alias: "Master Bedroom is occupied"
condition: state
entity_id: input_boolean.bedroom_occupied
state: "on"
- alias: "Master Bedroom above high"
condition: template
value_template: "{{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) > states('input_number.master_bedroom_fan_high_temp') | float(default=0)}}"
sequence:
- alias: "Turn master bedroom fan on to percentage speed"
action: fan.set_percentage
target:
entity_id: fan.master_bedroom_fan_light_switch_fan
data:
percentage: 100
- conditions:
- alias: "Master Bedroom is occupied"
condition: state
entity_id: input_boolean.bedroom_occupied
state: "on"
- alias: "Master Bedroom above medium"
condition: template
value_template: "{{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) > states('input_number.master_bedroom_fan_medium_temp') | float(default=0)}}"
sequence:
- alias: "Turn master bedroom fan on to percentage speed"
action: fan.set_percentage
target:
entity_id: fan.master_bedroom_fan_light_switch_fan
data:
percentage: 66
- conditions:
- alias: "Master Bedroom is occupied"
condition: state
entity_id: input_boolean.bedroom_occupied
state: "on"
- alias: "Master Bedroom above low"
condition: template
value_template: "{{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) > states('input_number.master_bedroom_fan_low_temp') | float(default=0)}}"
sequence:
- alias: "Turn master bedroom fan on to percentage speed"
action: fan.set_percentage
target:
entity_id: fan.master_bedroom_fan_light_switch_fan
data:
percentage: 33