Skip to content

Support Smart LED Curtain #4569

Description

@psxde

I have tried to control an Smart Curtain Style light from China via WLED but it seems to use a custom protocol for the different columns.

There are two variants which are shipped as the same product:

  1. The LEDs all seem to be connected in parallel and have hardcoded addresses. There is no problem using WLED.
  2. Each column seem to have 20x "dumb" WS28x LEDs and there is a logic element in each T-Connector at the top

I will continue talking about the second variant.

Image

Each column is connected like that: Data In is connected to the 20 LED strip down and also to a LED inside the T part. The Output of this LED then is connected to the next T part. The LED inside this T-Connector seems not to light up but do some magic with the data.

With WLED only the first column lights up as expected but the other lights are shifted in some way.

  • The second column begins with half of the brightness with green and blue, then follows the red channel of the previous led (in this case blank), then the second LED with green and blue, followed by the first LED with red, followed by the third LED with green and blue and so on
  • The third column reacts with full brightness but splitted red of the first LED, continued by green and blue of the second LED
  • All columns excluding the first one is blinking every few seconds and sometimes also changes the color

So the magic LED in the T-Connector seems in some way destroy the WS28x protocol.

Does someone have an idea how to support this type of led strip?

Thanks,
Patrick

Activity

  1. blazoncek commented on Feb 20, 2025

    @blazoncek
    Contributor

    If there will be a NeoPixelBus LED type then it might be implemented in WLED.
    Until then you will need to discuss with NeoPixelBus author for implementation.

  2. netmindz commented on Feb 20, 2025

    @netmindz
    Member

    I have similar set, but that is not the behaviour I see.

    If I just set the led count to double what it should be then all LEDs light up in their expected colour.

    I haven't got round to it yet, but in theory using an ledmap should correct for the missing pixels

  3. psxde commented on Feb 21, 2025

    @psxde
    Author

    Found some more information:

    And the idea of using an Attiny 13 to build a replacement for the weird led circuit: https://forum.arduino.cc/t/ws2812-ic-to-drop-led-nodes/1342405

    So without doing hardware changes to the LED curtain it seems to be impossible for now to get it to work with wled

  4. psxde commented on Mar 8, 2025

    @psxde
    Author

    I have similar set, but that is not the behaviour I see.

    If I just set the led count to double what it should be then all LEDs light up in their expected colour.

    I haven't got round to it yet, but in theory using an ledmap should correct for the missing pixels

    I have get a third type of curtain which reacts like you described. 0-19 ist the first column, 39 the LED in the hook, 40-59 the next column. This curtain has transparent hooks which are wider than high as that ones which has hardcoded addresses.

    But the other type with white hooks which are higher than wide, the protocol seems to be different.

  5. ZillionPrey commented on Oct 27, 2025

    @ZillionPrey

    i have the exact same type from a store called action in germany.

    The exact same behaviour as OP has described happens to me aswell. I have noticed that if you setup as 400 LED 20x20 Matrix and set the protocol to 400khz it seems to work to a certain extend.

    The first row only glows white, and the others seem to react as they should. At least if yoh play matrix effects you can see them work properly.

  6. somebuddy87 commented on Nov 21, 2025

    @somebuddy87

    Is there any update on this? I have the exact same unit from Action here and I just can’t make any progress. I’ve already done several logic analyzer sessions with ChatGPT, but I still can’t figure out the issue.

    I had the impression that it worked briefly in the beginning with a Wemos D1 Mini clone running WLED 15.1 at 400 kHz — at least partially. But now I can’t get it to work anymore, neither with the Wemos D1 Mini nor with an ESP32. And with the WS280x profile, only the first row lights up.

    You can also see in the logic analyzer that the IC in the T-connector doesn’t pass the signal through. I really hate giving up… but at this point I honestly don’t know what else to try.

  7. AmexHusky commented on Nov 22, 2025

    @AmexHusky

    Hi everyone,

    I’m new to the conversation, but I’ve been dealing with the same issue regarding the LED curtain from Action (identical to the AliExpress versions, including the same T-connector). I also couldn’t get it running with any of the known approaches — until I accidentally stumbled on a working solution today.

    After some light reverse engineering, I found that the IC on the controller board outputs a completely normal WS28x-style data signal. The actual special behavior happens inside the so-called “level shifter” placed between the IC and the LED strip. This device does far more than voltage shifting.

    It modifies the entire data stream, specifically on every 20 pixels (480 bits). In other words, the level shifter doesn’t just pass the signal through — it outputs a custom, modified data pattern that the curtain seems to rely on.

    To test this, I desoldered the IC and fed the data line from my WLED controller directly into the input pin of this “level shifter.” Surprisingly, the board accepts this signal, processes it internally, and the LED curtain works perfectly.

    Summary:

    The IC only outputs a normal WS28x data signal.

    The custom data handling happens entirely inside the “level shifter.”

    Feeding WLED directly into that input works without issues.

    Important:
    In WLED you must set the LED type to APA106.
    Using WS28xx settings does not work.

    With that adjustment, the whole curtain runs flawlessly from a WLED controller.

  8. softhack007 commented on Nov 22, 2025

    @softhack007
    Member

    @somebuddy87 @AmexHusky @psxde could it be that your curtains are actually TM1814, APA106, TM1914 or TX1812 but not ws281x ? TM1814 seem to run at reduced speed of 600Khz, and WLED has the necessary driver option.

    Something still sticks in my memory that either @ewowi or @troyhacks already had similar curtains, so maybe they can help?

  9. AmexHusky commented on Nov 22, 2025

    @AmexHusky

    I actually tested the TM1814 protocol as well, just to rule it out — but it doesn’t work on these curtains either. Even with WLED set to TM1814, the board doesn’t output anything usable.

    The only setup that works reliably is feeding the data into the input of the so-called “level shifter” and using APA106 as the LED type in WLED. With that combination the curtain runs fine, except for the very last LED which keeps blinking — but that’s a minor issue and everything else behaves correctly.

    So at this point it’s safe to say the curtain is not WS281x and not TM1814.
    The custom data format clearly comes from that mystery “level-shifter” chip, and APA106 happens to be the only compatible mode WLED provides.

  10. somebuddy87 commented on Nov 22, 2025

    @somebuddy87

    Thank you so much for this tip! I had only been doing my reverse engineering behind the original controller. So I was still running the original controller’s output signal through the logic analyzer — and PulseView even interpreted that as a WS280X signal. Because of that, I didn’t question it any further.

    Could you please confirm once more which pin you are feeding the WLED signal into? I quickly measured the one shown below. It works, but especially during transitions I’m getting a lot of flickering on the curtain. I’ll definitely shorten the wires again to avoid any potential sources of error.

    Attached is an image — could you please confirm that I picked the correct pin?

    Image

  11. somebuddy87 commented on Nov 22, 2025

    @somebuddy87

    So… I did some more experimenting. With the APA106 setting, I get that flickering. With the 400 kHz profile, the flickering is gone, but the “first row” doesn’t respond. I worked around it by using the 400 kHz profile and connecting the first row to a different data pin on the ESP, driving it directly with the WS280x profile. This way, I now have all 400 LEDs working. I’m still struggling a bit with the matrix configuration in WLED, but I think that’s not a hardware issue.

  12. psxde commented on Nov 24, 2025

    @psxde
    Author

    I successfully got it working by setting APA106 and the first 20 LEDs as an offset. However, this only worked on one of several ESP32 controllers without interference.

  13. braicc commented on Nov 27, 2025

    @braicc

    What wled release are you using? I find out that 15.1 it's working the way you describe ( first 20 led white and unresponsive and the rest is ok). With 15.0 it's ok. I find the out after using a sp530x with wled firmware. I am using a espthings dl01 with
    74HCT244 level shifter and esp32 mini apa106 led and 2d matrix 20x20, and the curtain is from Action store.

  14. 3 remaining items

  15. orichienal commented on Nov 28, 2025

    @orichienal

    Hi guys,
    thx @braicc , @ZillionPrey , @psxde for the quick responses.

    I tried every possible setting, basically everything once.

    Now i installed version 15.0 and configured 400 kHz with 400 LEDs, 20 white and then 380 adjustable, but it behaves very strangely.

    Sometimes I can set a color and it stays, and sometimes it flickers all the time. Or I can't set a certain color at all. And after I tried to adjust the brightness, it just went completely haywire.

    So I thought I'd pull the plug and do a reset.
    And now nothing works except for the first 20 that glow white.

    Even playing around with the software via OTA didn't make any difference.

    I then installed 15.0 via cable and now 380 are flashing wildly. Sometimes even one of the LEDs in the boxes at the top.

    I have a good oscilloscope here and tried to analyze the signal from the original controllers, but unfortunately it's been too long since I've used such a device. If anyone has any tips, I'd be happy to hear them.

    I'm not ready to reinstall the original controller yet. At most, I'll try a C3 mini, because the latest nightly build tells me that the memory isn't enough for 400 LEDs.

    Have a wonderful day, evening, or night, everyone.

  16. braicc commented on Nov 29, 2025

    @braicc

    Sorry to hear that. Once again I use 0.15.0 from web installer. I think after that something has changed in APA106 library( 0.15.0 is the first release with APA106 support). @psxde

    Image
    Image
    I get sometime flickering but I think that from mi cable 3x0.75 5meters. I use it whit Xlights.

    https://jumpshare.com/s/bkwulKPPqGnlcSCsuGXk

  17. xMikooo commented on Dec 30, 2025

    @xMikooo

    Hey thanks @AmexHusky @somebuddy87 for pointing me in the right direction. Soldered WLED out to pin in place of desoldered main IC and managed to get it working however still the issue of first 20 being white persists. Did anyone manage to fix it (i cannot drive the first string with another gpio as I already have 4 gpios taken/2 curtains + 2 strips) or at least pinpoint when in NeoPixelBus it broke?

  18. braicc commented on Dec 31, 2025

    @braicc

    I am not a specialist but I think the problem is the level shifter. I have two curtains working flowles with 2 different controler.One with sp530e and one with espthings dl01. That the only way I got working (one curtain/ controller with nothing else, when try to add a second curtain o led strip the led go crazy) they are far back on my garage door.

    176694919631413.1.mp4
  19. xMikooo commented on Dec 31, 2025

    @xMikooo

    when try to add a second curtain o led strip the led go crazy)

    Personally I use a GLEDOPTO elite 4d controller and this way I have successfully added a curtain and a normal WS281x strip. (Of course first string white) I have two of these curtain and will try to mod the second one today if I find some spare time and report if two curtains work fine. Honestly I’m debating what will be a better way for me - I can either run a separate data line for the first 20. That would mean I have to use up 4 GPIO on my controller and would have to buy another controller for another two lights I was hoping to run off the same controller or the 2nd option which would be to just desolder first 20 and tuck them away, leaving me with a 38x20 matrix which is also fun as I plan to use the matrix mostly as a decoration during parties. Also wondering if there’s a way to add a fake string somehow by soldering a led/chip before the first one. I will put these curtains when spring arrives since it’s too cold to work now, so I can test and try to contribute something up until march/April and when the support is not done yet I will make a decision which route to go

  20. xMikooo commented on Dec 31, 2025

    @xMikooo

    @braicc If you have soldered to the original controller board, could you verify that that's the correct pin to solder the WLED data? As in @somebuddy87 picture?

    Image

    Also what version of WLED are you using with your curtains

  21. xMikooo commented on Dec 31, 2025

    @xMikooo

    I have sucessfully modified second curtain and connected it to my GLEDOPTO Elite-4D-EXMU controller, what i have immediately noticed is that the second curtain did not have the first 20 white but all 400 were working correctly. Thinking this might be another version of curtain or something I switched gpio outputs and sure enough the other curtain was showing 20white and the second was working as expected. To troubleshoot I have added a dummy 1 LED APA106 output as the first one in WLED and both curtains did not have the first 20 white LEDs but both were working perfectly. Next i have added 1 dummy led at the end and it didn't fix the issue.

    So for now until further troubleshooting and fixing the code, the workaround is adding 1 dummy LED on unused GPIO (type doesn't matter I think - tested with ws281x and apa106) and setting skip leds 1, that gave me two working curtains with no white strings.

  22. braicc commented on Dec 31, 2025

    @braicc

    @braicc If you have soldered to the original controller board, could you verify that that's the correct pin to solder the WLED data? As in @somebuddy87 picture?

    Image

    Also what version of WLED are you using with your curtains

    No I have connected the curtain direct to the controllers and I use wled v 0.15.0 on both controller

    Image
    Image
    The controller that I use and his level shifter.

  23. jonathh21 commented on Jan 4, 2026

    @jonathh21

    I have come here after somewhat optimistically purchased some cheap led curtains and wanted to see "will it WLED".

    MIFFED I WAS by the presence of only 3 wires for a curtain and no return.

    I can see the y splitter has some smarts in it though so assume it is doing some sort of preconfigured offset or masking to determine what to pass further down the wire..

  24. xMikooo commented on Jan 4, 2026

    @xMikooo

    @jonathh21 they can still work, they usually have logic in the Y splitter to skip 20 leds and pass it forward, try connecting them, they might work OOB or might need some work to the original control board as in my case. They also might use some proprietary protocol but I highly doubt it.

  25. bernis commented on Jan 23, 2026

    @bernis

    I also have the curtain from action and finally got around to play with it. I did some measurements on the original controller, see below

    Image

    Image

    Image

    The controller outputs a 600kHz signal for 400 LEDs (=16ms), with no special breaks or anything. Timing is ~330ns high for zero and ~914ns high for zero, 1666ns bit length, so somewhat similar to apa106 timing.

    My guess is that the led's in the strings use ws281x compatible timing while the ones in the Y-splitters use something slower. This would explain why the first string works with the ws281x setting, while with the 400kHz setting the first string gets all white (= zeros are too long and recognized as ones by ws280x)

    Anyway, I tried modifying the timings in neopixelbus to match the original controller and measured the signal, but what i found is that the high/low timing was always 1/3 and 2/3 of the bit for 0 and 1. This also gives all white first string, like with the apa106 setting. Turns out neopixelbus has different modes for outputting the signal and this is a limitation of the 3 bit i2s mode, which wled uses as default for esp32 since around 0.15.

    The workaround, as @xMikooo wrote, is to configure a second output (400leds, apa106) and use this for the curtain, set the first bus to some unused pin, one led only, and skip one led. This is because esp32 only supports one i2s bus and the second bus will use RTM mode with more accurate bit timings.

    Also the leds in the Y-splitters seem to be less tolerant to 3.3V, so use the level converter from the original pcb:

    Image

    I think the mic is not easily usable, as there is no preamp on the pcb. Remote should work, but I didn't test it yet.

  26. DedeHai commented on Jan 30, 2026

    @DedeHai
    Collaborator

    on some of these curtains, the TM1815 timing works, I have added support for that here but it needs more work before it can go into main code: #5269

    if anyone wants to give it a go, here are the bin files
    https://github.com/wled/WLED/actions/runs/20680489103?pr=5269
    then select "TM1815" as the LED type.

  27. noud-github commented on Apr 10, 2026

    @noud-github

    @DedeHai I was willing to try your version. with TM1815 but the files have expired ;-(

  28. ChristianFranke commented on Jun 8, 2026

    @ChristianFranke

    Just a quick piece of feedback for anyone who is about to buy:

    I successfully got the 3x3m version of this LED curtain from AliExpress working with WLED v16. Setting the LED type (driver) to APA106, as mentioned above, works perfectly with my controller A1-SLWF-03.

    Thanks to everyone for all the helpful groundwork in this thread!

  29. bat86 commented on Oct 3, 2026

    @bat86

    Sorry to hear that. Once again I use 0.15.0 from web installer. I think after that something has changed in APA106 library( 0.15.0 is the first release with APA106 support). @psxde

    I get sometime flickering but I think that from mi cable 3x0.75 5meters. I use it whit Xlights.

    https://jumpshare.com/s/bkwulKPPqGnlcSCsuGXk

    @braicc Huge thanks! It works absolutely flawlessly now!

    The final piece of the puzzle to completely eliminate all flickering (especially on the red color and mixed shades) was adding a single WS2812B LED right after the ESP32 output pin, just before the curtain's connector.

    In WLED settings, I set LED type to APA106, the correct matrix layout, and used "Skip first LEDs: 1". This single sacrificial pixel acted as a perfect 5V level shifter and cleaned up the signal timings. After that, all 400 pixels on the 20x20 curtain stabilized completely.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions