ha_cercadian_alarm/blueprint_parabolic_alarm_script.yaml
2024-09-24 08:24:29 -04:00

154 lines
4.8 KiB
YAML

blueprint:
name: Lamp Wake Up
author: steriku
description: >
IN TESTING ONLY. NOT FINISHED. DO NOT USE
Campanion Script to the parabolic alarm automation blueprint. Turn on lamps brighter based on wake time
source_url: https://github.com/steku/ha_cercadian_alarm/blob/main/blueprint_parabolic_alarm_script.yaml
domain: script
homeassistant:
min_version: 2024.9.0
input:
target_kelvin:
description: Coldest Kelvin value. This is the end value - most white
selector:
color_temp:
unit: kelvin
required: true
default: 6500
name: Coldest Kelvin
example: 6500
start_kelvin:
description: >-
This is the start value. If the light is on the current value from the
state of the light will be used and this will be ignored.
example: 2500
selector:
color_temp:
unit: kelvin
min: 2500
max: 6500
default: 6500
required: true
name: Warmest Kelvin
max_brightness_pct:
description: Maximum brightness in percent to reach by the end of the script
example: 80
selector:
number:
min: 1
max: 100
default: 80
required: true
name: Max brightness
alarm_length:
description: >-
This is the start to finish time. Take this into account when setting up
the automation this script is called by.
example: 10
selector:
number:
min: 1
max: 60
default: 10
required: true
name: Alarm Length
steps_per_minute:
description: How many steps per minute
example: 4
selector:
number:
min: 1
max: 12
default: 12
name: Steps Per minute
required: true
target_light:
description: A single light or group
example: light.master_lamp
selector:
entity:
filter:
domain: light
name: Target Light
required: true
light_timeout:
description: >-
Minutes to delay after Max Brightness has been reached to turn the light
back off. Value of 0 disables the timeout
example: 5
selector:
number:
min: 0
max: 60
default: 5
name: Light Timeout
required: true
variables:
steps: "{{ !input alarm_length * !input steps_per_minute }}"
min_brightness: |-
{% if states(!input target_light) == 'off' %}
3
{% else %}
{{ state_attr(!input target_light, 'brightness') }}
{% endif %}
max_brightness: "{{ !input max_brightness_pct * 2.55 }}"
kelvin_step: "{{ (!input target_kelvin - !input start_kelvin) / steps }}"
bright_step: "{{ (!input max_brightness - !input min_brightness) / steps }}"
start_time: "{{ as_timestamp(now()) }}"
individual_step: "{{ 60 / !input steps_per_minute }}"
mode: parallel
sequence:
- repeat:
until:
- condition: or
conditions:
- condition: template
value_template: "{{ is_state(!input target_light, 'off') }}"
- condition: template
value_template: "{{ state_attr(!input target_light, 'brightness') >= max_brightness }}"
- condition: template
value_template: >-
{{ state_attr(!input target_light, 'color_temp_kelvin') >=
target_kelvin }}
- condition: template
value_template: >-
{{ (((as_timestamp(now()) - start_time) / individual_step) |
round(0, "ceil")) > steps }}
sequence:
- variables:
steps_to_now: |-
{{ ((as_timestamp(now()) - start_time) / individual_step) |
round(0, "ceil") }}
brightness: >-
{{ min_brightness + (bright_step * steps_to_now) | round(0,
'ceil') }}
kelvin: "{{ !input start_kelvin + (kelvin_step * steps_to_now) }}"
- delay:
seconds: "{{ individual_step }}"
- if:
- condition: template
value_template: "{{ is_state(!input target_light, 'on') }}"
then:
- data:
brightness: "{{ brightness }}"
color_temp_kelvin: "{{ kelvin }}"
transition: "{{ individual_step - 1 }}"
target:
entity_id: "{{ !input target_light }}"
action: light.turn_on
- if:
- condition: and
conditions:
- condition: template
value_template: "{{ !input light_timeout != 0 }}"
- condition: template
value_template: "{{ is_state(!input target_light, 'on') }}"
then:
- delay:
minutes: "{{ !input light_timeout }}"
- data: {}
target:
entity_id: "{{ !input target_light }}"
action: light.turn_off