feat: Start implementing HVAC controls (migrate pause/restore to script)

This commit is contained in:
2024-09-02 15:33:46 -07:00
parent 3361337966
commit 485fb3be32
2 changed files with 107 additions and 36 deletions

View File

@@ -6,10 +6,8 @@ input_select:
climate_mode:
name: Climate Control Mode
options:
- Home
- Night
- Away
- 'Off'
- Auto
- Manual
- Paused
@@ -63,12 +61,68 @@ input_datetime:
has_date: false
has_time: true
input_text:
hvac_last_mode:
template:
binary_sensor:
- name: HVAC Fan Running
state: >
{{ 'Running' in state_attr('climate.thermostat', 'fan_state') }}
# -----------------------------------------------------------------------------
# Climate Scripts
script:
hvac_pause:
alias: Pause HVAC
mode: restart
sequence:
# Save the current thermostat mode because it may not be captured properly
# by `scene.create` (see https://github.com/home-assistant/core/issues/69925)
- action: input_text.set_value
target:
entity_id: input_text.hvac_last_mode
data:
value: "{{ states('climate.thermostat') }}"
# Snapshot the current mode and thermostat status
- action: scene.create
data:
scene_id: hvac_restore_state
snapshot_entities:
- climate.thermostat
- input_select.climate_mode
- input_text.hvac_last_mode
# Turn off the thermostat and set the mode to Paused
- action: climate.set_hvac_mode
target:
entity_id: climate.thermostat
data:
hvac_mode: "off"
- service: input_select.select_option
target:
entity_id: input_select.climate_mode
data:
option: Paused
hvac_restore:
alias: Resume HVAC
mode: restart
sequence:
# Restore the snapshot
- action: scene.turn_on
target:
entity_id: scene.hvac_restore_state
# Restore the thermostat mode
- action: climate.set_hvac_mode
target:
entity_id: climate.thermostat
data:
hvac_mode: "{{ states('input_text.hvac_last_mode') }}"
# -----------------------------------------------------------------------------
# Climate Automations
automation:
@@ -92,26 +146,27 @@ automation:
- "{{ not is_state('input_select.climate_mode', 'Paused') }}"
- "{{ is_state('input_boolean.guest_mode', 'off') }}"
action:
- service: scene.create
# - service: scene.create
# data:
# scene_id: hvac_restore_state
# snapshot_entities:
# # See https://github.com/home-assistant/core/issues/69925
# # - climate.thermostat
# - input_select.climate_mode
# - service: climate.set_hvac_mode
# target:
# entity_id: climate.thermostat
# data:
# hvac_mode: "off"
# - service: input_select.select_option
# target:
# entity_id: input_select.climate_mode
# data:
# option: Paused
- action: script.hvac_pause
- action: notify.status
data:
scene_id: hvac_restore_state
snapshot_entities:
# See https://github.com/home-assistant/core/issues/69925
# - climate.thermostat
- input_select.climate_mode
- service: climate.set_hvac_mode
target:
entity_id: climate.thermostat
data:
hvac_mode: "off"
- service: input_select.select_option
target:
entity_id: input_select.climate_mode
data:
option: Paused
- service: notify.general
data:
message: HVAC Paused (Window or Door Open)
message: "HVAC Paused ({{ states('sensor.open_windows_doors') }} open)"
- alias: Restore HVAC when Doors/Windows Closed
mode: queued
@@ -128,23 +183,25 @@ automation:
to: 'off'
for:
minutes: 5
condition:
- "{{ not is_state('input_select.climate_mode', 'Manual') }}"
condition:
- "{{ is_state('input_select.climate_mode', 'Paused') }}"
- "{{ is_state('binary_sensor.all_doors', 'off') }}"
- "{{ is_state('binary_sensor.all_windows', 'off') }}"
action:
- service: scene.turn_on
target:
entity_id: scene.hvac_restore_state
# See https://github.com/home-assistant/core/issues/69925
# Assume thermostat is always heat_cool when not off
- service: climate.set_hvac_mode
target:
entity_id: climate.thermostat
# - service: scene.turn_on
# target:
# entity_id: scene.hvac_restore_state
# # See https://github.com/home-assistant/core/issues/69925
# # Assume thermostat is always heat_cool when not off
# - service: climate.set_hvac_mode
# target:
# entity_id: climate.thermostat
# data:
# hvac_mode: "{{ 'off' if is_state('input_select.climate_mode', 'Off') else 'heat_cool' }}"
- action: script.hvac_restore
- action: notify.status
data:
hvac_mode: "{{ 'off' if is_state('input_select.climate_mode', 'Off') else 'heat_cool' }}"
- service: notify.general
data:
message: HVAC Restored (Window or Door Open)
message: HVAC Restored (Windows and Doors closed)
- alias: Widen HVAC Range at Night
mode: queued

View File

@@ -32,6 +32,20 @@ notify:
services:
- action: iphone_jp
# `notify.status` used for simple status reporting (e.g. washer done)
# Keeps these notifications separated from security alerts
- name: status
platform: group
services:
- action: iphone_jp
data:
data:
group: 'status-notification-group'
- action: iphone_jen
data:
data:
group: 'status-notification-group'
- name: everyone
platform: group
services: