When I first started building my smart home, I did what most people do: I bought a bunch of off-the-shelf smart devices, installed their apps, and connected them to my network. Some of them I've had for years, but as time went on, I realized I don't truly "own" these devices. From lights to smart plugs and even voice assistants, I endeavored to replace them with my own alternatives... or at the very least, take back control of them.

You see, between closed-off ecosystems, cloud dependenices, and even subscription paywalls, the limitations of the hardware I "own" became grating. I've opted to skip most of those off-the-shelf options, unless they can be taken offline somehow, so that my smart home is truly mine. Without the requirement to contact servers halfway across the world or even have an internet connection.

The ESP32 and Zigbee were what made it click

It was a slow descent

Sonoff-Zigbee-USB-Dongle-Plus-Coordinator

The first ever smart home device that I purchased with my new-found focus on owning my smart home was a Zigbee coordinator, alongside a pair of temperature and humidity reporters. These are simple gadgets with a multi-year battery life, and they just work. They report data back to a machine with the Zigbee coordinator connected running Zigbee2MQTT, and nothing ever leaves my network. It's basic, but soon I had door sensors, air quality monitors, and even a fingerbot.

Shortly after, I discovered the ESP32. A Wi-Fi and Bluetooth powerhouse found for just a few dollars, I messaged my colleague, Ayush Pande, in order to get a headstart on what I needed to get started with them and figure out how they work. The thing is, the ESP32 is already the basis of many smart home devices, so there's already an established use case, and it means you control the firmware, rather than the manufacturer.

ESP32 connected to a DHT11 temperature and humidity sensor

I experimented with many different setups at first, and I replicated my Zigbee temperature and humidity sensor with an ESP32 and a DHT11, before building other devices, too. These included motion sensors, small LCD screens, vibration sensors, and so much more. These tiny projects were a lot of fun, addictive, and made me realize just how easy it was to build basic hardware for cheap, with full control, and no requirement for even an outbound internet connection.

In my research, I discovered that many smart lights have an ESP8266 or even an ESP32 inside. I had Tuya smart lights, and while I can certainly use tools like tuya-convert to reflash them and cut them from the cloud for good, I can also use local Home Assistant integrations (such as Tuya Local) to send commands to them over my network. After I got that working, I simply blocked their internet access, and I basically had the same thing but without needing to potentially take them apart for reflashing.

Throughout all of this, I realized how much consumer smart devices lack compared to my own devices that I build. They may not look as pretty or as clean, but they work, and I can always buy cases or even 3D print my own for them if I wanted to make them look as nice as an off-the-shelf smart home product.

Given how terrible the software often is when it comes to smart home products, it's a blessing to use Home Assistant to control everything. I don't ever open the Smart Life app anymore, and other applications from other vendors (such as Govee) are rarely used. Why would I? Everything is running locally, in a nicely laid-out app, and I can upgrade, tweak, or even entirely repurpose a device on a whim.

I've built devices better than any others I used before

Built specifically for my needs

Once I was comfortable with ESPHome and development on the ESP32, the possibilities felt endless. I'm genuinely proud of the devices that I've built, and they fulfill use cases that suit me specifically rather than a generic device purchased off the shelf. Even for my voice assistants, I can build my own commands that I can never get on an Amazon Echo or Google Nest device. Some of what I've built include:

  • XIAO 7.5-inch ePaper Panel
    • Pulls from my location for the weather
    • Shows my living room temperature
    • Shows my tasks and calls for the day.
  • ReSpeaker Lite
    • Voice assistant for my bedroom powered by my local LLM and Home Assistant
    • Wired to an old CD wallet speaker
  • ReSpeaker XVF3800
    • Voice assistant for my office
  • Waveshare 64x32 matrix display
    • Shows alerts
    • Now playing music
    • Weather
  • Elecrow CrowPanel Advance HMI ESP32 7.0
  • WT32-SC01 Plus mounted on my NAS
    • Shows temperatures, power draw, and can alert me when a container goes haywire

These are just some of the fun projects that I've pulled off and have actually been useful additions to my smart home. I've built a ton of different sensors and other bits and pieces, but these are the most genuinely-useful additions that I've made. These are all used daily in my home, and have made it easier for me to stay organized, productive, and on top of my work. All while keeping my data truly mine.

The beauty of all of these is that instead of relying on a company's servers or dealing with app updates that break integrations, I can modify and expand my own devices whenever I want. If I want to change what a button does, I edit a YAML file in ESPHome and upload new firmware. The same goes if I want to repurpose it. I just... can. Plan it out, write the code, and deploy it.

Of course, it's not all perfect. These projects can take time to set up, and you'll inevitably spend hours troubleshooting your wiring, debugging YAML configs, or figuring out why your ESP32 won't connect to Wi-Fi. But for me, that's part of the fun. I've learned a lot more about electronics, networking, and I've been able to use different programming languages than I'm normally used to, all from building my own smart home hardware.

Honestly, ever since making the switch, there's one major realization I had. It's hard to go back to hardware that you realize you don't control, especially when everything you've built works so much better. It just takes time to get it to that point.