---
title: Half a Light Curtain Said “Success” and Did Nothing
description: My smart LED light curtain was two devices. One half had never been in Home Assistant, and once it was, it replied success to every command and did nothing.
image: https://willcurran.com/hubfs/will-curran-brand/half-a-light-curtain-cover-nolane.png
---

[Skip to content](https://willcurran.com/blog/half-a-light-curtain#main)

[Will Curran](https://willcurran.com/)

[Home](https://willcurran.com/) [Portfolio](https://willcurran.com/portfolio) [Press](https://willcurran.com/media) [Blog](https://willcurran.com/blog) [Favorites](https://willcurran.com/favorites) [Speaking](https://willcurran.com/speaking) [Consulting](https://willcurran.com/consult) 

[Hire Will](https://willcurran.com/hire)

[Writing](https://willcurran.com/blog) Home — Half a Light Curtain Said “Success” and Did Nothing [Subscribe](https://willcurran.com/blog/subscribe)

Home

# Half a Light Curtain Said “Success” and Did Nothing

![](https://willcurran.com/hs-fs/hubfs/will-curran-brand/will-curran-avatar.jpg?width=44&height=44&name=will-curran-avatar.jpg)

Will Curran Aug 22, 2026 · 6 min read

<https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwillcurran.com%2Fblog%2Fhalf-a-light-curtain>

[Part of: Checks that lie](https://willcurran.com/blog/series/checks-that-lie) Part 5 of 7 [Next: A Switch That Feeds Smart Bulbs Is Not a Light](https://willcurran.com/blog/a-switch-that-feeds-smart-bulbs-is-not-a-light)

On this page

![An abstract dark scene: two panels of vertical light strands side by side, the left one glowing orange and the right one dark, with a small check mark above the dark one, next to the title Half a light curtain said success and did nothing.](https://willcurran.com/hs-fs/hubfs/will-curran-brand/half-a-light-curtain-cover-nolane.png?width=1600&height=900&name=half-a-light-curtain-cover-nolane.png)

For months, a smart LED light curtain in my house wouldn't reliably do what Home Assistant told it. In August 2026 I stopped patching it and took it apart, one hypothesis at a time. Settings, a power cycle and a new local control path didn't solve it. Then I learned the one curtain was two devices, and that one of them answered "success" to every command while its lights didn't change.

## The symptom was a movie scene that left a light on

The curtain was part of a movie scene, and when the scene ran the curtain was supposed to go off. It kept staying on, and that was the thread I pulled.

I had two choices I didn't like: keep retrying the existing setup harder, or pull the curtain out of the automations entirely. I wanted it in the scene, so I chose a proper overhaul over another patch.

## Three things that were not the cause

1. **Local control.** The curtain had a setting that let it take commands over the home network. I checked it first, and it was already on.
2. **A power cycle.** I unplugged it and plugged it back in. Nothing changed.
3. **The cloud path.** Commands were going out to the maker's cloud and back. I moved control onto a local bridge, an open-source program that talks to the lights directly. That took the cloud out of the failure path. It didn't fix the curtain on its own.

Each step ruled out one theory, which is all a step like that can do.

## The integration that loaded fine and found nothing

Along the way I found out why the stock local integration had never been an option. It discovered these lights only by multicast, a broadcast-style "who's out there" message. My lights ignored multicast but answered perfectly when spoken to directly (unicast).

So the integration loaded successfully, discovered nothing, and logged nothing: no errors, no repair prompts. Restarting Home Assistant didn't change that. A device that showed as unavailable there didn't mean it was off.

## The curtain was two devices

Once both halves showed up through the bridge, the real picture appeared. What I thought of as one light curtain was two separate units, Left and Right. Until that day, the Right half had never been in Home Assistant at all. Every automation that turned off "the light curtain" had only ever driven half of it.

That explained most of "unreliable". Half of the fixture was never being asked.

One honest caveat: Left and Right were names I gave them in the phone app. Nothing in the protocol said where a unit physically hung, so which physical half was which was something only someone standing in front of it could confirm.

## Then the second half said "success"

With both halves finally reachable, I sent the Right half commands three independent ways: through the maker's cloud, through the local bridge, and as raw network packets. Every one came back as success. None of them changed its lights.

The Left half got the identical command a few seconds later and obeyed, so the command itself was right. The likeliest reading was that the Right controller was alive and talking while the LED strip wasn't connected to it, which pointed to a physical connection between the controller and the strip rather than anything in software.

![Comparison chart. The right half of the curtain was sent a command three ways: through the maker's cloud, through a local bridge, and as raw network packets. All three replied success, and its lights changed on none of them. The left half got the same command a few seconds later, and its lights changed.](https://willcurran.com/hs-fs/hubfs/will-curran-brand/half-a-light-curtain-ack-vs-light.png?width=1440&height=784&name=half-a-light-curtain-ack-vs-light.png)

I recorded it as a hardware fault, with a note not to re-diagnose it as software, and it went on the open list. The Left half worked over the local bridge. For the movie scene, I also simplified the requirement: the curtain would just turn off, and I dropped the idea of swapping it to a different effect.

## An acknowledgement is a claim about the message

A "success" reply tells you the controller received a command it understood. It tells you nothing about whether any light changed. Every path I tried returned that reply, so every path looked healthy, and the lights didn't change.

The same goes for the state a smart device reports. A unit that shows as off is reporting what its controller believes, and that's only as good as the connection between the controller and the LEDs.

## The last step needed a person

Most of this was protocol work: discovery, unicast, comparing paths. The last step couldn't be done from a keyboard. Telling Left from Right and checking a strip's connector both need a person looking at the fixture.

## If you are about to try this

- **Count the physical units.** A fixture you think of as one can be two or more controllers. Make sure each one is in your system before you debug any of them.
- **Watch the light while you send the command.** A reply of success, or a state of "off", is the device's claim. Your eyes are the test.
- **Compare against a known-good twin.** If an identical unit obeys the same command seconds later, the command is fine and the problem is in the unit.
- **Distrust silence from discovery.** An integration that loads cleanly and finds nothing may be using a discovery method your devices ignore. Try addressing them directly.
- **Write down what you ruled out.** A note saying "hardware, don't re-diagnose as software" saves the next round of debugging from starting over.

## Build it yourself

What it does: controls a set of Wi-Fi LED lights locally from Home Assistant, without a cloud round-trip, plus a by-eye check that each physical unit responds. The parts:

- **Home Assistant**.
- **A local bridge** for your brand of lights, if one exists, that can be pointed at devices directly instead of relying only on multicast discovery.
- **Your lights**, with their local control setting switched on in the maker's app.

How the pieces fit: the bridge talks to each light over your home network and publishes each one to Home Assistant as its own light. Your scenes and automations then target every unit by name. Leave time to stand in front of the fixture and test each unit by eye.

Give this to your AIHelp me move my Wi-Fi LED lights in Home Assistant to local control and prove each physical unit works. The lights are \[brand and model\], and I think I have \[number\] of them. First, help me check whether a product I think of as one fixture is actually several controllers, and make sure every controller appears as its own light. Check whether my current integration discovers devices only by multicast, and if it finds nothing without logging an error, help me find a local bridge that lets me address each device directly. Then give me a test plan: send one command at a time to each unit while I watch the lights, and compare each unit with an identical one that works. Treat a "success" reply or a reported "off" state as unconfirmed until I've seen the light change. If one unit acknowledges every command and never changes, help me write it down as a likely hardware fault and list the physical checks to do next.

If you have a device that cheerfully reports success while doing nothing, I would like to hear about it.

Filed under [Home](https://willcurran.com/blog/tag/home)

![](https://willcurran.com/hs-fs/hubfs/will-curran-brand/will-curran-avatar.jpg?width=64&height=64&name=will-curran-avatar.jpg)

Will Curran

I spent sixteen years building one company, and I have been in the event industry since 2007. These days I write about the technology I actually use — trucks, radios, home infrastructure, and the tools that survive past the first invoice.

[All posts by Will →](https://willcurran.com/blog/author/will-curran)

Get the next one by email

One email per post. No digest, no sponsors.

[← Previous How I Rebuilt willcurran.com With Claude Design and Claude Code](https://willcurran.com/blog/how-i-rebuilt-my-website-with-ai) [Next → Hears Everything, Heard by No One](https://willcurran.com/blog/heard-by-no-one)

## Related reading

[Home The Heat Rating That Decides a Desert Garage Mini-Split 4 min read](https://willcurran.com/blog/desert-garage-mini-split-heat-rating) [Home Movie Mode Means the Robot Vacuum Waits 6 min read](https://willcurran.com/blog/movie-mode-vacuum) [Home A Holiday Color Engine with a Calendar Computed to 2099 7 min read](https://willcurran.com/blog/holiday-color-engine) [Home Party Mode: 49 Ramps Blocked, Zero During a Six-Hour Party 6 min read](https://willcurran.com/blog/party-mode)

[Will Curran](https://willcurran.com/)

[LinkedIn — 29,339+ followers](https://www.linkedin.com/in/willcurran) [GitHub](https://github.com/rancur) [YouTube](https://www.youtube.com/channel/UCJgscc27l4fpkWx1SeK05xg/) [Spotify](https://open.spotify.com/user/rancur) [SoundCloud DJ mixes](https://www.soundcloud.com/thewillsee) [Twitch](https://www.twitch.tv/thewillsee) [Last.fm](https://www.last.fm/user/default) [Trakt — movies & TV](https://trakt.tv/users/willcurran) [Goodreads](https://www.goodreads.com/user/show/55302838-will-curran) [Will See Music](https://www.thewillsee.com) [Arizona Meshtastic](https://azmsh.net) [Electric Forest Meshtastic](https://efmesh.com)

© 2026 Will Curran — All rights reserved. [RSS](https://willcurran.com/blog/rss.xml) [Back to top](https://willcurran.com/blog/half-a-light-curtain#main)

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Will Curran",
    "url" : "https://willcurran.com/blog/author/will-curran"
  },
  "dateModified" : "2026-10-22T19:32:34.298Z",
  "datePublished" : "2026-08-22T16:00:00.000Z",
  "headline" : "Half a Light Curtain Said “Success” and Did Nothing",
  "image" : [ "https://willcurran.com/hubfs/will-curran-brand/half-a-light-curtain-cover-nolane.png" ],
  "mainEntityOfPage" : {
    "@id" : "https://willcurran.com/blog/half-a-light-curtain",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://willcurran.com/hubfs/image-1.png"
    },
    "name" : "Will Curran LLC"
  }
}
```