# ------------------------------ # 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"