I've been trying to get my RF ceiling fans into Home Assistant properly for a while, and kept hitting the same walls:
-
SmartIR is great for AC and media gear, but it didn't really cater for most of my ceiling fans - and where it might, you're hunting for a matching code set rather than just using your own remote.
-
Learning the codes by hand through Developer Tools worked, but I found it frustratingly fiddly — capturing blobs, working out frequencies, then wiring it all into template fans and scripts.
-
Broadlink's own integration doesn't really get past the remote device itself and it doesn't seem possible to retrieve RF codes from their app to use in HA.
So I built a small HACS integration that does the capture-and-replay for you behind a learning wizard. You tell it how many speeds your fan has (and whether it has a separate On button, a light, or any extra buttons), then it walks you through pressing each button on your remote. At the end you get a proper fan entity with speeds, an optional light, and a button for anything custom - all from the UI, no YAML or code lists.
Under the hood it captures with the Broadlink's own RF learn and transmits through Home Assistant's newer radio_frequency platform. Since RF is one-way, the entities are optimistic (HA tracks what it last sent).
Requirements
- Home Assistant 2026.5+ (when the
radio_frequencyplatform landed) - A Broadlink RM Pro / RM4 Pro already set up in the Broadlink integration
Install - it's not in the default HACS store yet (PR's in the long queue), so add it as a custom repo:
- HACS → ⋮ → Custom repositories →
https://github.com/clevrdavid/rf_fan→ category Integration - Download, restart, then Settings → Devices & Services → Add Integration → "RF Fan with Learning"
A couple of tips from setting up my own:
- Learn each speed by the speed it actually produces, not the label on the remote — some remotes are mislabelled or backwards, and you can't fix that after the fact (have to re-learn).
- If a remote won't learn with the frequency sweep (short-burst remotes like the Mercator FRM97 do this), tick "Capture without the sweep" and set the frequency (usually 433.92) — it then listens directly, like learning an IR code.
- You can re-learn a single button, or add new ones, later via Configure on the entry.
Heads up: I leaned on Claude Code heavily while building this, so you'll probably spot some fairly AI-flavoured code and wording in places. It's working across my 5 fans (including two Mercator FRM97s), but it's very much a personal-itch project - so treat it as early, and issues/PRs are welcome (or even if anyone wants to take this on as their own project).