You're right that a custom integration could centralize conversions, autodiscovery and translations — and with the GEA2 fork already publishing ERDs to MQTT, it's a
workable design. I went the other way on purpose, and it comes down to a few principles I built the project around.
Fewer parts, fewer failures. The MQTT route is three long-lived components you have to keep alive and in sync: the adapter firmware, a broker, and a custom
integration. The ESPHome route is one: the firmware. The conversion from raw ERD to a Home Assistant entity happens on the device, and HA reads it over the native
ESPHome API — no broker, no second integration, nothing between the appliance and HA. Every part you don't add is a part that can't break, can't drift out of date, and
doesn't need maintaining.
Native means it's already solved. When an ERD becomes a sensor, binary_sensor, select or climate in ESPHome, it arrives in HA as a first-class entity —
with device classes, units, history, automations and dashboards, for free. A custom integration has to teach HA what each value means; here I map it to a native type
once in the YAML and HA already knows what to do with it.
Local-first, the way HA intends it. The native API is a local, encrypted, push connection: state changes land in HA the moment they happen, with no cloud and no
message bus in the middle. That's the most direct path a device can take into Home Assistant.
One source of truth. Everything for a given appliance — the bus decoding, the ERD-to-entity mapping, the names — lives in one YAML file. In the MQTT design that
logic is split across three repos with three release cycles; when something misbehaves you're debugging across firmware, broker and integration. Here there's one log
stream.
Boring on purpose. A custom integration is an open-ended commitment against a moving HA core — HACS packaging, breaking changes, ongoing upkeep. YAML against
ESPHome is a stable substrate I don't have to chase.
On the entry barrier, which is the fair criticism: I keep a folder of ready-made configs per appliance to copy/paste, the docs are structured so an LLM can generate a
working config from them, and flashing goes through the ESPHome web installer — a lighter path than the PlatformIO/VS Code flow the fork needs. Translations, the point
I raised earlier about my French appliances, also get simpler rather than harder: entity names live in the YAML, so you localize by editing them in your own language
— there's no central translation layer to fork or maintain.
Both designs are valid; this one optimizes for the shortest path between the appliance and Home Assistant, with the fewest things to own. Happy to keep comparing notes
— and I'll take you up on that GEA2 testing offer when I get there.