You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
5.1 KiB
145 lines
5.1 KiB
######################################################################
|
|
# @CCOSTAN - Follow Me on X
|
|
# For more info visit https://www.vcloudinfo.com/click-here
|
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
|
# -------------------------------------------------------------------
|
|
# Kitchen Sink Circadian Light - all-day white tuning
|
|
# Turns on after morning bed exits, follows the sun, and shuts down at bedtime.
|
|
# -------------------------------------------------------------------
|
|
# Related Issue: n/a
|
|
# Notes: Uses color temperature only to avoid inherited color scenes.
|
|
# TV playback keeps the sink off so media time does not re-light it.
|
|
# Notes: Office lamp switch off-gates the sink while active PC work is in progress.
|
|
######################################################################
|
|
|
|
- alias: "Kitchen Sink Circadian Daylight"
|
|
id: 29d81314-d4c3-4e62-8c1d-9f7f68bc7148
|
|
mode: restart
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- binary_sensor.sleepnumber_carlo_carlo_is_in_bed
|
|
- binary_sensor.sleepnumber_carlo_stacey_is_in_bed
|
|
from: "on"
|
|
to: "off"
|
|
for: "00:05:00"
|
|
id: bed_exit
|
|
- platform: state
|
|
entity_id:
|
|
- binary_sensor.sleepnumber_carlo_carlo_is_in_bed
|
|
- binary_sensor.sleepnumber_carlo_stacey_is_in_bed
|
|
from: "off"
|
|
to: "on"
|
|
for: "00:05:00"
|
|
id: bed_in
|
|
- platform: state
|
|
entity_id: media_player.living_room_ultra
|
|
to: "playing"
|
|
id: tv_playing
|
|
- platform: state
|
|
entity_id: switch.office_lamp_switch
|
|
to: "on"
|
|
id: working
|
|
- platform: sun
|
|
event: sunrise
|
|
offset: "-00:30:00"
|
|
id: tune
|
|
- platform: sun
|
|
event: sunrise
|
|
offset: "+01:00:00"
|
|
id: tune
|
|
- platform: sun
|
|
event: sunset
|
|
offset: "-01:00:00"
|
|
id: tune
|
|
- platform: sun
|
|
event: sunset
|
|
offset: "+00:30:00"
|
|
id: tune
|
|
- platform: time_pattern
|
|
minutes: "/30"
|
|
id: tune
|
|
- platform: homeassistant
|
|
event: start
|
|
id: tune
|
|
|
|
action:
|
|
- variables:
|
|
bedtime_active: >-
|
|
{% set carlo_done = is_state('binary_sensor.sleepnumber_carlo_carlo_is_in_bed', 'on')
|
|
or is_state('person.carlo', 'not_home') %}
|
|
{% set stacey_done = is_state('binary_sensor.sleepnumber_carlo_stacey_is_in_bed', 'on')
|
|
or is_state('person.stacey', 'not_home') %}
|
|
{% set evening = is_state('sun.sun', 'below_horizon') or now().hour >= 20 or now().hour < 4 %}
|
|
{{ evening and carlo_done and stacey_done }}
|
|
tv_active: >-
|
|
{{ is_state('media_player.living_room_ultra', 'playing') }}
|
|
awake_home: >-
|
|
{% set carlo_awake = is_state('person.carlo', 'home')
|
|
and is_state('binary_sensor.sleepnumber_carlo_carlo_is_in_bed', 'off') %}
|
|
{% set stacey_awake = is_state('person.stacey', 'home')
|
|
and is_state('binary_sensor.sleepnumber_carlo_stacey_is_in_bed', 'off') %}
|
|
{{ carlo_awake or stacey_awake }}
|
|
working_active: >-
|
|
{{ is_state('switch.office_lamp_switch', 'on') }}
|
|
target_kelvin: >-
|
|
{% set elevation = state_attr('sun.sun', 'elevation') | float(-90) %}
|
|
{% if elevation <= -2 %}
|
|
2600
|
|
{% elif elevation < 8 %}
|
|
{{ (2600 + ((elevation + 2) / 10 * 500)) | round(0) | int }}
|
|
{% elif elevation < 25 %}
|
|
{{ (3100 + ((elevation - 8) / 17 * 500)) | round(0) | int }}
|
|
{% else %}
|
|
3600
|
|
{% endif %}
|
|
target_brightness: >-
|
|
{% set elevation = state_attr('sun.sun', 'elevation') | float(-90) %}
|
|
{% if elevation <= -2 %}
|
|
60
|
|
{% elif elevation < 8 %}
|
|
75
|
|
{% elif elevation < 25 %}
|
|
88
|
|
{% else %}
|
|
100
|
|
{% endif %}
|
|
- variables:
|
|
manage_sink: >-
|
|
{{ is_state('group.family', 'home')
|
|
and is_state('input_boolean.guest_mode', 'off')
|
|
and not (tv_active | bool)
|
|
and not (working_active | bool)
|
|
and ((awake_home | bool) or is_state('light.sink', 'on'))
|
|
and (is_state('light.sink', 'on') or now().hour >= 4) }}
|
|
- choose:
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ tv_active | bool or working_active | bool }}"
|
|
sequence:
|
|
- service: light.turn_off
|
|
target:
|
|
entity_id: light.sink
|
|
data:
|
|
transition: 60
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ bedtime_active | bool }}"
|
|
sequence:
|
|
- service: light.turn_off
|
|
target:
|
|
entity_id: light.sink
|
|
data:
|
|
transition: 60
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ manage_sink | bool }}"
|
|
sequence:
|
|
- service: light.turn_on
|
|
target:
|
|
entity_id: light.sink
|
|
data:
|
|
brightness_pct: "{{ target_brightness | int }}"
|
|
color_temp_kelvin: "{{ target_kelvin | int }}"
|
|
transition: 120
|