Fireplace Blower - Replacing rheostat with a smart fan control

I have a brand new Heatilator fireplace that uses a rheostat to control the blower. I’d like to change this so I can control via HA. I can confirm the blower works on a standard Kasa KS200 Smart light switch. But, when I tried hooking it up to a Kasa KS240 Smart ceiling fan control & dimmer switch but I couldn’t get it to run at anything other than 0% or 100% (either off or on like the KS200).

This leads me to believe that there is something different in this blower that makes it operate differently than a ceiling fan. Here are the specs of my blower:

Volts - 120
Cycles - 60 Hz
Amps - 1.1
RPM - 2900
Wiring Connectors - 1/4 spade terminals

Does anyone have any recommendations on what other fan control I should try?

I’ve been able to find that there are two types of fan controls, TRAIC and VFD. I learned that TRAIC are most common. I believe I need to find a smart fan control that is VFD.

I just started looking at how to do this same thing with my fireplace. I’m surprised how limited the info is on doing this. your post is one of the first that came up, and is only 11 days old! I’ve also found similar information that you have. ceiling fan controllers apparently work completely differently (triac as you just pointed out).

The fan control for the blower on fireplaces seems to work by reducing the voltage, and the type of thing to control and reduce the voltage is this rheostat. So… I’m searching for a wifi-controlled rheostat and not much is coming up. My potential solution… i’m considering getting a regular rheostat and attaching a servo to it to physically turn it “up and down”. it’s relatively easy to control a servo through HA with an esp32 or esp8266… let me know if you’ve gotten any further in your search, and i’ll update here if i make progress.

I have not found a solution. I too saw the esp32/servo option. If you figure out a solution, please post here. Thanks!

OK, after a few weekends…

I’ve attached a servo to my rheostat. I 3D-printed an attachment to connect a servo arm to the fitting for the rheostat knob - pretty sure the rheostat on my FP is this one:

and used a 270 degree servo, model DS3218. it’s overkill @ 20 kg, but i had already previously modeled up a bracket to hold this same size servo.

I did have to model and 3D print an attaching arm to hold the servo to the fireplace frame, basically the mounting plate for the rheostat. I’ll upload the knob adapter, servo bracket, and connecting arm to thingiverse when i get a chance.

Lastly, I programmed an esp8266 wemos D1 using ESPHome to control the servo. my script also reads the relay wires from the remote controller and uses a relay I added to turn the flame on and off. a bit excessive to read the remote control input this way, but i wanted to keep the original remote control functionality.

ESPHome code below. The gpio pins that i used are all listed, but i did have to put a resistor between pin 12 and ground to keep it reliably pulled low in order to read whether the controller circuit was closed to the 3.3v pin on the esp8266

i’ll draw up a wiring diagram if anybody’s interested :slight_smile:

esphome:
  name: fireplace-remote
  friendly_name: Fireplace-remote
  #mac [add device mac address here for reference]

esp8266:
  board: esp01_1m

#configuration for toggling relay
switch:
  - platform: gpio
    name: "fireplace-switch"
    id: "fireplace_switch"
    icon: "mdi:fireplace"
    pin: 4 #gpio4 is d2

# read open or closed circuit signal from fireplace remote controller
# 10kh resistor btwn gpio pin and ground, connect other end of controller to 3.3v
binary_sensor:
  - platform: gpio
    name: "fireplace_remote_control_sensor"
    pin:
      number: 12 #gpio12, d6
      mode: 
        input: True
    on_press: 
      then:
        - switch.turn_on: fireplace_switch
        - number.set:
            id: FPservoSlider
            value: 100
    on_release: 
      then:
        - switch.turn_off: fireplace_switch
        - number.set: 
            id: FPservoSlider
            value: 80
        - delay: 90s
        - number.set:
            id: FPservoSlider
            value: 0

# Enable logging
logger:

# Enable Home Assistant API
api:
#  encryption:
#    key: "7B+BU5CmJO+OG/I01gwECCOM2B4iL0p54DoGb83iwLE="

ota:
  - platform: esphome
    password: "2ccd2eae94cbece40a9583350107ae8c"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Fireplace-Remote"
    password: "SmdwM9HIL4rz"

  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.2.48
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.1.200
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0

captive_portal:
    
# create an slider/number in home assistant
number:
  - platform: template
    id: FPservoSlider
    name: Blower Fan
    icon: mdi:fan
    optimistic: true
    min_value: 0
    max_value: 100
    initial_value: 0
    step: 5
    on_value:
      then: #converts 0-100 -> -1 t0 1
        - lambda: !lambda |-
            id(FP_servo).write((x-50)/50); 

#define and control the servo
servo:
  - id: FP_servo
    output: pwm_output

output:
  - platform: esp8266_pwm
    id: pwm_output
    pin: 0 #d3
    frequency: 50 Hz