2026-09-12: The Color That Stayed

The kitchen lights finally had the right tone. Not the stark 6500K clinical white that Tuya smart bulbs reboot into, and not the heavy candle-orange (hue 15, 100% saturation) reserved for late-night ambience in the corner and chalet. It was tungsten warm: 2000K incandescent filament, mapped cleanly to brightness: 255, hs_color: [29.0, 93.0], and rgb_color: [255, 132, 18] (xy: [0.603, 0.377]).
The request was simple: make that color permanent for the kitchen, and align the dining room, reading room (corner RGB), and corridor groups to the exact same Comfort setting in Home Assistant Green.
The layers of amnesia
Section titled “The layers of amnesia”In Home Assistant, “permanent” is never one setting. Light bulbs are ephemeral hardware that drop offline, get power-cycled at the physical switch, and get repainted by morning routines and default profiles.
Forensic inspection of the HA Green appliance (10.0.0.3:8123) revealed why light tones kept drifting:
scenes.yamldrift: On 2026-08-18,brightnessandhs_colorhad been stripped out oflight.kitcheninscene.bonjour_montreal, leaving it bare (state: true). Furthermore,light.dining_roomwas not included in the morning scene at all.- The partial Tuya script: In
scripts.yaml,smartlife_comfort_moodattempted to push raw Tuya DP25 scenes to only three of the six kitchen bulbs and one of the two dining bulbs, forcing them intoMode Scenewhile leaving the other bulbs unmanaged. - The stranded package: An automation package (
ha-green/packages/kitchen_comfort.yaml) had been committed on the Mac Mini in August to catch power-reconnects, but was never deployed to HA Green’s/homeassistant/packages/and never included inconfiguration.yaml. - Missing default profile: Without
/homeassistant/light_profiles.csv, any unparameterizedlight.turn_oncall defaulted to the bulb firmware’s power-on memory.
Multi-layer enforcement
Section titled “Multi-layer enforcement”To guarantee that Kitchen, Dining Room, Reading, and Corridor stay at the desired tungsten warm look across any condition, we landed a four-tier defense directly on HA Green and bridged to Sanctum:
1. Reconnect & Power-on Package
Section titled “1. Reconnect & Power-on Package”Deploys packages/kitchen_comfort.yaml loaded via configuration.yaml. Whenever any kitchen, dining room, reading (corner RGB), or corridor bulb transitions from off, unavailable, or unknown to on, HA Green catches it and applies brightness: 255, hs_color: [29.0, 93.0] after a 2-second settle delay.
2. Core Default Profiles
Section titled “2. Core Default Profiles”Updated /homeassistant/light_profiles.csv mapping light.kitchen.default, light.dining_room.default, light.reading.default, light.corner_rgb.default, light.corridor.default, and all thirty constituent bulb entities to x=0.603, y=0.377, brightness=255. Any call to light.turn_on without explicit color parameters defaults to tungsten comfort.
3. Morning Scene & Routine Alignment
Section titled “3. Morning Scene & Routine Alignment”- Updated
scene.bonjour_montrealinscenes.yamlto explicitly turn on bothlight.kitchenandlight.dining_roomatbrightness: 255,hs_color: [29.0, 93.0]. - Rewrote
script.smartlife_comfort_moodinscripts.yamlto enforce the full tungsten group mood across all four zones and their LocalTuya twins rather than a partial localtuya scene. - Added
light.readinggroup alias inconfiguration.yaml.
4. Bridge Readback Sentinel
Section titled “4. Bridge Readback Sentinel”Updated haus.sanctum.ha-green-bridge on the Mac Mini (bin/ha-green-bridge.py) to include light.kitchen, light.reading, and READING_LIGHTS in WORK_LIGHTS, verifying hardware readbacks continuously across all active bulbs.
Disk & Repository Verification
Section titled “Disk & Repository Verification”All configs on HA Green were validated via hag-core.sh check, reloaded live via REST API, and synchronized into the sanctum-config repository under ha-green/.
Live state verification on HA Green confirms:
light.kitchen:state=on bri=255 hs=[29.0, 93.0] rgb=[255, 132, 18]light.dining_room:state=on bri=255 hs=[29.0, 93.0] rgb=[255, 132, 18]light.reading/light.corner_rgb: mapped to Comfort profile in package, profiles, and bridge.light.corridor: mapped to Comfort profile in package, profiles, and bridge.