The SofaBaton workaround nobody asked for
The route that didn't exist, and the one that did.
We sold a customer a SofaBaton X2 remote and a set of Lutron Caseta light switches, 2 products we'd used plenty of times separately, and it wasn't until we were standing in the house that we realized SofaBaton doesn't natively integrate with Lutron Caseta.
Honestly, it was an easy mistake to make. We'd spent years doing Logitech Harmony integrations, and Harmony played nice with almost everything. We got comfortable assuming a universal remote in that category would just work with a mainstream lighting system like Caseta. It didn't, and that gap was on us for not double checking before the sale.
There wasn't a cost to eat here, but there was a scramble for a workaround. I'm enough of an electronics nerd that I almost always have a Raspberry Pi or an ESP32 dev board sitting in my backpack, just because. On this job I had a Raspberry Pi Zero 2 W with me, and I knew SofaBaton had an integration with Home Assistant, so my first thought was simple: spin up Home Assistant on the Pi, and use that as the bridge to the Caseta hub.
Except Home Assistant doesn't officially support running on a Pi Zero. So I needed another way in.
I ended up using Claude Code to help write a small abstraction layer instead. The Raspberry Pi runs headless, with an HTTP endpoint sitting on it. Any traffic coming in from SofaBaton over its IP control feature hits that endpoint, and the Pi translates it into calls to the Lutron Caseta hub to control the actual light switches. No Home Assistant required, no extra hub, nothing beyond the Pi itself and my phone to set it up.
Once that bridge was running, I was able to add Caseta commands directly into the SofaBaton's macros, activities, and even physical hardware buttons on the remote, so the SofaBaton could effectively control the Lutron switches natively, at least from the customer's perspective. They have no idea there's a Raspberry Pi quietly translating commands behind the scenes.
It's a small story, but it's a good reminder of two things. First, don't assume a new product behaves like the old product it's replacing in your head, even when they seem like they should be interchangeable. Second, sometimes the fix isn't the official, documented, blessed integration path. Sometimes it's a $15 board out of your backpack and an afternoon of writing glue code.
Read this on the web · You're getting this because you subscribed to Pull Schedule.