Professional ESPHome infrastructure: manage devices without breaking entity IDs, automations, or dashboards
Project description
ESPro
ESPro turns physical ESPHome devices into swappable infrastructure beneath stable logical identities.
The Problem
ESPHome ties device identity to physical hardware. When a broken device gets replaced:
- All Home Assistant entity IDs change
- Dashboards break
- Automations need manual updates
- 30+ minutes of recovery work per device
This tool aims to simplify device comissioning and management for professional installers and power users who want to treat home infrastructure as code.
The Solution
Hardware abstraction layer for ESPHome.
Home Assistant connects to stable logical devices (outdoor_light_1), not physical hardware. When a device breaks, update a config file and restart—entity IDs stay stable, automations keep working.
# config/devices.yaml
logical_devices:
outdoor_light_1:
physical: esp-sonoff-1.local
chicken_scale:
physical: esp32-coop.local
Device dies? Change the IP, reload ESPro mappings. Done.
Architecture
Home Assistant (stable entity IDs)
↓
ESPro (device registry + proxy)
↓
Physical ESPHome Devices (swappable)
Three layers with clear responsibilities:
- ESPHome - Firmware and I/O
- ESPro - Hardware abstraction and lifecycle management
- Home Assistant - Automations and UI
Philosophy
Boring technology: Docker, YAML, Git, REST—nothing exotic.
Plain text wins: Configuration in Git-tracked YAML. No database, ever. Audit trail via git log, rollback via git revert, backup via git push.
Infrastructure as code: Reproducible deployments. Version-controlled configuration. Offline-capable.
Unix philosophy: Do one thing well—provide hardware abstraction. Don't replace ESPHome or Home Assistant.
Status
Early development. Validating technical feasibility and gathering community feedback.
Target audience: Professional installers managing 10-1000+ devices across single or multiple sites who need reproducible deployments and version stability.
Questions?
This is a proof-of-concept. Feedback is welcome.
Development
Quick start:
- Install uv
- Install dependencies:
uv sync - Run CLI:
uv run espro --help - Run tests:
uv run pytest
Available invoke tasks (optional, install with uv tool install invoke):
invoke lint- Run ruff and mypyinvoke test- Run tests with coverageinvoke clean- Remove untracked files (interactive)
License
MIT License - see LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file espro-0.1.0.tar.gz.
File metadata
- Download URL: espro-0.1.0.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64bd8f81d63102200858a3c26a68f08ed12542889940ce1836a6eadf676a5533
|
|
| MD5 |
34db3ca42ece080526c1dded9e5aba07
|
|
| BLAKE2b-256 |
a9d969e21348eae302a3456f83baf8d6f506d743edc319a7715b8da49f504e6f
|
File details
Details for the file espro-0.1.0-py3-none-any.whl.
File metadata
- Download URL: espro-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb6af16fd5448d9ab62e04b3f55b67b269dce9a18ed02acb505df1eacd7536d1
|
|
| MD5 |
bfbdc710e19ac1508ce42df30924a0bd
|
|
| BLAKE2b-256 |
7d21648dc512d0249a7492a4791e61875b92f8732b6cb3f430a021e71152ee8d
|