113 lines
3.4 KiB
Bash
Executable File
113 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# HA Bulk Light Operation Script
|
|
# Steps: 1) Set lights to 3500K @ 50%, 2) Wait 10s, 3) Turn off all lights, 4) Turn off switches
|
|
|
|
HA_API="${HA_URL}/api"
|
|
HEADERS=(-H "Authorization: Bearer ${HA_TOKEN}" -H "Content-Type: application/json")
|
|
|
|
echo "=== HA Bulk Light Operation ==="
|
|
echo "HA URL: $HA_URL"
|
|
echo ""
|
|
|
|
# Step 1: Get all light entities and filter
|
|
echo "Step 1: Fetching all light entities..."
|
|
LIGHTS_JSON=$(curl -s "${HA_API}/states" "${HEADERS[@]}" | jq -r '[.[] | select(.entity_id | startswith("light.")) | .entity_id]')
|
|
|
|
# Count total lights
|
|
TOTAL_LIGHTS=$(echo "$LIGHTS_JSON" | jq 'length')
|
|
echo "Found $TOTAL_LIGHTS light entities"
|
|
|
|
# Filter out excluded lights
|
|
# Exclusions: screens, athom, server LEDs, coffee/cooker/microwave/steam, browser_mod
|
|
FILTERED_LIGHTS=$(echo "$LIGHTS_JSON" | jq -r '[.[] |
|
|
select(
|
|
(. | contains("screen") | not) and
|
|
(. | contains("athom") | not) and
|
|
(. | contains("server") | not) and
|
|
(. | contains("coffee") | not) and
|
|
(. | contains("cooker") | not) and
|
|
(. | contains("microwave") | not) and
|
|
(. | contains("steam") | not) and
|
|
(. | contains("browser_mod") | not)
|
|
)
|
|
]')
|
|
|
|
FILTERED_COUNT=$(echo "$FILTERED_LIGHTS" | jq 'length')
|
|
echo "After filtering: $FILTERED_COUNT lights to control"
|
|
echo ""
|
|
|
|
# Convert to array for processing
|
|
LIGHTS_ARRAY=($(echo "$FILTERED_LIGHTS" | jq -r '.[]'))
|
|
|
|
echo "Step 1a: Setting $FILTERED_COUNT lights to 3500K @ 50% brightness..."
|
|
|
|
# Call light.turn_on for each light with color_temp=286 (3500K), brightness=128 (50%)
|
|
for light in "${LIGHTS_ARRAY[@]}"; do
|
|
curl -s -X POST "${HA_API}/services/light/turn_on" "${HEADERS[@]}" \
|
|
-d "{\"entity_id\":\"${light}\",\"brightness\":128,\"color_temp\":286}" > /dev/null
|
|
echo " → $light"
|
|
done
|
|
|
|
echo ""
|
|
echo "Step 2: Waiting 10 seconds..."
|
|
sleep 10
|
|
|
|
echo ""
|
|
echo "Step 3: Turning off ALL lights..."
|
|
|
|
# Get fresh list of all lights for turn_off (no filtering needed for off)
|
|
ALL_LIGHTS=$(curl -s "${HA_API}/states" "${HEADERS[@]}" | jq -r '[.[] | select(.entity_id | startswith("light.")) | .entity_id]')
|
|
ALL_LIGHTS_ARRAY=($(echo "$ALL_LIGHTS" | jq -r '.[]'))
|
|
|
|
for light in "${ALL_LIGHTS_ARRAY[@]}"; do
|
|
curl -s -X POST "${HA_API}/services/light/turn_off" "${HEADERS[@]}" \
|
|
-d "{\"entity_id\":\"${light}\"}" > /dev/null
|
|
echo " → $light"
|
|
done
|
|
|
|
echo ""
|
|
echo "Step 4: Turning off light-related switches..."
|
|
|
|
SWITCHES=(
|
|
"switch.foyer_chandelier"
|
|
"switch.mcloset_cans"
|
|
"switch.mcloset_chandelier"
|
|
"switch.breakfast_chandelier"
|
|
"switch.upper_hall"
|
|
"switch.alcove_switch"
|
|
"switch.gameroom"
|
|
"switch.bath3"
|
|
"switch.garage"
|
|
"switch.mbath_wall_switch"
|
|
"switch.luggage"
|
|
"switch.mb_rotonda"
|
|
"switch.laundry"
|
|
"switch.laundryu"
|
|
"switch.hallu_1"
|
|
"switch.hallu_2"
|
|
"switch.hallu_3"
|
|
"switch.attic_laundry_attic_laundry_switch"
|
|
"switch.courtyard_sconce_right"
|
|
"switch.courtyard_sconce_left"
|
|
"switch.back_sconces"
|
|
"switch.outdoor_hall_sconces"
|
|
"switch.bath1_lights"
|
|
"switch.mbed_pendants"
|
|
"switch.main_lanai"
|
|
)
|
|
|
|
for switch in "${SWITCHES[@]}"; do
|
|
curl -s -X POST "${HA_API}/services/switch/turn_off" "${HEADERS[@]}" \
|
|
-d "{\"entity_id\":\"${switch}\"}" > /dev/null
|
|
echo " → $switch"
|
|
done
|
|
|
|
echo ""
|
|
echo "=== Operation Complete ==="
|
|
echo "Summary:"
|
|
echo " - Set $FILTERED_COUNT lights to 3500K @ 50%"
|
|
echo " - Waited 10 seconds"
|
|
echo " - Turned off ${#ALL_LIGHTS_ARRAY[@]} lights"
|
|
echo " - Turned off ${#SWITCHES[@]} switches"
|