From 9e836a937d7f618655d9ac0c9b18b406a0cf7aa2 Mon Sep 17 00:00:00 2001 From: Brandon Harvey <8107750+bharvey88@users.noreply.github.com> Date: Thu, 27 Aug 2026 10:03:31 -0500 Subject: [PATCH] Make All Lights a master over the zones instead of raw pixels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 0-36 partition added in #17 owned the same pixels as the five zone lights with independent state, so turning All Lights off left a zone either physically lit (its effect repaints on its own interval) or dark while still reporting on. Rebuilds it on partition's single_light_id segment form, which wraps each zone light instead of a pixel range. AddressableLightWrapper::write_state returns early when the wrapped light's remote_values.is_on(), so a zone the user turned on is never painted over, and it drives zones with set_publish(false) so a master-driven zone never falsely reports on. The cleanup wiring from #17 is kept: all_lights_off, both on_shutdown blocks, and each play_song_* still clear the master. TRADE-OFF: the wrapper is one pixel per wrapped light, so effects selected on All Lights render as five blocks rather than a 37-LED gradient. Effects on an individual zone are unaffected. Version 26.8.27.1 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- Integrations/ESPHome/Core.yaml | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Integrations/ESPHome/Core.yaml b/Integrations/ESPHome/Core.yaml index eb35445..e2cb8ca 100644 --- a/Integrations/ESPHome/Core.yaml +++ b/Integrations/ESPHome/Core.yaml @@ -1,5 +1,5 @@ substitutions: - version: "26.8.26.3" + version: "26.8.27.1" run_duration_default: "90s" run_duration_gpio: "90s" @@ -763,15 +763,6 @@ light: # Segment views; effects run per segment - # All 37 LEDs - - platform: partition - id: all_lights - name: "All Lights" - default_transition_length: 0s - segments: - - { id: led_chain, from: 0, to: 36 } - effects: *led_effects - # LEDs 0-23 - platform: partition id: body_light @@ -817,6 +808,19 @@ light: - { id: led_chain, from: 32, to: 36 } effects: *led_effects + # Master over the five zones, so a zone the user turned on is left alone + - platform: partition + id: all_lights + name: "All Lights" + default_transition_length: 0s + segments: + - single_light_id: body_light + - single_light_id: mouth_light + - single_light_id: nose_light + - single_light_id: eyes_light + - single_light_id: hat_light + effects: *led_effects + script: - id: all_lights_off then: