Light RGB color based on temperature

I have an RGB light that changes color based on outdoor temperature.
The automation that controls this is setup in Node-RED and now I want to move it to a native Home Assistant automation. I’m not sure how to write a script that will calculate and set the RGB color as in my Node-RED function.

So, in Node-RED I have a trigger on state change on my temp sensor. It will then call a function that looks like this:

let temp = parseInt(msg.payload, 10);
let rgb = [];

if (temp > 22)
    rgb = [255, 0, 0]
else if (temp > 20)
    rgb = [255, 64, 0]
else if (temp > 18)
    rgb = [255, 128, 0]
else if (temp > 16)
    rgb = [255, 191, 0]
else if (temp > 14)
    rgb = [255, 255, 0]
else if (temp > 12)
    rgb = [191, 255, 0]
else if (temp > 10)
    rgb = [128, 255, 0]
else if (temp > 8)
    rgb = [64, 255, 0]
else if (temp > 6)
    rgb = [0, 255, 0]
else if (temp > 4)
    rgb = [0, 255, 64]
else if (temp > 2)
    rgb = [0, 255, 128]
else if (temp > 0)
    rgb = [0, 255, 191]
else if (temp > -2)
    rgb = [0, 255, 255]
else if (temp > -4)
    rgb = [0, 191, 255]
else if (temp > -6)
    rgb = [0, 128, 255]
else if (temp > -8)
    rgb = [0, 64, 255]
else if (temp > -10)
    rgb = [0, 0, 255]
else if (temp > -12)
    rgb = [64, 0, 255]
else if (temp > -14)
    rgb = [128, 0, 255]
else if (temp > -16)
    rgb = [191, 0, 255]
else if (temp > -18)
    rgb = [255, 0, 255]
else if (temp > -20)
    rgb = [255, 0, 191]
else if (temp > -22)
    rgb = [255, 0, 128]
else if (temp > -24)
    rgb = [255, 0, 648]
else
    rgb = [255, 0, 0]

msg.payload = {
    domain: "light",
    service: "turn_on",
    data: {
        entity_id: "light.outdoor_temperature_status",
        rgb_color: rgb
    }
};

return msg;

How can I achive this in a HA automation?

Hi!
Thanks for your code! I was looking for a code working in Node-Red.
For HA Automation I saw this code somewhere.
Give it a try, you probably needs to adjust it a bit but the base should work fine! (import it as YAML code)

alias: Outside Temp Color Change
initial_state: 'on'
condition:
  - condition: state
    entity_id: light.hue_outdoor_pedestal_2
    state: 'off'
trigger:
  - platform: sun
    event: sunset
    offset: '0'
action:
  - service: light.turn_on
    entity_id: light.hue_outdoor_pedestal_2
    data_template:
      rgb_color:
        - >
          {% if states.sensor.netatmo_outdoor_temperature |
          int <= -35 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -34 %} 240 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -33 %} 225 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -32 %} 210 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -31 %} 195 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -30 %} 180 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -29 %} 165 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -28 %} 150 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -27 %} 135 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -26 %} 120 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -25 %} 105 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -24 %} 90 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -23 %} 75 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -22 %} 60 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -21 %} 45 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -20 %} 30 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -19 %} 15 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -18 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -17 %} 14 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -16 %} 28 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -15 %} 43 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -14 %} 57 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -13 %} 71 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -12 %} 85 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -11 %} 99 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -10 %} 113 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -9 %} 128 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -8 %} 142 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -7 %} 156 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -6 %} 170 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -5 %} 184 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -4 %} 198 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -3 %} 213 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -2 %} 227 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -1 %} 241 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 0
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 1
          %} 247 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 2
          %} 239 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 3
          %} 231 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 4
          %} 223 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 5
          %} 215 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 6
          %} 207 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 7
          %} 199 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 8
          %} 191 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 9
          %} 183 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          10 %} 175 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          11 %} 183 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          12 %} 191 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          13 %} 199 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          14 %} 207 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          15 %} 215 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          16 %} 223 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          17 %} 231 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          18 %} 239 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          19 %} 247 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          20 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          21 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          22 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          23 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          24 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          25 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          26 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          27 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          28 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          29 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          30 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          31 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          32 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          33 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          34 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int >=
          35 %} 255 {% else %} 43 {% endif %}
        - >
          {% if states.sensor.netatmo_outdoor_temperature |
          int <= -35 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -34 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -33 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -32 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -31 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -30 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -29 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -28 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -27 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -26 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -25 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -24 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -23 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -22 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -21 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -20 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -19 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -18 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -17 %} 14 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -16 %} 28 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -15 %} 43 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -14 %} 57 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -13 %} 71 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -12 %} 85 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -11 %} 99 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -10 %} 113 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -9 %} 128 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -8 %} 142 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -7 %} 156 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -6 %} 170 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -5 %} 184 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -4 %} 198 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -3 %} 213 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -2 %} 227 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -1 %} 241 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 0
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 1
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 2
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 3
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 4
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 5
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 6
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 7
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 8
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 9
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          10 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          11 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          12 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          13 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          14 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          15 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          16 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          17 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          18 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          19 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          20 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          21 %} 238 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          22 %} 221 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          23 %} 204 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          24 %} 187 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          25 %} 170 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          26 %} 153 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          27 %} 136 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          28 %} 119 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          29 %} 102 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          30 %} 85 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          31 %} 68 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          32 %} 51 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          33 %} 34 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          34 %} 17 {% elif
          states.sensor.netatmo_outdoor_temperature | int >=
          35 %} 0 {% else %} 255 {% endif %}
        - >
          {% if states.sensor.netatmo_outdoor_temperature |
          int <= -35 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -34 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -33 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -32 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -31 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -30 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -29 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -28 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -27 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -26 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -25 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -24 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -23 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -22 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -21 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -20 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -19 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -18 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -17 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -16 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -15 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -14 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -13 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -12 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -11 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -10 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -9 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -8 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -7 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -6 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -5 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -4 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -3 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -2 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          -1 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 0
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 1
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 2
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 3
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 4
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 5
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 6
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 7
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 8
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int == 9
          %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          10 %} 255 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          11 %} 230 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          12 %} 204 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          13 %} 179 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          14 %} 153 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          15 %} 128 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          16 %} 102 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          17 %} 77 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          18 %} 51 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          19 %} 26 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          20 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          21 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          22 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          23 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          24 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          25 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          26 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          27 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          28 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          29 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          30 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          31 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          32 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          33 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int ==
          34 %} 0 {% elif
          states.sensor.netatmo_outdoor_temperature | int >=
          35 %} 0 {% else %} 113 {% endif %}