add alarm blueprint automation
This commit is contained in:
@@ -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: light
|
domain: input_datetime
|
||||||
reversed:
|
|
||||||
name: "Simulate sunset instead of sunrise"
|
alarm_enabled:
|
||||||
description: If true, reverses the direction (simulates sunset instead of sunrise)
|
name: Alarm Clock Enabled
|
||||||
|
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 }}"
|
|
||||||
Reference in New Issue
Block a user