Best smart fans with local control
The best ways to put a ceiling or pedestal fan under full local control with Home Assistant using Zigbee, Z-Wave, or Matter, with honest protocol notes.
On this page
If you’re building a local-first smart home, you want fans that respond instantly and keep working when the internet doesn’t. The reality of “smart fans” is that the best local-control options are usually controllers you add to an existing fan, not all-in-one smart fans. This guide focuses on putting a ceiling fan (or a plug-in fan) under genuine local control with Home Assistant, and is honest about the protocol each option uses.
Local control: why it matters, and what it means
Local control means fan speed and on/off travel over your own network — no cloud round-trip. For a ceiling fan that comes down to the radio in the controller: Zigbee and Z-Wave pair to a local coordinator; Matter over Thread pairs to a Thread border router; and Wi-Fi is only local if the device runs ESPHome or exposes a local LAN API. Plain cloud Wi-Fi fans are the ones that stop responding during an outage.
Top ways to get a fan on local control
1. Inovelli Fan/Light Canopy Module — Zigbee or Matter-over-Thread
The cleanest option for a standard ceiling fan with a light kit. The Inovelli Blue Series Fan/Light Canopy Module (model VZM36) is a Zigbee 3.0 module that tucks into the fan canopy and gives you independent control of fan speed and the light dim level. It pairs directly to ZHA or Zigbee2MQTT — no Inovelli hub, fully local. (It needs constant 120V power and a neutral wire at the canopy.) There’s also a White Series version (model VTM36) that’s Matter over Thread, which pairs to HA through a Thread border router and the Matter integration and also works with Apple Home, Google Home, SmartThings, and Hubitat. Note the model numbers carefully — VZM36 is Zigbee, VTM36 is Matter/Thread; they look similar but are different radios. Pair either with an Inovelli fan switch for a proper wall control, or drive it entirely from automations. This is the recommendation for most people.
2. Sonoff iFan04 — Wi-Fi (ESPHome or local LAN)
A budget Wi-Fi controller that replaces the fan’s internal logic and gives you Low/Med/High plus light on/off. It is Wi-Fi (2.4 GHz) — not Zigbee or Z-Wave. To keep it local you have two routes: flash ESPHome onto it (requires soldering — it doesn’t support Sonoff’s OTA DIY mode), or keep stock firmware and use the SonoffLAN custom integration (HACS) for local LAN control. It also has a 433 MHz RF remote. Cheap and effective, but the soldering/ESPHome step is the price of keeping it fully local.
3. Z-Wave fan controllers (GE/Jasco “Enbrighten”) — Z-Wave
If your home runs Z-Wave, a Z-Wave in-wall fan-speed switch (the GE/Jasco Enbrighten line is the common one) pairs to a Z-Wave controller via Z-Wave JS and exposes fan speed locally with no cloud. These are in-wall switches sized for a fan circuit, so they suit hard-wired ceiling fans where you want a physical wall control.
4. Hampton Bay / King of Fans Zigbee fan-light controller — Zigbee
Home Depot’s Hampton Bay (King of Fans) Zigbee fan/light controller is an inexpensive in-canopy module that pairs to ZHA or Zigbee2MQTT. It works locally, though historically support has been a bit fiddly (older HA versions exposed it as a plain switch; current versions handle fan + light better). A reasonable budget pick if you can find it, but the Inovelli module is the more polished choice.
5. Bond Bridge — local RF/IR bridge for existing remote-controlled fans
If your ceiling fan already came with an RF (or IR) remote, the Bond Bridge is the least-invasive option: it learns the remote’s signals and re-transmits them, so you don’t have to rewire the canopy at all. Bond’s Home Assistant integration is local push over your LAN (using a local API token), so day-to-day fan speed and light control runs locally without a cloud round-trip. The catch is that RF is largely one-way — Bond sends commands but can’t always read true fan state — so HA’s reported state can drift if someone uses the physical remote. Best when you want zero wiring work and your fan already has a supported remote.
Things that get miscalled “smart fans”
To save you a bad purchase:
- Levoit Core 400S is a Wi-Fi air purifier, not a Zigbee/Z-Wave fan. It integrates with HA only through the cloud-based VeSync integration — not a local-first fan.
- Apollo AIR-1 is an ESPHome Wi-Fi air-quality sensor (PM, VOC, temperature and humidity as standard; CO₂ only with the optional SCD40 add-on), not a fan. It’s excellent for triggering a fan automation based on air quality, but it doesn’t move air.
- Philips Hue White A19 is a light bulb, not a fan.
You can absolutely build a great automation where an air-quality sensor (an AirGradient One reads CO₂ out of the box; an Apollo AIR-1 needs its optional SCD40 module) bumps up a fan when CO₂ or PM climbs — just understand the sensor and the fan controller are two separate devices.
Tradeoffs
- Cost vs. effort: the Sonoff iFan04 is the cheapest, but keeping it local means soldering ESPHome or accepting the SonoffLAN integration. The Inovelli module costs more but is local out of the box.
- Ecosystem: match the controller’s radio to what you already run — Zigbee module if you have a Zigbee mesh, Z-Wave switch if you’re on Z-Wave, Matter/Thread White Series if you’re building around Thread.
- Wiring: canopy modules need access to the fan’s wiring; in-wall Z-Wave switches need a fan-rated circuit. Plan for the install.
Quick verdict
- Best overall: Inovelli Fan/Light Canopy Module — Blue Series (VZM36, Zigbee) or White Series (VTM36, Matter over Thread), both fully local.
- Cheapest, if you’ll flash it: Sonoff iFan04 with ESPHome (or stock + SonoffLAN for local LAN).
- Already on Z-Wave: a GE/Jasco Enbrighten Z-Wave fan switch.
- No rewiring, fan already has a remote: Bond Bridge — local RF/IR re-transmitter.
The honest takeaway: the reliable local “smart fan” is really a good fan paired with a Zigbee, Z-Wave, or Matter controller — match the radio to your setup and you’ll get instant, cloud-free fan control.