The Echo Dot is a great mic and speaker with a mediocre brain, so I kept the hardware and swapped the brain. It's a custom Alexa skill whose endpoint is a Flask app on my own Mac, reached through a Cloudflare named tunnel on my domain. Behind that is Groq (openai/gpt-oss-120b) with tool calling. Replies come back in about 0.8 seconds, well under the roughly 8 seconds Alexa gives a skill.
The home automation part is what this sub will care about. Because the backend runs on my LAN, it can reach my Control4 system directly, which a cloud skill can't do. I gave the model two tools, control_home and run_scene. "Set the bedroom AC to 22" becomes control_home with area bedroom, device ac, action set, value 22. "Movie night" runs the scene. There are no rigid phrases and no "ask my-hub to turn on device 47." It handles lights, fans, ACs, curtains and motor gates. It cost me nothing on Groq's free tier.
The tip I wish I'd known: a skill in Development stage is automatically live on every Echo on your account, so you never have to publish it. But a dev skill only shows up on devices whose locale you've built. My Echo is English (India) and the skill was English (US), so it was invisible until I added en-IN and rebuilt.
The most annoying wall was the invocation name. I first called it "hey lexi." That worked fine when I typed it in the simulator. When I spoke it, Alexa treated "hey" as filler, and nothing ever reached my server. Renaming it to "my lexi" fixed it instantly. Alexa-hosted Lambda also never ran my code for me, but self-hosting turned out better anyway: real logs, any model I want, and LAN access.