Solution: Upgrading a traditional ceiling fan for complete fan and light control

One of the more interesting challenges in adding smart and automation technology to your home (or office) would be the ceiling fan. While homes have been wired with lights, outlets and thermostats for a long time, ceiling fans are a relatively new residential fixture option that isn’t always present. This is the type of feature that is dependant upon the environment, builders and the home owner’s preferences. While that calculus might be about practical use, we also can not ignore the fact that the ceiling fans are also decorative. There can be a sense of life created by having a ceiling fan provide just the lightest of breezes. Like many people, this one one of the first upgrades I did to my home.

It is at that point the realities to upgrading your home with new things starts to bite. The typical AC motor ceiling fan is electrically unique because unlike other fixtures it requires a 3 wire cable (usually 14-3) instead of the 2 wires (hot + neutral and the ground). This is because there are separate light and fan controls going into a 2 gang electrical box for separate switches or if you’re one of the cool kids, a 1-gang box with fancy switch like a Lutron Maestro. Chances are if you are upgrading you weren’t one of the cool kids and were faced with the task of either running a new cable or using what might have been your first piece of home tech- a wireless fan controller.

Yea, let’s do that instead of tearing up the house-

These devices place an RF controller at or near your ceiling fan that connects a 2-wire cable to the 3 wires you needed to have control of your fan and lights. A little RF switch lives in your switch box and give light control (including dimming) and fan speed control- typically 3 or 4 speeds. This is what many of us have today.

(RF ceiling fan control switch is on the left)

(RF ceiling fan control module)

The problem…

First let me just say this my solution… a solution and not the solution. Unless are doing this work at the time of building you’re going to have to compromise on a smart solution implementation in some way and there is nothing wrong with that. Furthermore, if you are not comfortable doing electrical wiring you should bring in an electrician to help you plan out what you want to do. My motivation for this post was to conceptually explain a solution to a problem I think many people would have. In researching, I was surprised at how will people were willing to make their ceiling fans less functional- e.g. give up dimming or give up fan speed control, just to have “smart control”. I found it odd that implementing smart tech would actually lead to the loss of so much functionality. While compromise is necessary, I was pretty sure there was a way to do this and I was surprised that the approach I’m going to outline was not already out there as a possibility.

Ok, here we are in 2020 and now you’re faced with the same issue again. There aren’t any switch devices I’ve seen that are able to be a dimmer for the ceiling fan lights AND a proper fan controller. I say proper because if you have already researched this you’ve learned that controlling your fan speed is NOT the same as a dimmer for your lights. Even if such an animal existed, that would only address the upgrades to fixtures that are 3-wire and what many of us need is a 2-wire solution. After thinking this through I realized that the solution needed to do the same thing as my current RF control box did, that is, to split out the fan and light controls at the fixture. The question was how.

The solution…

Aeotec Nano Dimmer (ZW111)
GE Smart Fan Speed Controller (14287)

Electrically speaking all the RF controller does is share the hot and neutral lines between the light and fan motor. The RF switch you place in the wall then communicates directly to that module to control the individual light and fan functions. To replicate that, you are going to tie the hot to the Aeotec and GE hot / line terminals. You are going to also tie the neutral to the Aeotec and GE neutral terminals along with the ceiling fan’s common. Lastly, from the ceiling fan, you’ll tie the light control to the Aeotec’s “out” terminal and the fan control to the GE’s “load” terminal. I would recommend getting a small spool of wire properly sized to your breaker for this circuit so that you can place the units comfortably. In my case, my RF control unit lived on top of the ceiling fan’s body so I put the fan controller in that position and the dimmer opposite it. One reason for that was to give better z-wave coverage (by not having the devices antenna’s too close), the other was that the GE has an LED that gives visual feedback as the speed is changed. The compromise is that you’re going to do more wiring and have to think about the placement of these devices. It probably won’t be perfect but with a little ingenuity and willingness to work through problems, any compromises won’t seem so bad compared to what you get.

(GE in the foreground and the Nano is in the background- “floating” because 14-3 solid core is stiff and the Nano is extremly lightweight)

Done… and since I setup the devices before I installed them (I highly recommend configuring in-wall devices before you install them), I was controlling the ceiling fan from the OpenHAB android app and Basic UI interface once I flipped the break back on. Great… now what about some sort of wall switch? Again, if I am upgrading, I shouldn’t be losing much functionality so for me some sort of wall switch was a must have.

Aeotec Wallmote Quad (ZW130)

This is the one to the slickest devices out there and I really don’t know how I would have solved this problem without it. The old RF switch sat in a housing with a switch at the bottom that essentially acted like a master switch for the RF controller at the fixture. For now, I left that in because I didn’t have a spare dumb switch laying around. Using just the two top quadrants on the Wallmote, I can send scene data to my OpenHAB server to control all the functions I need.

(Wallmote… I’m tapping “button1” here)

This was the fun part because I got to decide how to do this- tap, tap and hold, swipe up and down were all available for me to implement the fan and light controls. The compromise here is that I had to stick a device on the wall next to other switches. It’s definitely not the best match but with the Wallmote, instead of only 3 discrete fan speed levels I created 5. With the lights, I’m able to get a much lower dim light with LED bulbs by tweaking the Nano’s settings (thanks to Chris C. at Aeotec for help with that :+1:t4:). Another win was that I can adjust the brightness up or down whereas with the RF controller it was only on way- a rather annoying issue since the lights would come on at the highest level and then you would dim then (after getting yelled at by everyone in the room). Having this level of control offsets having to learn how to use the Wallmote. It is very sensitive and neither the quadrants nor LED light between them glows. Even during the day it’s hard to see so there is a chance of sending the wrong scene but that is where you have to get creative with how you use it. All in, for me this was not a huge compromise but another great thing about using OpenHAB is that you can make changes quickly. The more you and your normal users play with these controls the better the implementation will be and hopefully the more they will want. :sunglasses:


This is a great Post to have for reference, thank you.
In your picture, is that where you keep the ge switch permanently?

1 Like

Thanks for your comments Luis :+1:t5:

Yes, the ge fan control switch just lives on top of the ceiling fan as you see. Doing something like that seems weird but when you are standing on the floor you forget its there until you look for it (and even then where you position could “hide” it more). Practically speaking, in the dark or low light, the status LED is not that bright and is useful indicated fan status an communication.

Fantastic Keith, thanks for sharing!

Your solution will work for me. I just disassembled my Kichler fan and it is exactly as your fan, an RF unti with the same cables.

My use case is turn the fan on when temperature in the room goes above a certain value, then lower the setpoint if it continues beyond a second higher value. I have a ZWave temperature sensor in the room.

I might disassemble my son’s room fan as well to see if it can work as well. His is different because it has that manual pull cord to select 3 speeds, but I suspect I can replace that (deactivate it) for the GE Smart Fan Speed Controller as well.

Once again, thanks for sharing!

1 Like

Hi Keith and thanks for sharing.

I also think about a solution for my fan problem and want to share you my solution/project, maybe some others may find it useful.

My situation:

We have some very modern and nice looking 72” ceiling fans called “Fanimation Slinger v2”, which I don’t want to replace. They are looking awesome in a modern style home and they are energy efficient with 6 speed DC motor and LED dimmable light. Right after moving in the home, I’ve replaced the standard wall switches with Z-Wave switches (Honeywell 39348) to be able to just switch them on/off as a whole, so they will recover to the last used state. The real control (speed, light) is still done with the original RF remote (TR29 / RH787T with 12 volt battery).

Now, after about 18 month of integrating more and more functions into my OpenHAB and getting more experience with Tasmota, I’ve planned to improve the “smartness” of my fans. After a lot of research and contact with Fanimation support, I have to accept, that NO out of the box solutions are available (generic smart fan controllers will not work on this 6 speed DC motors and the manufacturer has NO smart solution for this type of fan – which is a shame for a manufacturer of such a modern looking fan in the year 2021… also a BroadLink RMPro+ will not work because the remote control uses a rolling code). So I need to find a solution by myself.

After looking inside of the remote receiver of the fan, I was not able to find a simple solution to change the existing receivers to make them smart.

My idea:

I would like to keep my existing RF remote controls for manual usage. So I decided to by an additional TR29 (about $30) and try to hack this to be able to “OpenHAB remote control” this RF remote control to achieve the smartness.

My experimental solution (so far):

First I programmed the additional remote to the same frequency as the original, so both are able to control the fan. I removed the plastic foil with the soft buttons, scratched away the graphite layer and soldered experimental cables to the PCB.
If found out, that all contacts have 12V (middle pin is plus pole) and a current of 900μA flows, if the “button” is pressed. So I decided to add some optocouplers (LTV847) and done some tests with a Wemos D1 mini to emulate button press events via the GPIO pins. So I ended up with the following schema (just for testing, I’ve only connected 4 of the six possible speed buttons and the stop, reverse and light buttons).
I flashed my Wemos D1 mini with Tasmota 9.4.0, used the Generic (18) template and configured the GPIOs. After configuring the MQTT, setting up things and items in OpenHAB, I was able to control the fan.

Bridge mqtt:broker:MosquittoBroker "MQTT Mosquitto Broker" @ "office" [ host="<yourmqtthost>", port=1883, secure=false, clientID="bridge", qos=0 ] {
  Thing topic wemos_d1_mini_mqtt_fan_livingroom "MQTT Wemos D1 mini Fan LivingRoom" @ "livingroom" {
      Type switch : fan_speed_1 "Fan speed 1"  [stateTopic="stat/tasmota_997C8F/POWER1", commandTopic="cmnd/tasmota_997C8F/POWER1", on="ON", off="OFF"]
      Type switch : fan_speed_2 "Fan speed 2"  [stateTopic="stat/tasmota_997C8F/POWER2", commandTopic="cmnd/tasmota_997C8F/POWER2", on="ON", off="OFF"]
      Type switch : fan_speed_4 "Fan speed 4"  [stateTopic="stat/tasmota_997C8F/POWER3", commandTopic="cmnd/tasmota_997C8F/POWER3", on="ON", off="OFF"]
      Type switch : fan_speed_6 "Fan speed 6"  [stateTopic="stat/tasmota_997C8F/POWER4", commandTopic="cmnd/tasmota_997C8F/POWER4", on="ON", off="OFF"]
      Type switch : fan_reverse "Fan reverse"  [stateTopic="stat/tasmota_997C8F/POWER5", commandTopic="cmnd/tasmota_997C8F/POWER5", on="ON", off="OFF"]
      Type switch : fan_light   "Fan light"    [stateTopic="stat/tasmota_997C8F/POWER6", commandTopic="cmnd/tasmota_997C8F/POWER6", on="ON", off="OFF"]
      Type switch : fan_stop    "Fan stop"     [stateTopic="stat/tasmota_997C8F/POWER7", commandTopic="cmnd/tasmota_997C8F/POWER7", on="ON", off="OFF"]

Switch Fan_Speed_1_LivingRoom "Fan speed 1 LivingRoom" <fan> {channel="mqtt:topic:MosquittoBroker:wemos_d1_mini_mqtt_fan_livingroom:fan_speed_1"}
Switch Fan_Speed_2_LivingRoom "Fan speed 2 LivingRoom" <fan> {channel="mqtt:topic:MosquittoBroker:wemos_d1_mini_mqtt_fan_livingroom:fan_speed_2"}
Switch Fan_Speed_4_LivingRoom "Fan speed 4 LivingRoom" <fan> {channel="mqtt:topic:MosquittoBroker:wemos_d1_mini_mqtt_fan_livingroom:fan_speed_4"}
Switch Fan_Speed_6_LivingRoom "Fan speed 6 LivingRoom" <fan> {channel="mqtt:topic:MosquittoBroker:wemos_d1_mini_mqtt_fan_livingroom:fan_speed_6"}
Switch Fan_Reverse_LivingRoom "Fan Reverse LivingRoom" <fan> {channel="mqtt:topic:MosquittoBroker:wemos_d1_mini_mqtt_fan_livingroom:fan_reverse"}
Switch Fan_Light_LivingRoom   "Fan Light LivingRoom"   <fan> {channel="mqtt:topic:MosquittoBroker:wemos_d1_mini_mqtt_fan_livingroom:fan_light"}
Switch Fan_Stop_LivingRoom    "Fan Stop LivingRoom"    <fan> {channel="mqtt:topic:MosquittoBroker:wemos_d1_mini_mqtt_fan_livingroom:fan_stop"}

Surprisingly, the experiment is really successful and reliable. Even dimming via longer or shorter button press events works great and could integrated in a nice way in OpenHAB.


So far, I don’t have any feedback and the state of the “system” is unknown (at least, when controlled manually via the original remote). So I decided to add a tasmotized Shelly 1PM just for power monitoring of the fan (my already installed Honeywell smart switch unfortunately has no power monitoring feature) to find out the current speed state (and maybe if the light is “more on” or “more off”). Because of the different power consumptions for the different speeds, I hope to be able to identify the current speed setting via the consumed power (with or without LED lamp load – because it’s very low – but I have to test if I will be able to identify the speed setting in a reliable way with different LED lamp load… I will find out).
So, if the additional tests will be successful, I’ve decided to buy 2 additional TR29 remotes and change them all, integrate them together with the PCB’s in one plastic case. Also I will try to use an GIOP extender (I need 27 GPIO pins for all 3 fans for with all speed selection possible) for my Wemos D1 mini to be able to control all three fans with one device in one case. Luckily the fans are in a diameter < 30 feet and the RF power is quite good to control all three of them from one point.

I will try with the “ANMBEST 5PCS PCF8574 I2C Interface 8bit IO MCU Expansion Board” and will see if this works with my Wemos D1 mini together with Tasmota if I chain 3 of this extenders.
I will post from time to time some updates and will be happy about feedback, Thanks!