121 lines
3.8 KiB
Plaintext
121 lines
3.8 KiB
Plaintext
# ------------------------------
|
|
# TIMER HELPER (define in YAML so it definitely exists)
|
|
# ------------------------------
|
|
timer:
|
|
master_bedroom_climate_timer:
|
|
name: Master Bedroom Climate Timer
|
|
duration: "00:00:00"
|
|
|
|
# ------------------------------
|
|
# DROPDOWN (sleep timer)
|
|
# ------------------------------
|
|
input_select:
|
|
master_bedroom_climate_timer_duration:
|
|
name: Master Bedroom Aircon Sleep
|
|
options:
|
|
- "1 hour"
|
|
- "2 hours"
|
|
- "3 hours"
|
|
- "6 hours"
|
|
- "Cancel timer"
|
|
initial: "Cancel timer"
|
|
icon: mdi:timer-outline
|
|
|
|
# ------------------------------
|
|
# LIVE REMAINING (updates immediately on selection, and every minute)
|
|
# ------------------------------
|
|
template:
|
|
- trigger:
|
|
# Update once per minute (suits hh:mm display)
|
|
- platform: time_pattern
|
|
minutes: "/1"
|
|
|
|
# Update when timer STATE changes (idle/active/paused)
|
|
- platform: state
|
|
entity_id: timer.master_bedroom_climate_timer
|
|
|
|
# Update immediately when user changes the dropdown
|
|
- platform: state
|
|
entity_id: input_select.master_bedroom_climate_timer_duration
|
|
|
|
sensor:
|
|
- name: "Master Bedroom Climate Timer Remaining"
|
|
unique_id: master_bedroom_climate_timer_remaining
|
|
icon: mdi:timer
|
|
state: >-
|
|
{% set st = states('timer.master_bedroom_climate_timer') | lower %}
|
|
{% if st == 'idle' %}
|
|
0:00
|
|
{% else %}
|
|
{% set fa = state_attr('timer.master_bedroom_climate_timer', 'finishes_at') %}
|
|
{% if fa %}
|
|
{% set end = as_datetime(fa) %}
|
|
{% set sec = (end - now()).total_seconds() | int(0) %}
|
|
{% if sec < 0 %}{% set sec = 0 %}{% endif %}
|
|
{% set hh = (sec // 3600) | int %}
|
|
{% set mm = ((sec % 3600) // 60) | int %}
|
|
{{ hh }}:{{ '%02d' | format(mm) }}
|
|
{% else %}
|
|
0:00
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
# ------------------------------
|
|
# AUTOMATION: start/cancel timer when dropdown changes
|
|
# ------------------------------
|
|
automation:
|
|
- alias: "Start or Cancel Master Bedroom Climate Timer"
|
|
mode: restart
|
|
trigger:
|
|
- platform: state
|
|
entity_id: input_select.master_bedroom_climate_timer_duration
|
|
|
|
variables:
|
|
opt: "{{ states('input_select.master_bedroom_climate_timer_duration') }}"
|
|
dur_map:
|
|
"1 hour": "01:00:00"
|
|
"2 hours": "02:00:00"
|
|
"3 hours": "03:00:00"
|
|
"6 hours": "06:00:00"
|
|
|
|
action:
|
|
- choose:
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ opt in dur_map }}"
|
|
sequence:
|
|
- service: timer.cancel
|
|
target:
|
|
entity_id: timer.master_bedroom_climate_timer
|
|
- delay: "00:00:01"
|
|
- service: timer.start
|
|
target:
|
|
entity_id: timer.master_bedroom_climate_timer
|
|
data:
|
|
duration: "{{ dur_map[opt] }}"
|
|
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: input_select.master_bedroom_climate_timer_duration
|
|
state: "Cancel timer"
|
|
sequence:
|
|
- service: timer.cancel
|
|
target:
|
|
entity_id: timer.master_bedroom_climate_timer
|
|
|
|
- alias: "Turn Off Master Bedroom Climate on Timer Completion"
|
|
trigger:
|
|
- platform: event
|
|
event_type: timer.finished
|
|
event_data:
|
|
entity_id: timer.master_bedroom_climate_timer
|
|
action:
|
|
- service: climate.turn_off
|
|
target:
|
|
entity_id: climate.master_bedroom
|
|
- service: input_select.select_option
|
|
target:
|
|
entity_id: input_select.master_bedroom_climate_timer_duration
|
|
data:
|
|
option: "Cancel timer"
|