Skip to content

Instantly share code, notes, and snippets.

@raffy-ops
Last active August 20, 2024 08:32
Show Gist options
  • Save raffy-ops/2bdf967036d8d274fb1f62572ed5e545 to your computer and use it in GitHub Desktop.
Save raffy-ops/2bdf967036d8d274fb1f62572ed5e545 to your computer and use it in GitHub Desktop.
HA HVAC Pause Blueprint
#ver. 1.7
blueprint:
name: HVAC Pause V1.7
description: Pauses HVAC when windows/doors open; resumes last state once closed
domain: automation
source_url: https://gist.github.com/raffy-ops/2bdf967036d8d274fb1f62572ed5e545
input:
climate_device:
description: Climate entity used for climate control.
name: Climate Device
selector:
entity:
domain:
- climate
multiple: false
doors_windows:
description: Group of entities that will activate automation. (Assumes 'on'
means 'open')
name: Door and window sensors.
selector:
entity:
domain:
- group
- binary_sensor
multiple: false
pause_delay:
description: Time to wait before pausing the HVAC system.
name: Pause Delay
default:
hours: 0
minutes: 5
seconds: 0
selector:
duration: {}
resume_delay:
description: Time to wait before resuming the HVAC system.
name: Resume Delay
default:
hours: 0
minutes: 0
seconds: 30
selector:
duration: {}
timeout:
description: If set HVAC will ramain off if door/window is not closed prior to timeout value elapsing.
Set to 0 to disable timeout.
name: Timeout (optional)
default:
hours: 0
minutes: 0
seconds: 0
selector:
duration: {}
action_first:
description: When set to On any defined 'Pause Actions' will occur after the pause delay and prior to
any other actions.
name: Action First
selector:
boolean:
pause_action:
description: Optional additional action to perform when climate entity is paused.
name: Pause Action (Optional)
default: []
selector:
action: {}
resume_action:
description: Optional additional action to perform when climate entity resumes.
name: Resume Action (Optional)
default: []
selector:
action: {}
timeout_action:
description: Optional additional action to perform if the timeout value elapses.
name: Timeout Action (Optional)
default: []
selector:
action: {}
variables:
action_first: !input action_first
pause_action: !input pause_action
resume_action: !input resume_action
timeout_action: !input timeout_action
climate_device: !input climate_device
doors_windows: !input doors_windows
timeout: !input timeout
timeout_empty: {'hours':00, 'minutes':00, 'seconds':00}
name_id: '{{ state_attr( climate_device ,''friendly_name'')|lower |replace('' '',''_'')
| regex_replace(find=''[^\w]'', replace='''') ~ ''_snapshot'' }}'
mode: single
trigger:
- platform: state
entity_id: !input doors_windows
from: 'off'
to: 'on'
for: !input pause_delay
id: group_open
condition:
- condition: not
conditions:
- condition: state
entity_id: !input climate_device
state: 'off'
action:
- choose:
- conditions: '{{ pause_action is defined and action_first == true }}'
sequence: !input pause_action
- service: scene.create
data:
scene_id: '{{ name_id }}'
snapshot_entities: !input climate_device
- service: climate.set_hvac_mode
target:
entity_id: !input climate_device
data:
hvac_mode: 'off'
- choose:
- conditions: '{{ pause_action is defined and action_first != true }}'
sequence: !input pause_action
- if:
- condition: template
value_template: '{{ timeout != timeout_empty }}'
then:
- wait_for_trigger:
- platform: state
entity_id: !input doors_windows
from: 'on'
to: 'off'
for: !input resume_delay
continue_on_timeout: true
timeout: !input timeout
- choose:
- conditions: '{{ wait.trigger == none and timeout_action is defined }}'
sequence: !input timeout_action
- stop: ''
else:
- wait_for_trigger:
- platform: state
entity_id: !input doors_windows
from: 'on'
to: 'off'
for: !input resume_delay
continue_on_timeout: false
- condition: not
conditions:
- condition: state
entity_id: !input climate_device
attribute: fan_mode
state: 'on'
- condition: state
entity_id: !input climate_device
state: 'off'
- service: scene.turn_on
target:
entity_id: '{{ ''scene.'' ~ name_id }}'
- choose:
- conditions: '{{ resume_action is defined }}'
sequence: !input resume_action
@raffy-ops
Copy link
Author

Thanks for the feedback! Added in the source_url. Please feel free to keep providing suggestions to improve this!

@eupesco
Copy link

eupesco commented Jan 16, 2024

Just a request from my side: could you also add a temperature if window is opened? So you are able to choose between climate.set_hvac_mode and climate.set_temperatur? Thx

@davidcd13
Copy link

Just a request from my side: could you also add a temperature if window is opened? So you are able to choose between climate.set_hvac_mode and climate.set_temperatur? Thx

Yes this feature would be really good. But it would need to integrate air conditioning management, because it can be in cooling mode and heating mode. Lower the temperature in winter, but raise the temperature in summer. Thank you for your work.

@danieleparazza
Copy link

Thank you @raffy-ops for this blueprint! Please check my fork to find a little fix in the branch with timeout set

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment