Those cheap patio lights come with a little controller and no app, no WiFi, no integration, nothing. Just the remote, and if you lose it you are done. It turns out that controller was sending its commands over the very commonly used, and also very crowded, 433 MHz band. So I bought a $5 Tx/Rx module on Amazon and started listening to every button push and every interaction with the light controller.
Finding one signal in the noisiest band there is
The difficulty with this one was actually isolating the signal from the external noise of every other 433 MHz device around. Doorbells, routers, my own weather station, car keys. They are all shouting in the same place, and the receiver does not care whose signal it is.
The lights speak OOK, on-off keying, so the whole message is just the carrier switched on and off with specific timings. Each button comes out as a preamble around 1700 to 2000 microseconds, then a train of roughly 400 to 550 microsecond pulses, about 120 to 140 timing values in total, and the whole transmission is over in 150 to 200 milliseconds. Getting a complete pattern that actually triggered a specific command, rather than a half-captured burst with a neighbor's garbage spliced into the middle of it, was most of the work.
The codes are fixed, not rolling. Meaning, capture once, play it forever.
At some point I captured the signal for a car honk from a neighbor while I was trying to capture my own Plus button. The funniest thing in the world. I still have that code saved in a file.
Two wins for the price of one
Eventually I deciphered the handshake for the light controller, and how to detect the end of the signal for each of the buttons on my remote. With that I got two things.
First, I built a transmitter and crammed it into an ESPHome YAML, so I can drive the lights directly from Home Assistant. Every button on the original remote is now an entity: on/off, 25%, 50%, 75% and 100% brightness, the 3 hour and 5 hour timers, and the Lighting, Flash and Breath modes. Twelve buttons, twelve switches.

Second, I can also listen to the actual buttons on the physical remote being pushed and fire events in Home Assistant. Double whammy. So I did not only gain access to the lights, I got twelve buttons on a remote that can now do whatever I want, whether or not it has anything to do with the patio. One of them is wired to an automation called "Patio Remote Timer 3H, Toggle All Sala Lights", which has nothing to do with the patio at all. It is just a spare button now.
The whole thing runs on an ESP32-C3 with a 433 MHz receiver and transmitter
hanging off two GPIO pins. It lives inside a toy dinosaur next to the TV, which
is why its hostname is dino-rf-gateway and why it looks like this:

Then automate away
Toggle the lights off when it starts raining. Toggle them on when the patio security camera detects something. Or whatever I want, because at this point they are just another entity in the house.
The lesson was not even about the lights
It is the realization that technology today lets you make your home fully and really smart without breaking the bank like it did a couple of years ago.
A small brain for your homelab and a couple of cheap chips, and your home starts to look different.
Book a consult with us. It is free, and let us know what you would like to automate in your home today. We will work around your existing lights, plugs or equipment. Let's talk.
