From 67224ed4a3194f00f838c21710a5b45f69db90a8 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Tue, 28 Apr 2026 17:55:03 -0400 Subject: [PATCH] Document kitchen sink circadian automation --- config/automation/README.md | 1 + config/automation/kitchen_sink_circadian.yaml | 118 ++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 config/automation/kitchen_sink_circadian.yaml diff --git a/config/automation/README.md b/config/automation/README.md index a563ba0c..7660295e 100755 --- a/config/automation/README.md +++ b/config/automation/README.md @@ -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. | diff --git a/config/automation/kitchen_sink_circadian.yaml b/config/automation/kitchen_sink_circadian.yaml new file mode 100644 index 00000000..53fbf5e2 --- /dev/null +++ b/config/automation/kitchen_sink_circadian.yaml @@ -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