Skip to content

Instantly share code, notes, and snippets.

@HarvsG
Last active March 7, 2025 06:37
Show Gist options
  • Save HarvsG/cc86381dc99169159d6d4cd870c36e46 to your computer and use it in GitHub Desktop.
Save HarvsG/cc86381dc99169159d6d4cd870c36e46 to your computer and use it in GitHub Desktop.
HA Blueprint to match color temperature of lights to the sun
blueprint:
name: Match Outside Colour Temperature Kelvin
description: When a light turns on or the sun elevation changes match the outside
colour temperature. It will apply to any bulb that supports color temperature.
It triggers whenever a bulb turns on, on sun elevation changes and every 5 minutes.
domain: automation
input:
target_lights:
name: Lights
description: The primary lights to be controlled
selector:
entity:
domain: light
multiple: true
min_color_temp:
name: Coolest Color Temperature
description: The most blue color your bulbs will be set to
default: 4000
selector:
color_temp:
min: 1500
max: 7000
unit: kelvin
max_color_temp:
name: Warmest Color Temperature
description: The most yellow color your bulbs will be set to
default: 2202
selector:
color_temp:
min: 1500
max: 7000
unit: kelvin
brightness_action:
name: Brightness
description: When a device turns on its color temperature will be set, this
may interfere with the brightness, this action will run half a second later
to set the light's brightness.
selector:
action: {}
default:
- service: light.turn_on
data:
brightness: '{{max(trigger.to_state.attributes.brightness,2)}}'
target:
entity_id: '{{trigger.entity_id}}'
alias: Default - Set light to its original brightness, don't use brightness
1 as it causes issues with some bulbs
source_url: https://gist.github.com/HarvsG/cc86381dc99169159d6d4cd870c36e46
variables:
target_lights: !input target_lights
target_on_lights: '{{states.light | selectattr(''state'',''eq'',''on'') | selectattr(''attributes.supported_color_modes'',''match'',".*color_temp.*")
| map(attribute=''entity_id'') | select("in",target_lights) | list }}'
min_color_temp: !input min_color_temp
max_color_temp: !input max_color_temp
color_temp: '{{ [([(((4791.67 - 3290.66/(1 + 0.222 * ([([0,state_attr(''sun.sun'',
''elevation'')]|max),90]|min**0.81))))|int),max_color_temp]|max),min_color_temp]|min}}'
trigger:
- platform: state
entity_id: !input target_lights
to: 'on'
id: single_light_on
- platform: state
entity_id:
- sun.sun
attribute: elevation
id: elevation_change
- platform: time_pattern
minutes: '5'
id: every_5_min
condition:
- condition: template
value_template: '{{ (states.light | selectattr(''state'',''eq'',''on'') | map(attribute=''entity_id'')
| list)!= [] }}'
action:
- choose:
- conditions:
- condition: trigger
id: single_light_on
sequence:
- service: light.turn_on
data:
color_temp_kelvin: '{{color_temp}}'
target:
entity_id: '{{trigger.entity_id}}'
- delay:
milliseconds: 500
- choose:
default: !input brightness_action
- conditions:
- condition: or
conditions:
- condition: trigger
id: every_5_min
- condition: trigger
id: elevation_change
sequence:
- service: light.turn_on
data:
color_temp_kelvin: '{{color_temp}}'
transition: 5
target:
entity_id: '{{target_on_lights}}'
mode: parallel
@texnic
Copy link

texnic commented Dec 14, 2024

Thanks a lot for sharing this work!

min_color_temp and max_color_temp should probably be named the other way around, since "the most blue" colour has a higher colour temperature. With the naming as is, this line is hard to digest:

color_temp: '{{ [([(((4791.67 - 3290.66/(1 + 0.222 * ([([0,state_attr(''sun.sun'', ''elevation'')]|max),90]|min**0.81))))|int),max_color_temp]|max),min_color_temp]|min}}'

[<calculation>, max_color_temp]|max would allow setting temperature to higher than max_color_temp, which doesn't make sense. The same for min.

@HarvsG
Copy link
Author

HarvsG commented Dec 14, 2024

Yes this is vestigial from when home assistant used Mireds which is the inverse of Kelvin.
It also results for the colour temperature paradox which is that high temperature whites are often described as 'cool' and low Kelvin temperature whites are described as 'warm'.

@aereaux
Copy link

aereaux commented Jan 30, 2025

I'm getting this error with a recent version of home-assistant:

WARNING (MainThread) [homeassistant.components.light] Got `kelvin` argument in `turn_on` service, which is deprecated and will break in Home Assistant 2026.1, please use `color_temp_kelvin` argument

Sounds like the data: kelvin: needs to be changed to color_temp_kelvin?

@HarvsG
Copy link
Author

HarvsG commented Feb 6, 2025

Sounds like the data: kelvin: needs to be changed to color_temp_kelvin?

Thank you, I have done this now and it appears to be working

To update, click re-import blueprint:
image

@oneseventhree
Copy link

Sounds like the data: kelvin: needs to be changed to color_temp_kelvin?

Thank you, I have done this now and it appears to be working

To update, click re-import blueprint: image

Hi, I don't see color_temp_kelvin on the code above?

@HarvsG
Copy link
Author

HarvsG commented Mar 7, 2025

Sounds like the data: kelvin: needs to be changed to color_temp_kelvin?

Thank you, I have done this now and it appears to be working
To update, click re-import blueprint: image

Hi, I don't see color_temp_kelvin on the code above?

Line 82 and 99

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment