Setting my rooms lighting to match my background
5/3/2025
I use Home Assistant for various things, one is controlling the two RGB lightbulbs in my room.
I have recently put a TV up on my wall, when I am not watching something on it, I generally leave it with the background showing. I've found at night when I turn my lights down it creates a nice warm glow of color. So I decided to automatically change my lights color to match that of the background.
The script is pretty simple, it sets the background (swww daemon) to a random image every 5 minutes. I take the average color of that image and send it to Home Assistant which sets my rooms lights to match this color. The brightness is controlled by me.
I also added a toggle inside Home Assistant that can disable the scripts ability to change the lights, this is so during the day when I just want normal lighting I can turn it off easily.
This is the script:
#!/bin/bash sleep 2 if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then echo "Usage: $0" exit 1 fi # Edit below to control the images transition export SWWW_TRANSITION_FPS=60 export SWWW_TRANSITION_STEP=2 INTERVAL=300 HA_URL="http://URL:8123" BEARER_TOKEN="TOKEN" hex_to_rgb() { hex=$1 r=$(echo $((16#${hex:1:2}))) g=$(echo $((16#${hex:3:2}))) b=$(echo $((16#${hex:5:2}))) echo "$r,$g,$b" } while true; do find "$1" -type f \ | while read -r img; do echo "$((RANDOM % 1000)):$img" done \ | sort -n | cut -d':' -f2- \ | while read -r img; do swww img "$img" color=$(convert ${img} -resize 1x1 txt:- | grep -Po "#[[:xdigit:]]{6}") rgb=$(hex_to_rgb $color) # Check if light control is enabled by checking the input_boolean state light_control_enabled=$(curl -s -X GET -H "Authorization: Bearer $BEARER_TOKEN" \ "$HA_URL/api/states/input_boolean.light_control_enabled" | jq -r '.state') if [ "$light_control_enabled" != "on" ]; then echo "Light control is disabled." else curl -X POST -H "Authorization: Bearer $BEARER_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"entity_id\": \"light.bedroom_lights\", \"rgb_color\": [$rgb]}" \ $HA_URL/api/services/light/turn_on fi curl -X POST http://192.168.1.216/pump -H "Content-Type: application/json" -d "{\"avgcol\": \"${color}\"}" sleep $INTERVAL done done