various tidyups
This commit is contained in:
@@ -0,0 +1,374 @@
|
||||
################################################################################
|
||||
# Optimistic state helpers for the Flounder dashboard heat-pump controls.
|
||||
################################################################################
|
||||
|
||||
input_select:
|
||||
lounge_hvac_requested_mode:
|
||||
name: Lounge HVAC Requested Mode
|
||||
options:
|
||||
- none
|
||||
- "off"
|
||||
- heat
|
||||
- cool
|
||||
initial: none
|
||||
|
||||
flounder_lounge_power_request:
|
||||
name: Flounder Lounge Power Request
|
||||
options: [idle, "on", "off"]
|
||||
initial: idle
|
||||
|
||||
flounder_master_bedroom_power_request:
|
||||
name: Flounder Master Bedroom Power Request
|
||||
options: [idle, "on", "off"]
|
||||
initial: idle
|
||||
|
||||
flounder_lounge_nanoe_request:
|
||||
name: Flounder Lounge Nanoe Request
|
||||
options: [idle, "on", "off"]
|
||||
initial: idle
|
||||
|
||||
flounder_master_bedroom_nanoe_request:
|
||||
name: Flounder Master Bedroom Nanoe Request
|
||||
options: [idle, "on", "off"]
|
||||
initial: idle
|
||||
|
||||
flounder_lounge_preset_request:
|
||||
name: Flounder Lounge Preset Request
|
||||
options: [idle, none, powerful, quiet]
|
||||
initial: idle
|
||||
|
||||
flounder_master_bedroom_preset_request:
|
||||
name: Flounder Master Bedroom Preset Request
|
||||
options: [idle, none, powerful, quiet]
|
||||
initial: idle
|
||||
|
||||
input_number:
|
||||
lounge_setpoint_ui:
|
||||
name: Lounge Setpoint UI
|
||||
min: 16
|
||||
max: 30
|
||||
step: 0.5
|
||||
mode: box
|
||||
unit_of_measurement: "°C"
|
||||
icon: mdi:thermometer
|
||||
|
||||
input_boolean:
|
||||
flounder_lounge_setpoint_pending:
|
||||
name: Flounder Lounge Setpoint Pending
|
||||
|
||||
flounder_master_bedroom_setpoint_pending:
|
||||
name: Flounder Master Bedroom Setpoint Pending
|
||||
|
||||
script:
|
||||
flounder_lounge_power_toggle:
|
||||
alias: Flounder Lounge Heat Pump Power Toggle
|
||||
mode: restart
|
||||
sequence:
|
||||
- variables:
|
||||
pending: "{{ states('input_select.flounder_lounge_power_request') }}"
|
||||
requested_mode: "{{ states('input_select.lounge_hvac_requested_mode') }}"
|
||||
desired: >-
|
||||
{% set is_on = requested_mode in ['heat', 'cool'] or pending == 'on' or (pending == 'idle' and not is_state('climate.lounge', 'off')) %}
|
||||
{{ 'off' if is_on else 'on' }}
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_lounge_power_request
|
||||
data:
|
||||
option: "{{ desired }}"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.lounge_hvac_requested_mode
|
||||
data:
|
||||
option: "{{ 'off' if desired == 'off' else 'none' }}"
|
||||
- service: "climate.turn_{{ desired }}"
|
||||
target:
|
||||
entity_id: climate.lounge
|
||||
- delay: "00:00:30"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_lounge_power_request
|
||||
data:
|
||||
option: idle
|
||||
|
||||
flounder_master_bedroom_power_toggle:
|
||||
alias: Flounder Master Bedroom Heat Pump Power Toggle
|
||||
mode: restart
|
||||
sequence:
|
||||
- variables:
|
||||
pending: "{{ states('input_select.flounder_master_bedroom_power_request') }}"
|
||||
requested_mode: "{{ states('input_select.master_bedroom_hvac_requested_mode') }}"
|
||||
desired: >-
|
||||
{% set is_on = requested_mode in ['heat', 'cool', 'dry'] or pending == 'on' or (pending == 'idle' and not is_state('climate.master_bedroom', 'off')) %}
|
||||
{{ 'off' if is_on else 'on' }}
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_master_bedroom_power_request
|
||||
data:
|
||||
option: "{{ desired }}"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.master_bedroom_hvac_requested_mode
|
||||
data:
|
||||
option: "{{ 'off' if desired == 'off' else 'none' }}"
|
||||
- service: "climate.turn_{{ desired }}"
|
||||
target:
|
||||
entity_id: climate.master_bedroom
|
||||
- delay: "00:00:30"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_master_bedroom_power_request
|
||||
data:
|
||||
option: idle
|
||||
|
||||
flounder_lounge_hvac_mode:
|
||||
alias: Flounder Lounge HVAC Mode
|
||||
mode: restart
|
||||
fields:
|
||||
mode:
|
||||
description: HVAC mode to request
|
||||
sequence:
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.lounge_hvac_requested_mode
|
||||
data:
|
||||
option: "{{ mode }}"
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: "{{ mode == 'off' }}"
|
||||
sequence:
|
||||
- service: climate.turn_off
|
||||
target:
|
||||
entity_id: climate.lounge
|
||||
default:
|
||||
- service: climate.set_hvac_mode
|
||||
target:
|
||||
entity_id: climate.lounge
|
||||
data:
|
||||
hvac_mode: "{{ mode }}"
|
||||
|
||||
flounder_lounge_setpoint_adjust:
|
||||
alias: Flounder Lounge Setpoint Adjust
|
||||
mode: restart
|
||||
fields:
|
||||
step:
|
||||
description: Setpoint change in degrees C
|
||||
sequence:
|
||||
- variables:
|
||||
current_ui: "{{ states('input_number.lounge_setpoint_ui') | float(0) }}"
|
||||
current_climate: "{{ state_attr('climate.lounge', 'temperature') | float(22) }}"
|
||||
current: "{{ current_ui if current_ui >= 16 else current_climate }}"
|
||||
requested: "{{ [30, [16, current + (step | float(0))] | max] | min | round(1) }}"
|
||||
- service: input_boolean.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.flounder_lounge_setpoint_pending
|
||||
- service: input_number.set_value
|
||||
target:
|
||||
entity_id: input_number.lounge_setpoint_ui
|
||||
data:
|
||||
value: "{{ requested }}"
|
||||
- service: climate.set_temperature
|
||||
target:
|
||||
entity_id: climate.lounge
|
||||
data:
|
||||
temperature: "{{ requested }}"
|
||||
- wait_template: >-
|
||||
{{ (((state_attr('climate.lounge', 'temperature') | float(0)) - (requested | float(0))) | abs) < 0.01 }}
|
||||
timeout: "00:00:30"
|
||||
continue_on_timeout: true
|
||||
- service: input_boolean.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.flounder_lounge_setpoint_pending
|
||||
|
||||
flounder_master_bedroom_setpoint_adjust:
|
||||
alias: Flounder Master Bedroom Setpoint Adjust
|
||||
mode: restart
|
||||
fields:
|
||||
step:
|
||||
description: Setpoint change in degrees C
|
||||
sequence:
|
||||
- variables:
|
||||
current_ui: "{{ states('input_number.master_bedroom_setpoint_ui') | float(0) }}"
|
||||
current_climate: "{{ state_attr('climate.master_bedroom', 'temperature') | float(22) }}"
|
||||
current: "{{ current_ui if current_ui >= 16 else current_climate }}"
|
||||
requested: "{{ [30, [16, current + (step | float(0))] | max] | min | round(1) }}"
|
||||
- service: input_boolean.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.flounder_master_bedroom_setpoint_pending
|
||||
- service: input_number.set_value
|
||||
target:
|
||||
entity_id: input_number.master_bedroom_setpoint_ui
|
||||
data:
|
||||
value: "{{ requested }}"
|
||||
- service: climate.set_temperature
|
||||
target:
|
||||
entity_id: climate.master_bedroom
|
||||
data:
|
||||
temperature: "{{ requested }}"
|
||||
- wait_template: >-
|
||||
{{ (((state_attr('climate.master_bedroom', 'temperature') | float(0)) - (requested | float(0))) | abs) < 0.01 }}
|
||||
timeout: "00:00:30"
|
||||
continue_on_timeout: true
|
||||
- service: input_boolean.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.flounder_master_bedroom_setpoint_pending
|
||||
|
||||
flounder_lounge_nanoe_toggle:
|
||||
alias: Flounder Lounge Nanoe Toggle
|
||||
mode: restart
|
||||
sequence:
|
||||
- variables:
|
||||
pending: "{{ states('input_select.flounder_lounge_nanoe_request') }}"
|
||||
desired: >-
|
||||
{% set is_on = pending == 'on' or (pending == 'idle' and is_state('switch.lounge_nanoe', 'on')) %}
|
||||
{{ 'off' if is_on else 'on' }}
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_lounge_nanoe_request
|
||||
data:
|
||||
option: "{{ desired }}"
|
||||
- service: "switch.turn_{{ desired }}"
|
||||
target:
|
||||
entity_id: switch.lounge_nanoe
|
||||
- delay: "00:00:30"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_lounge_nanoe_request
|
||||
data:
|
||||
option: idle
|
||||
|
||||
flounder_master_bedroom_nanoe_toggle:
|
||||
alias: Flounder Master Bedroom Nanoe Toggle
|
||||
mode: restart
|
||||
sequence:
|
||||
- variables:
|
||||
pending: "{{ states('input_select.flounder_master_bedroom_nanoe_request') }}"
|
||||
desired: >-
|
||||
{% set is_on = pending == 'on' or (pending == 'idle' and is_state('switch.master_bedroom_nanoe', 'on')) %}
|
||||
{{ 'off' if is_on else 'on' }}
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_master_bedroom_nanoe_request
|
||||
data:
|
||||
option: "{{ desired }}"
|
||||
- service: "switch.turn_{{ desired }}"
|
||||
target:
|
||||
entity_id: switch.master_bedroom_nanoe
|
||||
- delay: "00:00:30"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_master_bedroom_nanoe_request
|
||||
data:
|
||||
option: idle
|
||||
|
||||
flounder_lounge_preset_toggle:
|
||||
alias: Flounder Lounge Preset Toggle
|
||||
mode: restart
|
||||
fields:
|
||||
preset:
|
||||
description: Preset to toggle
|
||||
sequence:
|
||||
- variables:
|
||||
pending: "{{ states('input_select.flounder_lounge_preset_request') }}"
|
||||
current: "{{ pending if pending != 'idle' else (state_attr('climate.lounge', 'preset_mode') or 'none') }}"
|
||||
desired: "{{ 'none' if current == preset else preset }}"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_lounge_preset_request
|
||||
data:
|
||||
option: "{{ desired }}"
|
||||
- service: climate.set_preset_mode
|
||||
target:
|
||||
entity_id: climate.lounge
|
||||
data:
|
||||
preset_mode: "{{ desired }}"
|
||||
- delay: "00:00:30"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_lounge_preset_request
|
||||
data:
|
||||
option: idle
|
||||
|
||||
flounder_master_bedroom_preset_toggle:
|
||||
alias: Flounder Master Bedroom Preset Toggle
|
||||
mode: restart
|
||||
fields:
|
||||
preset:
|
||||
description: Preset to toggle
|
||||
sequence:
|
||||
- variables:
|
||||
pending: "{{ states('input_select.flounder_master_bedroom_preset_request') }}"
|
||||
current: "{{ pending if pending != 'idle' else (state_attr('climate.master_bedroom', 'preset_mode') or 'none') }}"
|
||||
desired: "{{ 'none' if current == preset else preset }}"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_master_bedroom_preset_request
|
||||
data:
|
||||
option: "{{ desired }}"
|
||||
- service: climate.set_preset_mode
|
||||
target:
|
||||
entity_id: climate.master_bedroom
|
||||
data:
|
||||
preset_mode: "{{ desired }}"
|
||||
- delay: "00:00:30"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.flounder_master_bedroom_preset_request
|
||||
data:
|
||||
option: idle
|
||||
|
||||
automation:
|
||||
- id: flounder_lounge_setpoint_sync
|
||||
alias: Flounder Lounge Setpoint Sync
|
||||
mode: restart
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: climate.lounge
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: input_boolean.flounder_lounge_setpoint_pending
|
||||
state: "off"
|
||||
action:
|
||||
- variables:
|
||||
setpoint: "{{ state_attr('climate.lounge', 'temperature') | float(0) }}"
|
||||
- condition: template
|
||||
value_template: "{{ setpoint >= 16 }}"
|
||||
- service: input_number.set_value
|
||||
target:
|
||||
entity_id: input_number.lounge_setpoint_ui
|
||||
data:
|
||||
value: "{{ setpoint }}"
|
||||
|
||||
- id: lounge_hvac_clear_requested_mode
|
||||
alias: Lounge HVAC - Clear Requested Mode
|
||||
mode: restart
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: climate.lounge
|
||||
- platform: state
|
||||
entity_id: input_select.lounge_hvac_requested_mode
|
||||
to: ["off", heat, cool]
|
||||
condition:
|
||||
- condition: template
|
||||
value_template: "{{ states('input_select.lounge_hvac_requested_mode') != 'none' }}"
|
||||
action:
|
||||
- delay: "00:00:03"
|
||||
- choose:
|
||||
- conditions: >-
|
||||
{% set requested = states('input_select.lounge_hvac_requested_mode') %}
|
||||
{{ requested == states('climate.lounge') }}
|
||||
sequence:
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.lounge_hvac_requested_mode
|
||||
data:
|
||||
option: none
|
||||
default:
|
||||
- delay: "00:00:27"
|
||||
- service: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.lounge_hvac_requested_mode
|
||||
data:
|
||||
option: none
|
||||
Reference in New Issue
Block a user