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 protocol notes.
On this page
Almost nothing sold as a “smart fan” is the right way to get a fan under local control. The options that respond instantly and keep working when the internet doesn’t are mostly controllers you add to an existing fan, so this page is about putting a ceiling fan (or a plug-in fan) under real local control with Home Assistant, and it names the protocol each option uses.
The Inovelli Fan/Light Canopy Module (VZM36 on Zigbee, VTM36 on Matter over Thread) is the pick for most ceiling fans; the Bond Bridge Pro if the fan already has an RF remote and you don’t want to rewire; a local smart plug for a mechanical pedestal fan. I haven’t run any of these controllers myself; the picks rest on the spec sheets and what other Home Assistant users report.
What local control means for a fan
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.
A close cousin worth knowing about is the Treatlife DS03, which is a single-gang in-wall fan and light switch rather than an in-canopy module. Out of the box it is a Tuya cloud device, and the local routes are the same two: flash it to Tasmota or ESPHome, or drive it through LocalTuya. Check the hardware revision before you order. Most current units ship with a Tuya WB3S (Beken) module that has to be flashed over serial, and the over-the-air Tuya-Convert route only ever worked on the early ESP8266 stock.
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 Fan Control, model 14287, is the common one - a dedicated 3-speed unit) pairs to a Z-Wave controller via Z-Wave JS and exposes fan speed locally with no cloud. One buying note before you go looking for one: the 14287 is discontinued, so that one means buying remaining stock. It stays a fine device if you already own it or find some on a shelf, but check availability before you plan a build around it. These are in-wall switches sized for a fan circuit, so they suit hard-wired ceiling fans where you want a physical wall control. Two wiring details decide whether it fits your box: it controls speed only, so a fan with a light kit needs a second switch beside it for the light, and it needs a neutral wire.
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 Pro - local RF bridge for existing remote-controlled fans
If your ceiling fan already came with an RF remote, the Bond Bridge Pro 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. (The Pro model is RF-only - no IR - which is fine for ceiling fans, whose remotes are almost always RF, and one bridge can cover several fans.) 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. The longer walkthrough, smart ceiling fans without rewiring, covers the setup and the state-drift caveat in detail.
6. Lutron Caseta Fan Speed Control - Caseta RF, local via LEAP
The Lutron Caseta Smart Fan Speed Control (PD-FSQN) is a dependable 4-speed in-wall controller. It uses Lutron’s proprietary Clear Connect RF and needs a Caseta Smart Hub, but once paired, Home Assistant drives it locally over the LEAP protocol - no cloud round-trip for day-to-day control. The usual Lutron trade-off applies: you buy into the hub, and in exchange you get some of the most reliable RF gear in the category. Check your fan against Lutron’s compatibility list before you order, because it is narrower than the product page suggests: the PD-FSQN is built for an AC paddle fan whose speed is set by a pull chain, and Lutron’s instructions say not to use it on a DC-motor fan, on a fan that already has an integrated fan speed control such as a remote, or on the fan’s light kit. It also needs a neutral wire in the wall box. If your fan came with an RF remote, that exclusion points you back to the Bond Bridge Pro above rather than this switch.
7. The all-in-one exception: Big Ass Fans i6
Most integrated “smart fans” are cloud Wi-Fi; the Big Ass Fans i6 is the notable exception. Its control surface is a local push TCP API that Home Assistant supports natively - the built-in Big Ass Fans integration, no cloud account in the control path - including the SenseME auto-comfort mode. It is a four-figure fan, so it’s the money-no-object pick rather than the default, but if you want one device instead of fan-plus-controller, this is the one that really is local.
8. Plug-in fans: a local smart plug, or the one fan that speaks Matter
Pedestal and box fans are the awkward case, and there are only two answers. The first is a local smart plug: a Shelly Plug US Gen4 - Shelly has discontinued the Plus Plug US it replaces - or an Athom ESPHome smart plug gives Home Assistant instant, cloud-free on/off. The catch is that a plug only switches mains power, so it works properly with an old-fashioned fan whose mechanical rotary knob stays where you left it: set the speed once and the plug becomes the switch. Fans with electronic touch panels usually come back up off after power is cut, which makes them useless on a plug.
The second is the SwitchBot Standing Circulator Fan, the one plug-in fan here with a real local path, and it comes with a condition. Home Assistant’s SwitchBot Bluetooth integration does not cover this model: its supported list carries the desk Circulator Fan, and adding the Standing Fan is still an open request against Home Assistant core. What does work locally is Matter, which on SwitchBot’s side means pairing the fan through a SwitchBot Matter-enabled hub such as the SwitchBot Hub 2. Do that and Home Assistant gets a fan entity; other Home Assistant users report speed and preset control on current firmware, past the bare on/off SwitchBot first advertised. Skip the hub and your only official route is the cloud-based SwitchBot Cloud integration, which is exactly what this guide is trying to avoid. (A community custom integration does add local Bluetooth control, if you are willing to run unofficial code.)
Pairing a fan with an air-quality sensor
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. If you have not chosen the sensor half yet, my roundup of air quality monitors for Home Assistant covers the local options.
Tradeoffs
Cost trades against effort. The Sonoff iFan04 is the cheapest, but keeping it local means soldering ESPHome or accepting the SonoffLAN integration, while the Inovelli module costs more but is local out of the box. Match the controller’s radio to what you already run: a Zigbee module if you have a Zigbee mesh, a Z-Wave switch if you’re on Z-Wave, the Matter/Thread White Series if you’re building around Thread. And plan the install, because canopy modules need access to the fan’s wiring and in-wall Z-Wave switches need a fan-rated circuit.
Quick verdict
Best overall is the 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, is the Sonoff iFan04 with ESPHome (or stock firmware plus SonoffLAN for local LAN control). Already on Z-Wave, a GE/Jasco Enbrighten Z-Wave fan switch does the job, though the common 14287 is discontinued and now means remaining stock. If the fan already has a remote and you don’t want to rewire, the Bond Bridge Pro is a local RF re-transmitter. Already on Caseta, the Lutron PD-FSQN fan control is local via LEAP. Money no object and you want an all-in-one, the Big Ass Fans i6 has a native local-push API in HA. For a plug-in fan, put a mechanical pedestal fan on a local smart plug, or buy the SwitchBot Standing Circulator Fan if you will also buy a SwitchBot Matter hub.
The reliable local “smart fan” is a good fan paired with a Zigbee, Z-Wave, or Matter controller. Match the radio to your setup and you get instant, cloud-free fan control.