-
-
Save raffy-ops/2bdf967036d8d274fb1f62572ed5e545 to your computer and use it in GitHub Desktop.
#ver. 1.7.2 | |
# Refactored timeout code and name_id logic. | |
blueprint: | |
name: HVAC Pause V1.7.2 | |
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 once doors and windows are closed. | |
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'')|slugify ~ ''_snapshot'' }}' | |
button_entity: '{{ ''button.'' ~ name_id ~ ''_clear_hold'' }}' | |
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'' }}' | |
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 | |
- if: | |
- condition: template | |
value_template: "{{ wait.trigger == none and timeout_action is defined}}" | |
then: | |
- 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 ~ ''_snapshot'' }}' | |
- choose: | |
- conditions: | |
- condition: template | |
value_template: '{{ ''ecobee'' in device_attr( climate_device ,''manufacturer'') |lower }}' | |
- condition: template | |
value_template: '{{ states(button_entity) != "unknown" }}' | |
sequence: | |
- delay: | |
seconds: 1 | |
- service: button.press | |
metadata: {} | |
data: {} | |
target: | |
entity_id: '{{ button_entity }}' | |
- choose: | |
- conditions: '{{ resume_action is defined }}' | |
sequence: !input resume_action |
Thanks, @raffy-ops for this blueprint! I ran into a similar problem as here with Hungarian "í" character, so I simplified the name_id
with slugify
. Check my fork.
Sorry for the very late reply @danieleparazza , I don't check on github as much as Homeassistant.
I have implemented both yours and @gyuris fixes into the latest version. I appreciate you both for doing the hard parts for me!
As for any other fixes feel free to keep making suggestions and/or figuring it out and allowing me to implement your code into future releases!
I've published a new version of this blueprint (v2.0.0) with the major improvement of not using snapshot scene to store the HVAC state as it doesn't save additional attributes such as swing, fan or preset settings. It also limits the number of service calls to only the necessary ones limiting the "apparently random beeps" around the house.
You can find the latest version and changelog here
Thanks @danieleparazza, it works well for me!
Thank you @raffy-ops for this blueprint! Please check my fork to find a little fix in the branch with timeout set