Working version of the script blueprint

This commit is contained in:
Stephen Kuntz 2024-09-24 09:11:54 -04:00
parent c1c7994a6b
commit 304b7d8145
3 changed files with 86 additions and 240 deletions

View File

@ -6,8 +6,8 @@ I created my own script and automation to bypass the frustations above. It is no
The second component is an blueprint that executes the script 3 times in series with different values for each execution.
## Detailed Explaination of Script
The script expects to be kicked off with parameters defined. For the script to work, the target light needs to be and set to starting Kelvin values. The starting brightnes is always 1%. The blueprint handles the inital turning on of the light. The kelvin value of the light will be used as the starting value.
## Detailed Explaination of Script Blueprint
The script expects to be kicked off with parameters defined. For the script to work, the target light needs to be and set to starting Kelvin values. The starting brightnes is always 1%. The automation blueprint handles the inital turning on of the light. The kelvin value of the light will be used as the starting value.
If you turn off the light at any point while the script is running, the script and blueprint will end.

View File

@ -1,147 +0,0 @@
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
fields:
target_kelvin:
description: Coldest Kelvin value. This is the end value - most white
selector:
color_temp:
unit: kelvin
default: 6500
name: Coldest Kelvin
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.
selector:
color_temp:
unit: kelvin
min: 2500
max: 6500
default: 6500
name: Warmest Kelvin
max_brightness_pct:
description: Maximum brightness in percent to reach by the end of the script
selector:
number:
min: 1
max: 100
default: 80
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.
selector:
number:
min: 1
max: 60
default: 10
name: Alarm Length
steps_per_minute:
description: How many steps per minute
selector:
number:
min: 1
max: 12
default: 12
name: Steps Per minute
target_light:
description: A single light or group
selector:
entity:
filter:
domain: light
name: Target Light
light_timeout:
description: >-
Minutes to delay after Max Brightness has been reached to turn the light
back off. Value of 0 disables the timeout
selector:
number:
min: 0
max: 60
default: 5
name: Light Timeout
variables:
# alarm_length: !input alarm_length
# steps_per_minute: !input steps_per_minute
# target_light: !input target_light
# max_brightness_pct: !input max_brightness_pct
# target_kelvin: !input target_kelvin
# start_kelvin: !input start_kelvin
# light_timeout: !input light_timeout
steps: "{{ alarm_length * steps_per_minute }}"
min_brightness: |-
{% if states(target_light) == 'off' %}
3
{% else %}
{{ state_attr(target_light, 'brightness') }}
{% endif %}
max_brightness: "{{ max_brightness_pct * 2.55 }}"
kelvin_step: "{{ (target_kelvin - start_kelvin) / steps }}"
bright_step: "{{ (max_brightness - min_brightness) / steps }}"
start_time: "{{ as_timestamp(now()) }}"
individual_step: "{{ 60 / steps_per_minute }}"
sequence:
- repeat:
until:
- condition: or
conditions:
- condition: template
value_template: "{{ is_state(target_light, 'off') }}"
- condition: template
value_template: "{{ state_attr(target_light, 'brightness') >= max_brightness }}"
- condition: template
value_template: >-
{{ state_attr(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: "{{ start_kelvin + (kelvin_step * steps_to_now) }}"
- delay:
seconds: "{{ individual_step }}"
- if:
- condition: template
value_template: "{{ is_state(target_light, 'on') }}"
then:
- data:
brightness: "{{ brightness }}"
color_temp_kelvin: "{{ kelvin }}"
transition: "{{ individual_step - 1 }}"
target:
entity_id: "{{ target_light }}"
action: light.turn_on
- if:
- condition: and
conditions:
- condition: template
value_template: "{{ light_timeout != 0 }}"
- condition: template
value_template: "{{ is_state(target_light, 'on') }}"
then:
- delay:
minutes: "{{ light_timeout }}"
- data: {}
target:
entity_id: "{{ target_light }}"
action: light.turn_off
mode: parallel

View File

@ -1,4 +1,87 @@
alias: Lamp Wake Up
blueprint:
name: Light Sunrise
author: steriku
description: >
Campanion Script to the parabolic alarm automation blueprint.
source_url: https://github.com/steku/ha_cercadian_alarm/blob/main/blueprint_parabolic_alarm_script.yaml
domain: script
homeassistant:
min_version: 2024.9.0
fields:
target_kelvin:
description: Coldest Kelvin value. This is the end value - most white
selector:
color_temp:
unit: kelvin
default: 6500
name: Coldest Kelvin
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.
selector:
color_temp:
unit: kelvin
min: 2500
max: 6500
default: 6500
name: Warmest Kelvin
max_brightness_pct:
description: Maximum brightness in percent to reach by the end of the script
selector:
number:
min: 1
max: 100
default: 80
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.
selector:
number:
min: 1
max: 60
default: 10
name: Alarm Length
steps_per_minute:
description: How many steps per minute
selector:
number:
min: 1
max: 12
default: 12
name: Steps Per minute
target_light:
description: A single light or group
selector:
entity:
filter:
domain: light
name: Target Light
light_timeout:
description: >-
Minutes to delay after Max Brightness has been reached to turn the light
back off. Value of 0 disables the timeout
selector:
number:
min: 0
max: 60
default: 5
name: Light Timeout
variables:
steps: "{{ alarm_length * steps_per_minute }}"
min_brightness: |-
{% if states(target_light) == 'off' %}
3
{% else %}
{{ state_attr(target_light, 'brightness') }}
{% endif %}
max_brightness: "{{ max_brightness_pct * 2.55 }}"
kelvin_step: "{{ (target_kelvin - start_kelvin) / steps }}"
bright_step: "{{ (max_brightness - min_brightness) / steps }}"
start_time: "{{ as_timestamp(now()) }}"
individual_step: "{{ 60 / steps_per_minute }}"
sequence:
- repeat:
until:
@ -52,94 +135,4 @@ sequence:
target:
entity_id: "{{ target_light }}"
action: light.turn_off
description: Turn on lamps brighter based on wake time
fields:
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: "{{ alarm_length * steps_per_minute }}"
min_brightness: |-
{% if states(target_light) == 'off' %}
3
{% else %}
{{ state_attr(target_light, 'brightness') }}
{% endif %}
max_brightness: "{{ max_brightness_pct * 2.55 }}"
kelvin_step: "{{ (target_kelvin - start_kelvin) / steps }}"
bright_step: "{{ (max_brightness - min_brightness) / steps }}"
start_time: "{{ as_timestamp(now()) }}"
individual_step: "{{ 60 / steps_per_minute }}"
mode: parallel