Enhanced Home Assistant integration for Elica Connect range hoods
(ESP32-C6 based, app com.replyconnect.elica). Fork of
benedettosiddi/elica-connect-ha
with hardened cloud connectivity, optional features and a full test suite.
🇮🇹 Italiano · 🇩🇪 Deutsch · 🇪🇸 Español · 🇫🇷 Français
Verified on: Elica Illusion (dataModelIdx 8, PRF0199706) — compatible with all Elica Connect hoods, see Compatibility — HA 2024.11+, verified on 2026.7
| Entity | Type | Description |
|---|---|---|
| Fan | fan |
Named presets low/medium/high/boost + percentage; optional auto preset |
| Light | light |
On/off + brightness; optional tunable white with named presets |
| Ambient light | light |
Optional secondary light: dimmer + tunable white |
| Filter | sensor |
Grease filter efficiency % |
| Air quality | sensor |
Optional (see Optional features) |
| Timer | number |
Optional native auto-off timer (minutes) |
Real-time state via cloud MQTT push (cloudprodmqtt.elica.com), with a
5-minute REST sanity poll. Commands are optimistic: the UI reacts instantly
and reverts automatically if the cloud rejects the command.
| Hood | Status |
|---|---|
| Elica Illusion (dataModelIdx 8) | ✅ Fully verified: all capability codes confirmed on a real device (see table below) |
Any other Elica Connect hood (app com.replyconnect.elica) |
✅ Compatible: core entities (fan, main light, filter) work out of the box; model-specific features are enabled via the built-in code finder — see DISCOVERY.md |
The cloud API is the same for the whole Elica Connect range; only the capability codes of some features vary by model. That is exactly what the Options + code finder workflow is for: identify the codes on your hood once, enter them, done. Please share what you find via a Capability report issue.
- Resilient MQTT push — automatic reconnect with backoff; when the OAuth token expires, fresh MQTT credentials are pushed to the client so push updates never silently die
- Proactive token refresh based on the JWT
expclaim (no 401 round-trips) - Reauthentication flow — a changed Elica password triggers the standard HA reauth banner instead of a permanent setup error
- Duplicate protection — one config entry per hood (
unique_id) - Robust optimistic state — no UI bounce-back after commands; rollback on cloud errors
- Downloadable diagnostics with sensitive-data redaction
- Options flow for capability codes of not-yet-mapped features
- Configurable MQTT broker (host/port) in the Options, so a future Elica broker change needs no new release
- Test suite — 20 tests via
pytest-homeassistant-custom-component
- HACS → ⋮ → Custom repositories → add this repository as Integration
- Install Elica Connect Plus and restart Home Assistant
- Settings → Devices & services → Add integration → Elica Connect Plus
- Enter your Elica Connect app credentials
Copy custom_components/elica_connect_plus/ into your HA
custom_components/ folder and restart.
Migrating from the original integration? Remove it first: the domain is different (
elica_connect_plus), so entity IDs will change — review your automations.
Air quality, AUTO mode and light color use dataModel capability codes that are not yet publicly documented and may vary by model. The integration supports them out of the box, gated behind the integration Options:
- Discover the codes on your hood following DISCOVERY.md (two diagnostics downloads, no extra tools needed)
- Enter them in Settings → Devices & services → Elica Connect Plus → Configure
- The integration reloads itself and the new entities/features appear
Found the codes for your model? Please open an issue so they can be documented for everyone.
| Code | Function | Values |
|---|---|---|
| 64 | Fan mode | 1=normal, 4=boost |
| 96 | Light brightness | 0–100 (%; 0=off) |
| 110 | Fan speed | 0=off, 1–3 |
| 97 | Light color (tunable white) | 0=warm – 100=cold |
| 64 | Fan mode (extended) | 16=auto (bitmask: 1=normal, 4=boost, 16=auto) |
| 112 | Air quality | 1=ottima … 5=pessima; published only while the sensor is active (auto mode) |
| 432 | Auto-off timer | minutes (firmware countdown to 0) |
| 100 | Ambient light brightness | 0–100 (%; 0=off); dimmer only, no color |
English (default), Italian, German, Spanish and French, following the
Home Assistant UI language: entity names, options dialog, fan preset names,
light effect names and air quality states are all localized via
translations/. Automations use the language-neutral slugs (medium,
very_warm, fair, ...). PRs adding languages are welcome — copy
translations/en.json and translate.
See docs/automations.md for ready-to-use YAML: cooking auto-start, delayed switch-off, filter maintenance alerts, courtesy night light.
Prefer round preset buttons over the default dropdowns? See the optional
dashboard guide (native YAML or custom:button-card).
Using Amazon Alexa? See the optional Alexa guide for voice control and spoken announcements (some examples need the Alexa Media Player custom integration).
pip install -r requirements_test.txt
pytest tests/CI runs the test suite plus hassfest and HACS validation on every push.
Released under the MIT License, © 2026 Roberto Marturano.
This project is a fork of and builds upon elica-connect-ha by @benedettosiddi — full credit to their original reverse-engineering work.
Cloud API reverse-engineered via mitmproxy by @benedettosiddi, whose work this fork builds upon.
Elica Connect Plus is an independent, unofficial project. It is not affiliated with, authorized by, or endorsed by Elica S.p.A., provider of the Elica Connect system and its ecosystem. "Elica", "Elica Connect" and all related names, marks and logos are trademarks of Elica S.p.A. or their respective owners, used here for identification purposes only. This integration relies on a reverse-engineered, undocumented interface that may change or stop working at any time.
The software is provided "as is", without warranty of any kind. The authors and contributors accept no liability for any damage to appliances or property, malfunction, data loss, service disruption or account issues arising from its use. You use it entirely at your own risk.
See DISCLAIMER.md for the full text (available in English, Italiano, Deutsch, Español and Français).