add alarm blueprint automation

This commit is contained in:
hiperman
2026-01-09 22:08:33 -05:00
parent 3bc8a71d67
commit 95779d9805

View File

@@ -1,140 +1,49 @@
blueprint: blueprint:
name: "Simulated Sunrise Alarm" name: "Simulated Sunrise Alarm"
description: "Smoothly increase light brightness with configurable steps" description: "Smoothly increase light brightness with configurable steps"
domain: script domain: automation
input: input:
target_lights: alarm_time:
name: Target Light(s) name: Alarm Clock Time
description: Light(s) to control description: The time when you should wake up
selector: selector:
target: entity:
entity: domain: input_datetime
domain: light
reversed: alarm_enabled:
name: "Simulate sunset instead of sunrise" name: Alarm Clock Enabled
description: If true, reverses the direction (simulates sunset instead of sunrise) description: Boolean dictating whether the alarm is on or not
selector: selector:
boolean: entity:
default: false domain: input_boolean
steps: offset_duration:
name: Number of Steps name: Offset Duration
description: How many brightness steps in the curve description: How long before/after the alarm time to trigger (use negative values for earlier times).
default: 20 default: "-00:30:00"
selector: selector:
number: duration:
min: 5
max: 100
step: 1
total_duration: alarm_script:
name: Total Duration name: Script to trigger
description: Total time to complete the brightness ramp description: Script to trigger
default: 30
selector: selector:
number: entity:
min: 1 filter:
max: 120 - domain: script
unit_of_measurement: minutes
start_brightness: triggers:
name: Starting Brightness - trigger: time
description: Initial brightness percentage (0-100) at:
default: 1 entity_id: !input alarm_time
selector: offset: !input offset_duration
number:
min: 0
max: 100
step: 1
end_brightness: conditions:
name: Ending Brightness - condition: state
description: Final brightness percentage (0-100) entity_id: !input alarm_enabled
default: 100 state: "on"
selector:
number:
min: 1
max: 100
step: 1
start_temp: mode: restart
name: Starting Color Temperature
description: Final color temperature in Kelvin
default: 2000
selector:
color_temp:
min: 2000
unit: kelvin
end_temp: actions:
name: Ending Color Temperature - action: !input alarm_script
description: Final color temperature in Kelvin
default: 5500
selector:
color_temp:
unit: kelvin
curve_type:
name: Curve Type
default: "parabolic"
description: “linear”, "parabolic" (quadratic), or “sigmoid” (an S-curve/logistic curve)
selector:
select:
options:
- "linear"
- "sigmoidal"
- "parabolic"
variables:
lights: !input target_lights
start_temp: !input start_temp
end_temp: !input end_temp
curve_type: !input curve_type
total_duration: !input total_duration
num_steps: !input steps
step_delay: "{{ (total_duration * 60 / num_steps) | round(0) }}"
start_bright: !input start_brightness
end_bright: !input end_brightness
reversed: !input reversed
# Loop through each step of the curve
sequence:
- repeat:
count: "{{ num_steps }}"
sequence:
- variables:
# Calculate current step (0 to 1 range)
x: "{{ (repeat.index - 1) / (num_steps - 1) }}"
# Reflects the curve in the y-axis if reversed is true
- choose:
- conditions:
- condition: template
value_template: "{{ reversed }}"
sequence:
- variables:
x: "{{ 1 - x }}"
- variables:
curve_func: >
{%- if curve_type == 'linear' -%}
{{ x }}
{%- elif curve_type == 'sigmoidal' -%}
{{ 1 / (1 + (2.71828 ** (-12 * (x - 0.5)))) }}
{%- elif curve_type == 'parabolic' -%}
{{ x ** 2 }}
{%- endif -%}
# Map result to brightness range and color temperature range respectively
current_brightness: "{{ (start_bright + (end_bright - start_bright) * curve_func | float) | round(0) }}"
current_color_temp: "{{ (start_temp + (end_temp - start_temp) * curve_func | float) | round(0) }}"
- service: light.turn_on
target: !input target_lights
data:
brightness_pct: "{{ current_brightness }}"
kelvin: "{{ current_color_temp }}"
transition: "{{ step_delay }}"
- delay: "{{ step_delay }}"