WLED icon indicating copy to clipboard operation
WLED copied to clipboard

Support Smart LED Curtain

Open psxde opened this issue 1 year ago • 18 comments

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

psxde avatar Feb 19 '25 18:02 psxde

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.

blazoncek avatar Feb 20 '25 06:02 blazoncek

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

netmindz avatar Feb 20 '25 08:02 netmindz

Found some more information:

  • https://wled.discourse.group/t/has-anyone-reverse-engineered-how-led-curtain-hooks-work/7423
  • https://github.com/Makuna/NeoPixelBus/issues/790

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

psxde avatar Feb 21 '25 11:02 psxde

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.

psxde avatar Mar 08 '25 20:03 psxde

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.

ZillionPrey avatar Oct 27 '25 15:10 ZillionPrey

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.

somebuddy87 avatar Nov 21 '25 22:11 somebuddy87

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.

AmexHusky avatar Nov 22 '25 00:11 AmexHusky

@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?

softhack007 avatar Nov 22 '25 00:11 softhack007

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.

AmexHusky avatar Nov 22 '25 00:11 AmexHusky

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

somebuddy87 avatar Nov 22 '25 12:11 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.

somebuddy87 avatar Nov 22 '25 16:11 somebuddy87

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.

psxde avatar Nov 24 '25 13:11 psxde

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.

braicc avatar Nov 27 '25 03:11 braicc

Hi everyone, I just bought one of these LED curtains.

https://www.action.com/de-de/p/3217804/led-lichterkettenvorhang/

Of course, I immediately removed the original controller and installed a d1-mini in the same housing, installed wled, and then realized with disillusionment that it wasn’t working as planned. Only the first 20 LEDs light up.

After searching for quite a while, I finally came across this site.

Has there been any progress? Has anyone tried to implement the protocol with the pauses, and is it even possible to do so with an ESP8266? I’ve already tried to find a test program.

I’ll connect my oscilloscope to the original controller in the next few days and see what’s going on. Hopefully I’ll be able to do it, I haven’t used it in a long time. But I think it will be the same as what has been found out so far.

I would be very happy if anyone had any information for me.

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

orichienal avatar Nov 28 '25 16:11 orichienal

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.

@orichienal you can get almost all of them except the first row working by doing that :)

ZillionPrey avatar Nov 28 '25 16:11 ZillionPrey

@braicc I've tested it with 0.15.1 and nightly. Controller is GLEDOPTO GL-C-010WL-D (working, newer revision v8?), GL-C-010WL (not working, older revision v3?)

Edit: Also having flickering with other LED strips using the GL-C-010WL as soon as two strips are set up - so it seems to be another problem here

psxde avatar Nov 28 '25 17:11 psxde

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.

orichienal avatar Nov 28 '25 20:11 orichienal

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

braicc avatar Nov 29 '25 03:11 braicc