-
-
Save dglaude/619a9e415e1e34019a6b1f5f274e0d14 to your computer and use it in GitHub Desktop.
| Please find below the various piece of code that together control my RGB light to loop in Rainbow. | |
| Every two seconds, it change from one colour to another based on the value of the second. | |
| So it compute 30 differents RGB value in a "circle", all with the same Saturation and Brightness both forced to 1.0 | |
| The transition from one colour to another is done in one seconds. | |
| The name of my Tradfri RGB light bulb is "light.couleur" | |
| A link to my video on Twitter: | |
| https://twitter.com/DavidGlaude/status/1059596285991366657 | |
| Source code for the Hue based RGB computation from last post of this: | |
| https://community.home-assistant.io/t/hue-random-color-autiomation-help/52122/10 | |
| PS: I am totally not a Home Assistant expert, so there might be better way to implement this. | |
| Fell free to comment or propose better way to control that. | |
| Such as verifying if the light is on (as a condition) before changing the RGB colour. | |
| Anything really, today I just want it to work, but I am ready to learn. |
| ### ### | |
| ### LightsHue - Rotating Hue Every Two Seconds ### | |
| ### ### | |
| - alias: LightsHue - Rotating Hue Every Two Seconds | |
| initial_state: True | |
| trigger: | |
| - platform: time | |
| seconds: '/2' | |
| action: | |
| - service: script.change_exterior | |
| ### Possibly unrelated and not required piece of code... ### | |
| ### This is checking every minute the availability of the light bulb. ### | |
| ### By setting the brightness to current brightness it force the gateway to report the unavailable status. ### | |
| ### This code was found here: https://github.com/home-assistant/home-assistant/issues/17675 ### | |
| - alias: "unavailable_couleur" | |
| initial_state: 'on' | |
| trigger: | |
| platform: time | |
| minutes: '/1' | |
| seconds: 10 | |
| condition: | |
| condition: template | |
| value_template: > | |
| {{ states('light.couleur') != 'unavailable'}} | |
| action: | |
| service: light.turn_on | |
| data_template: | |
| entity_id: light.couleur | |
| brightness: > | |
| {{ state_attr('light.couleur','brightness') | int }} |
| # Your "configuration.yaml" need to countain a reference to your automations.yaml and your scripts.yaml. | |
| # In my case, I don't use "automations.yaml" but my config is split in various files in "automation" folder. | |
| # YMMV | |
| [...] | |
| automation: !include_dir_merge_list automation/ | |
| #automation: !include automations.yaml | |
| script: !include scripts.yaml |
| change_exterior: | |
| alias: Change Exterior Light | |
| sequence: | |
| - service: script.preprocess_color | |
| data: | |
| id: light.couleur | |
| # this script choses a random color for the lights | |
| preprocess_color: | |
| sequence: | |
| - service: script.set_color | |
| data_template: | |
| id: '{{ id }}' | |
| colors: >- | |
| {%- set h = (now().second|int)/60 %} | |
| {%- set s = 1.0 %} | |
| {%- set v = 1.0 %} | |
| {%- set i = (h * 6)|int %} | |
| {%- set f = h * 6 - i %} | |
| {%- set p = v * (1 - s) %} | |
| {%- set q = v * (1 - f * s) %} | |
| {%- set t = v * (1 - (1 - f) * s) %} | |
| {%- if i % 6 == 0 %} | |
| {% set r = v %} | |
| {% set g = t %} | |
| {% set b = p %} | |
| {%- elif i % 6 == 1 %} | |
| {% set r = q %} | |
| {% set g = v %} | |
| {% set b = p %} | |
| {%- elif i % 6 == 2 %} | |
| {% set r = p %} | |
| {% set g = v %} | |
| {% set b = t %} | |
| {%- elif i % 6 == 3 %} | |
| {% set r = p %} | |
| {% set g = q %} | |
| {% set b = v %} | |
| {%- elif i % 6 == 4 %} | |
| {% set r = t %} | |
| {% set g = p %} | |
| {% set b = v %} | |
| {%- elif i % 6 == 5 %} | |
| {% set r = v %} | |
| {% set g = p %} | |
| {% set b = q %} | |
| {%- endif %} | |
| {{ (255*r)|round(0) }}, {{ (255*g)|round(0) }}, {{ (255*b)|round(0) }}, {{ (360*h)|int }} | |
| transition: 1 | |
| set_color: | |
| sequence: | |
| - service: light.turn_on | |
| data_template: | |
| entity_id: '{{ id }}' | |
| rgb_color: [ "{{ colors.split(',')[0]|int }}", "{{ colors.split(',')[1]|int }}", "{{ colors.split(',')[2]|int }}" ] | |
| transition: "{{ transition }}" | |
My son can come out of bed when the light is green. when the light is red or orange, it is to early to wake up. How do I make such an automation ? And is it possible to enter a "time" when it has to be green ?
so setting the time at 07.00 ( not hard coded) ; starting at 06:40 with red for 10 minutes, 06:50 orange for 10 minutes and than at 07:00 half an our or so green ?
Hi I'm trying to achieve change of colour every 5 minutes with smooth transition of colours.
I cannot figure out function if with modulo. I got this but it only works every 5 seconds set in automation. Any other automation timing results in skipping colours.
`alias: Christmas strip led
description: Rotating color every second
trigger:
- hours: ''
platform: time_pattern
minutes: ''
seconds: /5
condition: []
action: - service: script.1637668450615
mode: single
automation:alias: Christmas strip led
description: Rotating color every second
trigger: - hours: ''
platform: time_pattern
minutes: ''
seconds: /5
condition: []
action: - service: script.1637668450615
mode: single
`
@Gavergracht : your question is out of the scope of this gist. I suggest you to ask directly on the forum of home-assistant :)
@willyfog78 : you should change the timer to execute it every 5min and in the script, change the condition by something like now().minute % 5 == 1
@loic-moriame I took your work and created a Home Assistant Blueprint from it (I credited you), I hope it's ok.
https://community.home-assistant.io/t/color-loop-effect-for-any-light-with-color-wheel-selector/389343
@hugalafutro: this is definitely in the spirit of open source and knowledge sharing.
I more than agree with that 👍
Sure!
For transition, just change the value of
transitionparameterIf you want more colors, just change the modulo value (3 to 6 for example) and add more conditions
Let me know if you want some help
P.S: I try to use an array for RGB colors but without success, that why I switch to multiple conditions inside the script