esphome devices & scripts
This commit is contained in:
@@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
# PACKAGE: Bedtime Mode Delayed Shutdown
|
||||
###############################################################################
|
||||
#
|
||||
# VERSION:
|
||||
# 1.3 - 2026-05-07
|
||||
# - Added downstairs lights all off script.
|
||||
# - Added main hallway nightlights 60 minute bedtime timer.
|
||||
# - Added timer cancellation if main hallway nightlights are manually turned off.
|
||||
#
|
||||
# 1.2 - 2026-05-04
|
||||
# - Removed script field selectors to avoid HA selector validation error.
|
||||
#
|
||||
# 1.1 - 2026-05-04
|
||||
# - Added lounge scene selection to "All Off".
|
||||
# - Added quiet time activation.
|
||||
#
|
||||
# 1.0 - 2026-05-04
|
||||
# - Initial package.
|
||||
# - Triggered by input_button.bedtime_mode or ESPHome lounge hold event.
|
||||
# - Turns listed entities off after individual delays.
|
||||
# - Only sends OFF if the entity is currently on/active.
|
||||
#
|
||||
# NOTES:
|
||||
# - Add more entities to bedtime_delayed_off_targets.
|
||||
# - delay_seconds is counted from the original button press.
|
||||
# - Delays are not cumulative.
|
||||
# - switch and remote entities are only turned off if state == "on".
|
||||
# - climate entities are turned off if they are not already "off".
|
||||
# - Main hallway nightlights are turned on for 60 minutes when bedtime mode runs.
|
||||
# - If the main hallway nightlights are turned off manually, the timer is cancelled.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
###############################################################################
|
||||
# TIMER
|
||||
###############################################################################
|
||||
|
||||
timer:
|
||||
main_hallway_nightlights_bedtime:
|
||||
name: Main Hallway Nightlights Bedtime Timer
|
||||
duration: "01:00:00"
|
||||
|
||||
###############################################################################
|
||||
# AUTOMATIONS
|
||||
###############################################################################
|
||||
|
||||
automation:
|
||||
- id: bedtime_mode_delayed_shutdown
|
||||
alias: "Bedtime Mode - Delayed Shutdown"
|
||||
description: >
|
||||
Runs bedtime delayed shutdown when the bedtime button is pressed or when
|
||||
the lounge switch hold ESPHome event is seen.
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: input_button.bedtime_mode
|
||||
id: bedtime_mode_button
|
||||
|
||||
- platform: event
|
||||
event_type: esphome.lounge_switch_hold
|
||||
id: lounge_switch_hold
|
||||
|
||||
variables:
|
||||
bedtime_delayed_off_targets:
|
||||
- entity_id: switch.esp_mainkitchenlights_relay_1_main_lights
|
||||
delay_seconds: 4
|
||||
|
||||
- entity_id: switch.esp_mainkitchenlights_relay_2_benchtop_lights
|
||||
delay_seconds: 4
|
||||
|
||||
- entity_id: switch.esp_entrancelightswitch_relay_1_entrance_lights
|
||||
delay_seconds: 5
|
||||
|
||||
- entity_id: switch.esp_garageentrylights_relay_3_garage_lights
|
||||
delay_seconds: 10
|
||||
|
||||
- entity_id: switch.esp_garageentrylights_relay_1_corridor_lights
|
||||
delay_seconds: 10
|
||||
|
||||
- entity_id: switch.rinnai_neo_gas_heater_heater_operation
|
||||
delay_seconds: 1
|
||||
|
||||
- entity_id: climate.lounge
|
||||
delay_seconds: 1
|
||||
|
||||
- entity_id: switch.lounge_cupboard_dual_usb_xus09_l2
|
||||
delay_seconds: 2
|
||||
|
||||
- entity_id: switch.tv_surround_amp_power_in_loft_x27pp
|
||||
delay_seconds: 1
|
||||
|
||||
- entity_id: remote.lounge_tv
|
||||
delay_seconds: 0
|
||||
|
||||
action:
|
||||
- service: script.downstairs_lights_all_off
|
||||
|
||||
- service: script.lounge_set_scene
|
||||
data:
|
||||
scene_name: "All Off"
|
||||
|
||||
- service: input_boolean.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.quiet_time
|
||||
|
||||
- service: switch.turn_on
|
||||
target:
|
||||
entity_id: switch.main_hallway_nightlights_1_relay_1_main_hallway_nightlights
|
||||
|
||||
- service: timer.start
|
||||
target:
|
||||
entity_id: timer.main_hallway_nightlights_bedtime
|
||||
data:
|
||||
duration: "01:00:00"
|
||||
|
||||
- repeat:
|
||||
for_each: "{{ bedtime_delayed_off_targets }}"
|
||||
sequence:
|
||||
- service: script.turn_on
|
||||
target:
|
||||
entity_id: script.bedtime_mode_turn_entity_off_after_delay
|
||||
data:
|
||||
variables:
|
||||
target_entity: "{{ repeat.item.entity_id }}"
|
||||
delay_seconds: "{{ repeat.item.delay_seconds | int(0) }}"
|
||||
|
||||
mode: queued
|
||||
max: 5
|
||||
|
||||
- id: bedtime_mode_cancel_main_hallway_nightlights_timer
|
||||
alias: "Bedtime Mode - Cancel Main Hallway Nightlights Timer"
|
||||
description: >
|
||||
Cancels the bedtime nightlights timer if something else turns the
|
||||
main hallway nightlights off.
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: switch.main_hallway_nightlights_1_relay_1_main_hallway_nightlights
|
||||
to: "off"
|
||||
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: timer.main_hallway_nightlights_bedtime
|
||||
state: "active"
|
||||
|
||||
action:
|
||||
- service: timer.cancel
|
||||
target:
|
||||
entity_id: timer.main_hallway_nightlights_bedtime
|
||||
|
||||
mode: single
|
||||
|
||||
- id: bedtime_mode_main_hallway_nightlights_timer_finished
|
||||
alias: "Bedtime Mode - Main Hallway Nightlights Timer Finished"
|
||||
description: >
|
||||
Turns the main hallway nightlights off when the bedtime timer finishes.
|
||||
|
||||
trigger:
|
||||
- platform: event
|
||||
event_type: timer.finished
|
||||
event_data:
|
||||
entity_id: timer.main_hallway_nightlights_bedtime
|
||||
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: switch.main_hallway_nightlights_1_relay_1_main_hallway_nightlights
|
||||
state: "on"
|
||||
|
||||
action:
|
||||
- service: switch.turn_off
|
||||
target:
|
||||
entity_id: switch.main_hallway_nightlights_1_relay_1_main_hallway_nightlights
|
||||
|
||||
mode: single
|
||||
|
||||
###############################################################################
|
||||
# SCRIPTS
|
||||
###############################################################################
|
||||
|
||||
script:
|
||||
bedtime_mode_turn_entity_off_after_delay:
|
||||
alias: "Bedtime Mode - Turn Entity Off After Delay"
|
||||
description: >
|
||||
Waits for the supplied delay, checks whether the supplied entity is still
|
||||
on/active, then sends the correct turn_off command for its domain.
|
||||
|
||||
sequence:
|
||||
- delay:
|
||||
seconds: "{{ delay_seconds | int(0) }}"
|
||||
|
||||
- variables:
|
||||
target_domain: "{{ target_entity.split('.')[0] }}"
|
||||
|
||||
- condition: template
|
||||
value_template: >
|
||||
{% if target_domain == 'climate' %}
|
||||
{{ states(target_entity) not in ['off', 'unknown', 'unavailable'] }}
|
||||
{% else %}
|
||||
{{ is_state(target_entity, 'on') }}
|
||||
{% endif %}
|
||||
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: "{{ target_domain == 'switch' }}"
|
||||
sequence:
|
||||
- service: switch.turn_off
|
||||
data:
|
||||
entity_id: "{{ target_entity }}"
|
||||
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: "{{ target_domain == 'climate' }}"
|
||||
sequence:
|
||||
- service: climate.turn_off
|
||||
data:
|
||||
entity_id: "{{ target_entity }}"
|
||||
|
||||
- conditions:
|
||||
- condition: template
|
||||
value_template: "{{ target_domain == 'remote' }}"
|
||||
sequence:
|
||||
- service: remote.turn_off
|
||||
data:
|
||||
entity_id: "{{ target_entity }}"
|
||||
|
||||
default:
|
||||
- service: homeassistant.turn_off
|
||||
data:
|
||||
entity_id: "{{ target_entity }}"
|
||||
|
||||
mode: parallel
|
||||
max: 50
|
||||
Reference in New Issue
Block a user