#---- Calculate if a Human used a remote and respect their choice -------------------------------
calculate_ac_override:
sequence:
- repeat:
for_each:
- hvac: climate.kitchen
temp: input_number.ac_temp_kitchen
door: binary_sensor.kitchen_door_sensor_access_control_kitchen
override: input_text.kitchen_override
disabled: input_boolean.kitchen_ac_disable
- hvac: climate.library
temp: input_number.ac_temp_library
door: binary_sensor.library_door_sensor_window_door_is_open
override: input_text.library_override
disabled: input_boolean.library_ac_disable
- hvac: climate.parent_bedroom
temp: input_number.ac_temp_parents
door: binary_sensor.parent_bedroom_door_sensor_access_control_window_door_is_open
override: input_text.parents_override
disabled: input_boolean.parents_ac_disable
- hvac: climate.kid_bedroom
temp: input_number.ac_temp_kid
door: binary_sensor.kid_bedroom_window_sensor_window_door_is_open
override: input_text.kid_override
disabled: input_boolean.kid_ac_disable
- hvac: climate.gaming_room
temp: input_number.ac_temp_gaming
door: input_boolean.gaming_room_door
override: input_text.gaming_override
disabled: input_boolean.gaming_ac_disable
- hvac: climate.living_room_1
temp: input_number.ac_temp_living
door: binary_sensor.living_room_door_sensor_window_door_is_open_3
override: input_text.living_override
disabled: input_boolean.living_ac_disable
- hvac: climate.living_room_2
temp: input_number.ac_temp_living
door: binary_sensor.living_room_door_sensor_window_door_is_open_3
override: input_text.living_override
disabled: input_boolean.living_ac_disable
- hvac: climate.office
temp: input_number.ac_temp_office
door: input_boolean.office_window
override: input_text.office_override
disabled: input_boolean.office_ac_disable
sequence:
#-------- If split isn't disabled or on override yet, enabling override mode if hvac mode or temp readings and calculated aren't aligned --------#
- if: "{{ is_state(repeat.item.override, 'off') and is_state(repeat.item.disabled, 'off') }}"
then:
- if: "{{ states(repeat.item.hvac) not in (states('input_text.hvac_mode'), 'unavailable') }}"
# Mode Override
then:
- action: system_log.write
data:
logger: "AC"
level: warning
message: "Override set because MODE for {{ repeat.item.hvac.split('.')[1] + ' is set to ' + states(repeat.item.hvac) + ' instead of ' + states('input_text.hvac_mode') }}"
- action: input_text.set_value
data_template:
value: >
{% if now().hour in (23,0,1,2,3,4,5,6,7,8) %}
{% set duration=(8 - now().hour) %}
{% else %}
{% set duration=3 %}
{% endif %}
{{ now() + timedelta(hours=duration) }}
target:
entity_id: "{{ repeat.item.override }}"
- if: "{{ state_attr(repeat.item.hvac, 'temperature') != 'unavailable' and state_attr(repeat.item.hvac, 'temperature') | float != states(repeat.item.temp) | float }}"
# Temp Override
then:
- action: system_log.write
data:
logger: "AC"
level: warning
message: "{{ 'Override set because TEMP for ' + repeat.item.hvac.split('.')[1] + ' is set to ' + state_attr(repeat.item.hvac,'temperature') | string + ' / ' + states(repeat.item.hvac) + ' instead of ' + states(repeat.item.temp) | string + ' / ' + states('input_text.hvac_mode') }}"
- action: input_text.set_value
data_template:
value: >
{% if now().hour in (0,1,2,3,4,5,6,7,8) %}
{% set duration=(8 - now().hour) %}
{% else %}
{% set duration=2 %}
{% endif %}
{{ now() + timedelta(hours=duration) }}
target:
entity_id: "{{ repeat.item.override }}"
#----------------------------- Override expiring ---------------------------------------------------------------------------------------#
- if: "{{ states(repeat.item.override) != 'off' }}"
then:
- if: "{{ now() > states(repeat.item.override) | as_datetime }}"
then:
- action: system_log.write
data:
logger: "AC-Override expired"
level: warning
message: "{{ 'Override for ' + repeat.item.hvac.split('.')[1] + ' has expired' }}"
- action: input_text.set_value
data:
value: "off"
target:
entity_id: "{{ repeat.item.override }}"
else:
- action: system_log.write
data:
logger: "AC-Override"
level: warning
message: "{{ 'Override for ' + repeat.item.hvac.split('.')[1] + ' has not expired yet.' }}"
- delay: "00:00:01"
#---- Spit the full debug in the logs (ha core logs) --------------------------------------------
ac_debug:
sequence:
- if: "{{is_state('input_boolean.debug_flag', 'on')}}"
then:
- action: notify.info
data:
title: "A/C"
message: >
{{"AC:"
+ "\n-----------------------------------"
+ "\n| Room | Temp | Set | Mode, Stat, Ovrd"
+ "\n| Kitchen | " + states('sensor.ac_kitchen_inside_temperature') + ' | ' + states('input_number.ac_temp_kitchen') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.kitchen_door_sensor_access_control_kitchen') + ', ' + states("input_text.kitchen_override")
+ "\n| Library | " + states('sensor.ac_library_inside_temperature') + ' | ' + states('input_number.ac_temp_library') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.library_door_sensor_window_door_is_open') + ', ' + states("input_text.library_override")
+ "\n| Parents | " + states('sensor.ac_parent_bedroom_inside_temperature') + ' | ' + states('input_number.ac_temp_parents') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.parent_bedroom_door_sensor_access_control_window_door_is_open') + ', ' + states("input_text.parents_override")
+ "\n| kid | " + states('sensor.kid_bedroom_inside_temperature') + ' | ' + states('input_number.ac_temp_kid') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.kid_bedroom_window_sensor_window_door_is_open') + ', ' + states("input_text.kid_override")
+ "\n| Gaming | " + states('sensor.gaming_room_inside_temperature') + ' | ' + states('input_number.ac_temp_gaming') + ' | ' + states('input_text.hvac_mode') + ', off, ' + states('input_text.gaming_override')
+ "\n| Living | " + states('sensor.living_room_1_inside_temperature') + ' | ' + states('input_number.ac_temp_living') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.living_room_door_sensor_window_door_is_open_3') + ', ' + states('input_text.living_override')
+ "\n| Office | " + states('sensor.office_inside_temperature') + ' | ' + states('input_number.ac_temp_office') + ' | ' + states('input_text.hvac_mode') + ', off, ' + states('input_text.office_override')
+ "\n------------------------------------"}}
- action: system_log.write
data:
logger: "AC"
level: warning
message: >
{{"AC:"
+ "\n-----------------------------------"
+ "\n| Room | Temp | Set | Mode, Stat, Ovrd"
+ "\n| Kitchen | " + states('sensor.ac_kitchen_inside_temperature') + ' | ' + states('input_number.ac_temp_kitchen') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.kitchen_door_sensor_access_control_kitchen') + ', ' + states("input_text.kitchen_override")
+ "\n| Library | " + states('sensor.ac_library_inside_temperature') + ' | ' + states('input_number.ac_temp_library') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.library_door_sensor_window_door_is_open') + ', ' + states("input_text.library_override")
+ "\n| Parents | " + states('sensor.ac_parent_bedroom_inside_temperature') + ' | ' + states('input_number.ac_temp_parents') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.parent_bedroom_door_sensor_access_control_window_door_is_open') + ', ' + states("input_text.parents_override")
+ "\n| kid | " + states('sensor.kid_bedroom_inside_temperature') + ' | ' + states('input_number.ac_temp_kid') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.kid_bedroom_window_sensor_window_door_is_open') + ', ' + states("input_text.kid_override")
+ "\n| Gaming | " + states('sensor.gaming_room_inside_temperature') + ' | ' + states('input_number.ac_temp_gaming') + ' | ' + states('input_text.hvac_mode') + ', off, ' + states('input_text.gaming_override')
+ "\n| Living | " + states('sensor.living_room_1_inside_temperature') + ' | ' + states('input_number.ac_temp_living') + ' | ' + states('input_text.hvac_mode') + ', ' + states('binary_sensor.living_room_door_sensor_window_door_is_open_3') + ', ' + states('input_text.living_override')
+ "\n| Office | " + states('sensor.office_inside_temperature') + ' | ' + states('input_number.ac_temp_office') + ' | ' + states('input_text.hvac_mode') + ', off, ' + states('input_text.office_override')
+ "\n------------------------------------"}}
#---- Manually reset all overrides --------------------------------------------------------------
ac_reset_overrides:
alias: Turn off all airco overrides
description: Turn off all airco overrides
sequence:
- action: system_log.write
data:
logger: "AC"
level: warning
message: "Resetting all overrides"
- action: input_text.set_value
target:
entity_id:
- input_text.kid_override
- input_text.office_override
- input_text.kitchen_override
- input_text.library_override
- input_text.parents_override
- input_text.gaming_override
- input_text.living_override
data:
value: "off"
- repeat:
for_each:
- hvac: climate.kitchen
temp: input_number.ac_temp_kitchen
override: input_text.kitchen_override
- hvac: climate.library
temp: input_number.ac_temp_library
override: input_text.library_override
- hvac: climate.parent_bedroom
temp: input_number.ac_temp_parents
override: input_text.parents_override
- hvac: climate.kid_bedroom
temp: input_number.ac_temp_kid
override: input_text.kid_override
- hvac: climate.gaming_room
temp: input_number.ac_temp_gaming
override: input_text.gaming_override
- hvac: climate.living_room_1
temp: input_number.ac_temp_living
override: input_text.living_override
- hvac: climate.living_room_2
temp: input_number.ac_temp_living
override: input_text.living_override
- hvac: climate.office
temp: input_number.ac_temp_office
override: input_text.office_override
sequence:
- action: climate.set_hvac_mode
data_template:
hvac_mode: "{{ states('input_text.hvac_mode') }}"
target:
entity_id: "{{ repeat.item.hvac }}"
- action: climate.set_temperature
data_template:
temperature: "{{ states(repeat.item.temp) | float }}"
target:
entity_id: "{{ repeat.item.hvac }}"
- action: input_text.set_value
data_template:
value: "off"
target:
entity_id: "{{ repeat.item.override }}"
- action: system_log.write
data:
logger: "AC-Override"
level: warning
message: "{{ 'Manual reset of all overrides' }}"
#---- Set fan speed/modes -----------------------------------------------------------------------
set_fans:
alias: Set fan speeds
description: Fan speed contextual adjustment
sequence:
# quiet rooms
- action: climate.set_fan_mode
data:
fan_mode: >
{%- if now().hour in (23,0,1,2,3,4,5,6,7,8) and is_state('sensor.tempo_period_isred','True') -%}
{{ "Silence" }}
{%- else -%}
{{ "1" }}
{%- endif -%}
target:
entity_id:
- climate.library
- climate.parent_bedroom
- climate.kid_bedroom
- climate.office
# other rooms
- action: climate.set_fan_mode
data:
fan_mode: >
{%- if now().hour in (1,2,3,4,5,6,7,8,9) and is_state('sensor.tempo_period_isred','False') -%}
{{ "2" }}
{%- elif now().hour in (19,20,21,22,23,0) and is_state('sensor.tempo_period_isred','False') -%}
{{ "Silence" }}
{%- else -%}
{{ "1" }}
{%- endif -%}
target:
entity_id:
- climate.kitchen
- climate.gaming_room
- climate.living_room_1
- climate.living_room_2
#---- Simplified logs ---------------------------------------------------------------------------
ac_logs:
alias: Log AC states
description: Centralized reporting of AC status & automations
sequence:
- if: "{{is_state('input_boolean.debug_flag', 'on')}}"
then:
- action: system_log.write
data:
logger: "AC"
level: warning
message: "{{ 'TARGET TEMP SET - Offset (' + states('input_number.temp_offset') +
'), office (' + states('input_number.ac_temp_office') +
'), living (' + states('input_number.ac_temp_living') +
'), kitchen ('+ states('input_number.ac_temp_kitchen') +
'), parents ('+ states('input_number.ac_temp_parents') +
'), library ('+ states('input_number.ac_temp_library') +
'), kid (' + states('input_number.ac_temp_kid') +
'), gaming (' + states('input_number.ac_temp_gaming') +')' }}"
- action: system_log.write
data:
logger: "AC"
level: warning
message: "{{ 'AC MODE - office (' + states('input_text.hvac_mode') +
'), living (' + states('input_text.hvac_mode') +
'), kitchen ('+ states('input_text.hvac_mode') +
'), parents ('+ states('input_text.hvac_mode') +
'), library ('+ states('input_text.hvac_mode') +
'), kid (' + states('input_text.hvac_mode') +
'), gaming (' + states('input_text.hvac_mode') +')' }}"
- action: system_log.write
data:
logger: "AC"
level: warning
message: "{{ 'AC OVERRIDE - office (' + states('input_text.kitchen_override') +
'), living (' + states('input_text.kitchen_override') +
'), kitchen ('+ states('input_text.kitchen_override') +
'), parents ('+ states('input_text.kitchen_override') +
'), library ('+ states('input_text.kitchen_override') +
'), kid (' + states('input_text.kitchen_override') +
'), gaming (' + states('input_text.kitchen_override') +')' }}"
- action: system_log.write
data:
logger: "AC"
level: warning
message: "{{ 'ROOM TEMP READ (Daikin) - Office (' + state_attr('climate.office', 'current_temperature')|string() +
'), living 1 (' + state_attr('climate.living_room_1', 'current_temperature') |string() +
'), living 2 (' + state_attr('climate.living_room_2', 'current_temperature') |string() +
'), kitchen (' + state_attr('climate.kitchen', 'current_temperature') |string() +
'), parents (' + state_attr('climate.parent_bedroom', 'current_temperature') |string() +
'), library (' + state_attr('climate.library', 'current_temperature') |string() +
'), kid (' + state_attr('climate.kid_bedroom', 'current_temperature') |string() +
'), gaming (' + state_attr('climate.gaming_room', 'current_temperature') |string() +')' }}"
- delay: "00:00:31"
- action: system_log.write
data:
logger: "AC"
level: warning
message: "{{ 'CURRENT TEMP SET - Office (' + state_attr('climate.office', 'temperature')|string() +
'), living 1 (' + state_attr('climate.living_room_1', 'temperature') |string() +
'), living 2 (' + state_attr('climate.living_room_2', 'temperature') |string() +
'), kitchen (' + state_attr('climate.kitchen', 'temperature') |string() +
'), parents (' + state_attr('climate.parent_bedroom', 'temperature') |string() +
'), library (' + state_attr('climate.library', 'temperature') |string() +
'), kid (' + state_attr('climate.kid_bedroom', 'temperature') |string() +
'), gaming (' + state_attr('climate.gaming_room', 'temperature') |string() +')' }}"
- delay: "00:00:31"
#------ Set all A/C unit to cool ----------------------------------------------------------------
all_ac_to_cool:
alias: All AC units to cool
description: All AC units to Cool
sequence:
- action: input_text.set_value
data_template:
value: "heat"
target:
entity_id:
- input_text.hvac_mode
- action: input_number.set_value
target:
entity_id:
- input_number.ac_temp_office
- input_number.ac_temp_kitchen
- input_number.ac_temp_living
- input_number.ac_temp_gaming
- input_number.ac_temp_parents
- input_number.ac_temp_library
- input_number.ac_temp_kid
data_template:
value: 23
- action: climate.set_temperature
data:
temperature: 23
hvac_mode: "cool"
target:
entity_id:
- climate.kitchen
- climate.library
- climate.parent_bedroom
- climate.kid_bedroom
- climate.gaming_room
- climate.living_room_1
- climate.living_room_2
- climate.office
- action: input_text.set_value
data_template:
value: >
{% if now().hour in (23,0,1,2,3,4,5,6,7,8) %}
{% set duration=(8 - now().hour) %}
{% else %}
{% set duration=3 %}
{% endif %}
{{ now() + timedelta(hours=duration) }}
target:
entity_id:
- input_text.gaming_override
- input_text.living_override
- input_text.office_override
- input_text.kitchen_override
- input_text.library_override
- input_text.parents_override
- input_text.kid_override
- action: system_log.write
data:
logger: "AC"
level: warning
message: "All A/C have been set manually to Cool"
#------ Set Day A/C unit to cool ----------------------------------------------------------------
day_ac_to_cool:
alias: All AC units to cool
description: All AC units to Cool
sequence:
- action: input_text.set_value
data_template:
value: "heat"
target:
entity_id:
- input_text.hvac_mode
- action: input_number.set_value
target:
entity_id:
- input_number.ac_temp_office
- input_number.ac_temp_kitchen
- input_number.ac_temp_living
- input_number.ac_temp_library
data_template:
value: 23
- action: climate.set_temperature
data:
temperature: 23
hvac_mode: "cool"
target:
entity_id:
- climate.kitchen
- climate.library
- climate.living_room_1
- climate.living_room_2
- climate.office
- action: input_text.set_value
data_template:
value: >
{% if now().hour in (23,0,1,2,3,4,5,6,7,8) %}
{% set duration=(8 - now().hour) %}
{% else %}
{% set duration=3 %}
{% endif %}
{{ now() + timedelta(hours=duration) }}
target:
entity_id:
- input_text.living_override
- input_text.office_override
- input_text.kitchen_override
- input_text.library_override
- action: system_log.write
data:
logger: "AC"
level: warning
message: "All A/C have been set manually to Cool"
#------ Set Night A/C unit to cool --------------------------------------------------------------
night_ac_to_cool:
alias: All AC units to cool
description: All AC units to Cool
sequence:
- action: input_text.set_value
data_template:
value: "heat"
target:
entity_id:
- input_text.hvac_mode
- action: input_number.set_value
target:
entity_id:
- input_number.ac_temp_parents
- input_number.ac_temp_kid
data_template:
value: 23
- action: climate.set_temperature
data:
temperature: 23
hvac_mode: "cool"
target:
entity_id:
- climate.parent_bedroom
- climate.kid_bedroom
- action: input_text.set_value
data_template:
value: >
{% if now().hour in (23,0,1,2,3,4,5,6,7,8) %}
{% set duration=(8 - now().hour) %}
{% else %}
{% set duration=3 %}
{% endif %}
{{ now() + timedelta(hours=duration) }}
target:
entity_id:
- input_text.parents_override
- input_text.kid_override
- action: system_log.write
data:
logger: "AC"
level: warning
message: "All A/C have been set manually to Cool"
#------ Set all A/C to heat ---------------------------------------------------------------------
all_ac_to_heat:
alias: All AC units to heat
description: All AC units to Heat
sequence:
- action: input_text.set_value
data_template:
value: "heat"
target:
entity_id:
- input_text.hvac_mode
- action: input_number.set_value
target:
entity_id:
- input_number.ac_temp_office
- input_number.ac_temp_kitchen
- input_number.ac_temp_living
- input_number.ac_temp_gaming
- input_number.ac_temp_parents
- input_number.ac_temp_library
- input_number.ac_temp_kid
data_template:
value: 19
- action: climate.set_temperature
data:
temperature: 19
hvac_mode: "heat"
target:
entity_id:
- climate.kitchen
- climate.library
- climate.parent_bedroom
- climate.kid_bedroom
- climate.gaming_room
- climate.living_room_1
- climate.living_room_2
- climate.office
- action: input_text.set_value
data_template:
value: >
{% if now().hour in (23,0,1,2,3,4,5,6,7,8) %}
{% set duration=(8 - now().hour) %}
{% else %}
{% set duration=3 %}
{% endif %}
{{ now() + timedelta(hours=duration) }}
target:
entity_id:
- input_text.gaming_override
- input_text.living_override
- input_text.office_override
- input_text.kitchen_override
- input_text.library_override
- input_text.parents_override
- input_text.kid_override
- action: system_log.write
data:
logger: "AC"
level: warning
message: "All A/C have been set manually to Cool"