Files
Home-AssistantConfig/config/packages/climate.yaml

274 lines
8.9 KiB
YAML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

######################################################################
## AC related automations
## For more info visit https://www.vcloudinfo.com/click-here
## Contact: @CCOSTAN
######################################################################
input_datetime:
downstairs_last_filter_change:
name: Downstairs Last Filter Change
has_date: true
has_time: true
upstairs_last_filter_change:
name: Upstairs Last Filter Change
has_date: true
has_time: true
# ---------------------------------------------------------------------------
# Binary sensors true when the thermostat reports the compressor is running
# ---------------------------------------------------------------------------
binary_sensor:
- platform: template
sensors:
downstairs_ac_cooling:
friendly_name: "Downstairs AC is Cooling"
value_template: >
{{ state_attr('climate.downstairs', 'hvac_action') == 'cooling' }}
upstairs_ac_cooling:
friendly_name: "Upstairs AC is Cooling"
value_template: >
{{ state_attr('climate.upstairs', 'hvac_action') == 'cooling' }}
sensor:
- platform: template
sensors:
downstairs_ac_cooling_numeric:
friendly_name: "Downstairs AC Cooling Numeric"
value_template: "{{ 1 if is_state('binary_sensor.downstairs_ac_cooling', 'on') else 0 }}"
upstairs_ac_cooling_numeric:
friendly_name: "Upstairs AC Cooling Numeric "
value_template: "{{ 1 if is_state('binary_sensor.upstairs_ac_cooling', 'on') else 0 }}"
- platform: integration
name: Downstairs AC Runtime Raw
source: sensor.downstairs_ac_cooling_numeric
unit_time: h
method: left
round: 2
- platform: integration
name: Upstairs AC Runtime Raw
source: sensor.upstairs_ac_cooling_numeric
unit_time: h
method: left
round: 2
# ---------------------------------------------------------------------------
# Utilitymeters that act like odometers (reset when you swap the filter)
# ---------------------------------------------------------------------------
utility_meter:
downstairs_ac_runtime_since_last_filter_change:
source: sensor.downstairs_ac_runtime_raw
upstairs_ac_runtime_since_last_filter_change:
source: sensor.upstairs_ac_runtime_raw
script:
reset_downstairs_filter:
alias: Reset Downstairs Filter
mode: queued
sequence:
- service: input_datetime.set_datetime
data:
entity_id: input_datetime.downstairs_last_filter_change
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
- service: utility_meter.reset
target:
entity_id: sensor.downstairs_ac_runtime_since_last_filter_change
reset_upstairs_filter:
alias: Reset Upstairs Filter
mode: queued
sequence:
- service: input_datetime.set_datetime
data:
entity_id: input_datetime.upstairs_last_filter_change
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
- service: utility_meter.reset
target:
entity_id: sensor.upstairs_ac_runtime_since_last_filter_change
automation:
- alias: Notify Downstairs Filter Change Due
description: Notify when downstairs runtime exceeds threshold since last filter change
trigger:
- platform: numeric_state
entity_id: sensor.downstairs_ac_runtime_since_last_filter_change
above: 800 # hours
action:
- service: script.notify_engine # <-- keep your existing notify helper
data:
title: "Home Maintenance Reminder"
value1: "It's time to change your Downstairs AC filter."
value2: >
Runtime has exceeded 800h. Last changed {{ ((now() - states.input_datetime.downstairs_last_filter_change.last_changed).total_seconds() / 86400) | round(0) }} days ago.
who: "Carlo"
group: "maintenance"
level: "active"
- alias: Notify Upstairs Filter Change Due
description: Notify when upstairs runtime exceeds threshold since last filter change
trigger:
- platform: numeric_state
entity_id: sensor.upstairs_ac_runtime_since_last_filter_change
above: 450 # hours
action:
- service: script.notify_engine
data:
title: "Home Maintenance Reminder"
value1: "It's time to change your Upstairs AC filter."
value2: >
Runtime has exceeded 450h. Last changed {{ ((now() - states.input_datetime.upstairs_last_filter_change.last_changed).total_seconds() / 86400) | round(0) }} days ago.
who: "Carlo"
group: "maintenance"
- alias: 'AC Status off Announcement'
id: 7812fdaf-a3f8-498b-8f07-28e977e528fe
trigger:
- platform: state
entity_id:
- climate.downstairs
- climate.upstairs
from: 'off'
action:
- service: script.speech_engine
data:
NestStatus: "The {{ trigger.entity_id.split('.')[1].split('_')[0]}} {{ trigger.entity_id.split('.')[1].split('_')[1]}} has now been turned on for {{(trigger.to_state.state)}}."
call_window_check: 1
- alias: Prevent Upstairs Nest Below 76
id: 7812fdaf-a3f8-498b-8f07-28e977e528ff
trigger:
- platform: numeric_state
entity_id: climate.upstairs
attribute: temperature
below: 76
action:
- delay: "00:03:00"
- service: climate.set_temperature
data:
entity_id: climate.upstairs
temperature: 77
- alias: Set Downstairs Nest to 76 When both in bed
id: set_downstairs_nest_76_both_in_bed
trigger:
- platform: numeric_state
entity_id: climate.downstairs
attribute: temperature
above: 76
- platform: state
entity_id: group.bed
to: 'on'
condition:
- condition: and
conditions:
- condition: state
entity_id: binary_sensor.sleepnumber_carlo_carlo_is_in_bed
state: 'on'
- condition: state
entity_id: binary_sensor.sleepnumber_carlo_stacey_is_in_bed
state: 'on'
- condition: numeric_state
entity_id: climate.downstairs
attribute: temperature
above: 76
- condition: state
entity_id: sun.sun
state: 'below_horizon'
action:
- service: climate.set_temperature
data:
entity_id: climate.downstairs
temperature: 76
- alias: 'Set Downstairs Thermostat to 79 During Daylight'
id: set_downstairs_thermostat_79_daylight
mode: single
trigger:
- platform: state
entity_id: sun.sun
to: 'above_horizon'
- platform: numeric_state
entity_id: climate.downstairs
attribute: temperature
below: 79
condition:
- condition: state
entity_id: sun.sun
state: 'above_horizon'
- condition: template
value_template: "{{ state_attr('climate.downstairs', 'temperature') < 79 }}"
- condition: state
entity_id: input_boolean.guest_mode
state: 'off'
action:
- service: climate.set_temperature
data:
entity_id: climate.downstairs
temperature: 80
# Set thermostats to eco mode when everyone is away
- alias: 'Set Thermostats to Eco When Away'
id: 1e2d3c4b-eco-thermostat-away
mode: single
trigger:
- platform: state
entity_id: group.family
to: 'not_home'
condition:
- condition: state
entity_id: group.family
state: 'not_home'
- condition: state
entity_id: input_boolean.guest_mode
state: 'off'
action:
- service: climate.set_preset_mode
data:
entity_id:
- climate.downstairs
- climate.upstairs
preset_mode: 'eco'
# Automation: Set Thermostats Back to Cool Mode
- alias: 'Set Thermostats to Cool When Home'
id: 1e2d3c4b-cool-thermostat-home
mode: single
trigger:
- platform: state
entity_id: group.family
to: 'home'
- platform: state
entity_id: person.justin
to: 'home'
condition:
- condition: or
conditions:
- condition: state
entity_id: group.family
state: 'home'
- condition: state
entity_id: person.justin
state: 'home'
- condition: state
entity_id: input_boolean.guest_mode
state: 'off'
action:
- choose:
- conditions:
- condition: state
entity_id: group.family
state: 'home'
sequence:
- service: climate.set_preset_mode
data:
entity_id: climate.downstairs
preset_mode: 'none'
- conditions:
- condition: state
entity_id: person.justin
state: 'home'
sequence:
- service: climate.set_preset_mode
data:
entity_id: climate.upstairs
preset_mode: 'none'