Local control for Atomberg smart BLDC fans in Home Assistant — over Wi-Fi and Bluetooth, with no cloud, no account, and no internet required.
Atomberg's own app and the official integration route every command through Atomberg's cloud. Atomberg Local talks to the fan directly on your LAN (UDP) and over Bluetooth LE — commands never leave your network.
- 🔍 Discovers every fan on your network and over Bluetooth — and tells you which are provisioned (on Wi-Fi) vs un-provisioned (Bluetooth-only, not yet set up).
- 📶 Wi-Fi + Bluetooth, automatically. Provisioned fans are controlled over Wi-Fi (fast, push state). Fans not on Wi-Fi are controlled over Bluetooth — no setup required.
- 🔁 Automatic fallback. If a fan's Wi-Fi is weak, disconnected, or a command isn't confirmed, it falls back to Bluetooth transparently.
- 🧩 Self-reconciling. A fan first seen over Bluetooth and later provisioned onto Wi-Fi is recognised as the same device (keyed by its
device_id) — no duplicates, it just gains Wi-Fi. - 🏷️ Model recognition from the fan's series code (e.g.
S2 → Renesa Elite). - 🎛️ Full control: power, speed (1–6), sleep mode, off-timer (Off / 1 / 2 / 3 / 6 h), and the LED underlight (on/off, brightness, and warm/cool/daylight — where the model supports them).
- ☁️ 100% local — verified with all cloud/proxy tooling switched off.
- Home Assistant 2024.8 or newer.
- A Bluetooth adapter configured in Home Assistant (for BLE discovery, fallback, and Bluetooth-only fans). Wi-Fi-only use works without one.
- Home Assistant on the same subnet as your fans, with UDP ports 5600 and 5625 not blocked (used for local control and state).
- HACS → ⋮ → Custom repositories → add
https://github.com/allusv/atomberg-localas an Integration. - Open the Atomberg Local card, click Download, then restart Home Assistant.
⚠️ This last step is required — downloading in HACS does not add the integration. Go to Settings → Devices & Services → ➕ Add Integration, search Atomberg Local, and add it.- Your fans are discovered automatically. No IP addresses or configuration needed.
If you skip step 3 you'll see no devices and no entities — HACS only copies the files; Home Assistant still needs you to add the integration so it starts the discovery listener.
- Copy
custom_components/atomberg_localinto your Home Assistantconfig/custom_components/folder and restart. - Then do step 3 above: Settings → Devices & Services → ➕ Add Integration → Atomberg Local.
| Wi-Fi (UDP) | Bluetooth (GATT) | |
|---|---|---|
| Commands | JSON datagram → fan :5600 |
same JSON → command characteristic |
| State | fan broadcasts on :5625 (push) |
read from the state characteristic |
| Works when | fan is provisioned & on your LAN | always in BLE range (even un-provisioned) |
Each fan is identified by its stable device_id (its Wi-Fi MAC), which both transports expose — so Home Assistant always sees one device per fan regardless of how it's reached. Set the per-fan “Prefer Bluetooth” switch to force BLE-only control.
- Fan — power + speed (1–6)
- Light — LED underlight: on/off on all lit models, brightness on dimmable models, and warm / cool / daylight as selectable effects on the decorative Aris models
- Switch — Sleep mode, Prefer Bluetooth
- Select — Timer (Off / 1 / 2 / 3 / 6 hours)
- Sensor — Connection (Wi-Fi / Bluetooth / Offline) and BLE signal (diagnostic)
Which light controls appear depends on the fan model (below).
Works with any Atomberg smart fan that announces itself on your network or over Bluetooth. The series code (part of the fan's local name, e.g. atomberg_S2_…) maps to a friendly name and a capability profile that decides which controls appear — so a fan only shows brightness/colour if that model actually has them. Names are best-effort; capabilities are cross-checked against Atomberg's cloud integration and extended across each product family — see models.py.
| Series | Model (approx.) | Speed | LED on/off | Brightness | Colour modes |
|---|---|---|---|---|---|
R1 |
Renesa | ✅ | ✅ | – | – |
R2 |
Renesa+ | ✅ | ✅ | – | – |
R3 |
Renesa Smart+ | ✅ | ✅ | – | – |
S1 |
Studio+ | ✅ | ✅ | ✅ | – |
S2 |
Renesa Elite | ✅ | ✅ | ✅ | – |
I1–I5 |
Aris / Aris Starlight | ✅ | ✅ | ✅ | ✅ |
M1 |
Efficio | ✅ | ✅ | ✅ | – |
M2 |
Efficio+ | ✅ | ✅ | – | – |
K1 |
Gorilla | ✅ | – | – | – |
Unknown series still work (power/speed/sleep/timer, plus an on/off light), and an unrecognised I… code is assumed to be an Aris with brightness + colour. Only S2 (Renesa Elite) is hardware-verified so far — if your fan is mis-detected or a control is missing or non-functional, please open an issue with your series code; refining the table is a one-line change.
- Onboarding a brand-new fan to Wi-Fi still uses the Atomberg app (the credential exchange is encrypted). Once provisioned, everything here is local. Bluetooth-only control works without provisioning.
- Model detection is series-based and approximate.
- Local state exposes power/speed/sleep/timer/LED/brightness/colour; some raw telemetry fields are not decoded.
"No devices detected" / no entities after installing. The usual cause: the integration was downloaded in HACS but never added. Go to Settings → Devices & Services → ➕ Add Integration → Atomberg Local (see step 3 above). Then give it a few seconds — Wi-Fi fans announce themselves on your LAN and appear automatically.
Still nothing? Check:
- Home Assistant is on the same subnet as the fan, and UDP 5600/5625 aren't blocked (VLANs/guest networks often block broadcast).
- A Bluetooth adapter is set up in HA if you're relying on Bluetooth-only (un-provisioned) fans.
- Enable debug logging to see discovery activity: add to
configuration.yaml→logger: logs: custom_components.atomberg_local: debug
The icon shows as "image not available" in the HACS store panel.
This is a known HACS limitation, not a problem with this integration. Since HA 2026.3, custom integrations ship their brand icons inside the integration (this one does, under custom_components/atomberg_local/brand/), and the HACS store panel hasn't yet been updated to read them — it still queries the public brands CDN, which doesn't host custom-integration icons. The icon displays correctly once installed, on the Integrations page and on each device. Nothing to fix here.
Not affiliated with or endorsed by Atomberg. Trademarks belong to their owners. Use at your own risk.