Document kitchen sink circadian automation

This commit is contained in:
Carlo Costanzo
2026-04-28 17:55:03 -04:00
parent e79a383586
commit 67224ed4a3
2 changed files with 119 additions and 0 deletions

View File

@@ -28,6 +28,7 @@ Event-driven automations that sit outside the self-contained packages. These tie
| File | Why it matters |
| --- | --- |
| [garage_entry_light.yaml](garage_entry_light.yaml) | Z-Wave door sensor + motion-controlled garage entry lighting. |
| [kitchen_sink_circadian.yaml](kitchen_sink_circadian.yaml) | Sink light follows a soft morning, warm daytime, and sunset color-temperature schedule. |
| [dark_rainy_day.yaml](dark_rainy_day.yaml) | Weather-aware lighting helper for gloomy days. |
| [dash_buttons.yaml](dash_buttons.yaml) | Amazon Dash buttons repurposed as quick triggers. |
| [good_night.yaml](good_night.yaml) | Whole-house shutdown and lock-up routine. |

View File

@@ -0,0 +1,118 @@
######################################################################
# @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.
# -------------------------------------------------------------------
# Notes: Uses color temperature only to avoid inherited color scenes.
######################################################################
- 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: 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 }}
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 }}
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 ((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: "{{ 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