I have a pair of Sengled light bars that are still perfectly good at doing the whole being lights thing. Unfortunately, the servers they depended on are dead. I hate how working hardware becomes e-waste just because a server somewhere disappeared, but I knew many of these IoT devices used common components so I thought I’d try to see if I could breathe new life into them.
I opened up the control module and discovered something very promising inside: an ESP32! I’ve fallen in love with ESP32 boards for little home automation projects, and seeing the familiar chip meant there was a really good chance I could replace the stock firmware with my own and make the lights work completely locally.

Getting Into the Controller
The board was surprisingly friendly. It had pads labeled helpfully RX, TX, BOOT, and GND, which are exactly the sorts of labels you hope to find when you’re trying to flash an ESP32. I soldered jumper wires to the pads and connected them to a USB-to-serial adapter. After grounding the boot pin while powering it on, I was able to hear and talk to the chip with esptool.

I did have an unfortunate event when I initially had the heat a bit too high while soldering jumper wires to my first controller and the BOOT pad did not survive. Thankfully the pinout was easy to find for the board and I was able to still ground boot easily enough.


Figuring Out the Lights
Talking to the ESP32 was the first half of the challenge, but I also needed to figure out how the chip talked to actual light hardware.
I made a quick ESPHome configuration that exposed all the GPIO pins as switches. Then I could turn on one pin at a time and see if the lights turned on and which color appeared and then I wrote a little script to walk through the whole process.
Putting It Back to Work
With the pinout figured out, the final ESPHome config was pretty straightforward. The bars now have local RGB and brightness controls, a web interface, over-the-air updates, a fallback access point, and a handful of effects and presets. Most importantly, it doesn’t rely on someone else’s remote servers to work, or worse, the ability for them to push an OTA update to brick the device or something more nefarious.
Home Assistant Integration - Better than Stock
Home Assistant has an ESPHome integration you can install in a couple clicks, and when any ESPHome devices are on your network, Home Assistant can adopt them using the encryption key in your configuration for the handshake. Then they appear like any other light.

The lights actually work better than they ever did with the stock firmware. They’re faster, they work without the internet, they integrate directly with the rest of my home assistant, and I have more control over their behavior. None of this required replacing the hardware. These capabilities were sitting inside the controller the whole time; the original software just didn’t expose them.
I think IoT devices should be required to have some supported way to flash your own software and control them locally. That feels especially reasonable when they are built around common, well-understood components like ESP32s that are capable of so much more than manufacturers choose to expose. If a company stops supporting a product or turns off its servers, ownership should not disappear along with them.
Sharing the Knowledge
I put the full ESPHome configuration, pin probe, scripts, wiring photos, backup commands, and recovery notes in the sengled-lightbar-takeover repository. Hopefully others can benefit from this experiment and we can continue to free our IoT devices!
Comments
Powered by Giscus (may need to disable adblockers)