From 95779d98057478f1c6b6f9cf1257ad1354fa6319 Mon Sep 17 00:00:00 2001 From: hiperman Date: Fri, 9 Jan 2026 22:08:33 -0500 Subject: [PATCH] add alarm blueprint automation --- sunrise-alarm.yaml | 161 ++++++++++----------------------------------- 1 file changed, 35 insertions(+), 126 deletions(-) diff --git a/sunrise-alarm.yaml b/sunrise-alarm.yaml index 46cde5d..9c4d199 100644 --- a/sunrise-alarm.yaml +++ b/sunrise-alarm.yaml @@ -1,140 +1,49 @@ blueprint: name: "Simulated Sunrise Alarm" description: "Smoothly increase light brightness with configurable steps" - domain: script - + domain: automation input: - target_lights: - name: Target Light(s) - description: Light(s) to control + alarm_time: + name: Alarm Clock Time + description: The time when you should wake up selector: - target: - entity: - domain: light - reversed: - name: "Simulate sunset instead of sunrise" - description: If true, reverses the direction (simulates sunset instead of sunrise) + entity: + domain: input_datetime + + alarm_enabled: + name: Alarm Clock Enabled + description: Boolean dictating whether the alarm is on or not selector: - boolean: - default: false + entity: + domain: input_boolean - steps: - name: Number of Steps - description: How many brightness steps in the curve - default: 20 + offset_duration: + name: Offset Duration + description: How long before/after the alarm time to trigger (use negative values for earlier times). + default: "-00:30:00" selector: - number: - min: 5 - max: 100 - step: 1 + duration: - total_duration: - name: Total Duration - description: Total time to complete the brightness ramp - default: 30 + alarm_script: + name: Script to trigger + description: Script to trigger selector: - number: - min: 1 - max: 120 - unit_of_measurement: minutes + entity: + filter: + - domain: script - start_brightness: - name: Starting Brightness - description: Initial brightness percentage (0-100) - default: 1 - selector: - number: - min: 0 - max: 100 - step: 1 +triggers: + - trigger: time + at: + entity_id: !input alarm_time + offset: !input offset_duration - end_brightness: - name: Ending Brightness - description: Final brightness percentage (0-100) - default: 100 - selector: - number: - min: 1 - max: 100 - step: 1 +conditions: + - condition: state + entity_id: !input alarm_enabled + state: "on" - start_temp: - name: Starting Color Temperature - description: Final color temperature in Kelvin - default: 2000 - selector: - color_temp: - min: 2000 - unit: kelvin +mode: restart - end_temp: - name: Ending Color Temperature - 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 }}" \ No newline at end of file +actions: + - action: !input alarm_script \ No newline at end of file