Skip to content

Instantly share code, notes, and snippets.

@HarvsG
Last active May 2, 2024 13:26
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • 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 coolest color your bulbs will be set to
default: 4000
selector:
number:
min: 1500
max: 4500
max_color_temp:
name: Warmest Color Temperature
description: The warmest color your bulbs will be set to
default: 2202
selector:
number:
min: 1500
max: 4500
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:
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:
kelvin: '{{color_temp}}'
transition: 5
target:
entity_id: '{{target_on_lights}}'
mode: parallel
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment