TL;DR: I want LTS-style stability for my home automation. That doesn’t really exist in the HA/ESPHome world, so I’m experimenting with a setup where ESPHome devices get stable logical identities via MQTT. Posting early to get architectural feedback.
Hi all,
I’m working on a small open-source experiment called ESPro. This is not a product announcement and I’m not looking for users yet — I’m explicitly looking for feedback on the idea and architecture.
The problem that got me here
I run about a dozen ESPHome nodes for outdoor sensors and switches. Yes, I run indoor Sonoff hardware outdoors. I’m a cheap bastard. The assumption was simple: replacing a failed board would be a 15-minute job, so overall it’d be cheaper than buying outdoor-rated gear. Ideally I’d keep a stack of pre-flashed spares and just swap one in.
That assumption was wrong.
In ESPHome + HA, firmware and entity IDs are tightly coupled to hardware. When a board dies, you don’t just replace hardware — you rebuild identity. In practice, every failure costs about an hour: flash a new board, fix entity IDs, repair automations, update dashboards.
Last week it got worse. An old ESPHome config wouldn’t compile against current ESPHome anymore. That forced an ESPHome update, which pulled in Home Assistant changes, which then broke other things. A dead board turned into half a day of digital janitor work I never asked for.
What I actually want
I’ve been running Home Assistant for 8+ years. Feature-wise, I’ve been good for at least four. I don’t need new integrations or UI tweaks every month. I want stability.
“If it ain’t broke, don’t fix it.”
Security updates? Absolutely. But I want to choose when to upgrade, not be forced into a chain reaction because a sensor died in the rain.
What I’m really after is an LTS mindset for home automation. That doesn’t exist in the HA/ESPHome ecosystem — and I get why. The ecosystem optimizes for features and ease of use. That’s fine. It’s just not what I personally need anymore.
A different path
I think LTS-style stability can exist alongside the current ecosystem, not as a replacement. The key is looser coupling, with MQTT as a stable boundary.
┌───────────────────────────────────────────────────────────────────┐
│ MQTT Bus (logical identities) │
└───────┬─────────────────┬─────────────────┬─────────────────┬─────┘
│ │ │ │
┌───▼───┐ ┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ ESPro │ │zigbee2mqtt│ │ Home │ │ your │
│daemon │ │ │ │ Assistant │ │ tools │
└───┬───┘ └─────┬─────┘ └───────────┘ └───────────┘
│ │
ESPHome Zigbee
Native API devices
HA stays the UI and automation engine. ESPHome stays ESPHome. Other tools can come and go. Things aren’t welded together.
First step: ESPro
The most painful issue for me is device identity. In HA, identity is effectively tied to hardware. Replace the board, lose the identity.
ESPro adds a small layer that maps logical device names (garden_pump) to physical devices (pump-aabbcc). Home Assistant only ever sees the logical name. Board dies? Flash a new one, rebind, done.
Conceptually it’s similar to what zigbee2mqtt does with device naming — but applied to ESPHome’s native API instead of Zigbee.
Current state:
- CLI prototype
- Discovery and registry working
- No daemon yet (next step)
This is not meant to replace ESPHome or Home Assistant. Native ESPHome integration can happily coexist for devices you don’t want to manage this way.
Feedback I’m looking for
- How would you design a home automation architecture that supports LTS-style deployments?
- Critical review: why this might be a bad idea
Repo: https://github.com/sjev/espro
I’m posting this early on purpose. I’d much rather hear “this won’t work” now than after sinking a lot more time into it.