Remove Fan mode from Homekit climate

Hello! Is there a way to remove the fan_mode from Homekit for my climate entity? When I add my thermostat to Homekit, I get both the ability to control the temperature as well as the fan mode (which is useless in my case). In Homekit they both have the same Home Assistant entity id (climate.upstairs_thermostat) so I can’t put it in the exclude filter.

I don’t necessarily want to remove the fan modes for this thermostat from Home Assistant altogether, but if that’s the only way I’d be willing to.

Here’s the entity’s attributes in case that’s useful:

hvac_modes:
  - 'off'
  - heat
  - cool
  - heat_cool
min_temp: 44.6
max_temp: 95
fan_modes:
  - Auto low
  - Low
  - Circulation
preset_modes:
  - none
  - Auxiliary
  - Energy heat
  - Energy cool
current_temperature: 77
temperature: 68
target_temp_high: 77
target_temp_low: 68
current_humidity: 54
fan_mode: Auto low
hvac_action: idle
preset_mode: none
fan_state: Idle / off
friendly_name: Upstairs Thermostat
supported_features: 27

Thank you!

3 Likes

Just ignore them, what harm are they doing?

Sure, I’ll explain the why:

I’d like to remove the fan from Homekit because for me it’s useless; when I tap on it nothing happens. When I long-press it, I’m shown an on/off switch which isn’t what I need. I don’t want/need to control the fan from Homekit anyway; I’ll let the thermostat control that.

Why don’t I just ignore it? Since both the thermostat control and the fan control are one combined tile, it always shows the fan tile. In order to change the temp I have to long-press the icon, while I’d prefer to just tap it, and then scroll past the full-height power switch of the fan (this isn’t consistent; sometimes the thermostat is on the top and sometimes the power switch is on the top). I can individually hide the fan from the “Status” but controlling whether it’s in Favorites effects both of them.

Why not edit the settings and choose “Show as separate tiles”? I certainly could do that, which would solve the Favorites issue, however the Fan still shows up as one of the limited tiles in Command Center. Tapping it tries to switch off the fan, and therefore I have to long-press it again.

I could just live with it, and I don’t know about you, but I’d rather not. I mean, that’s why we’re all in Home Assistant, right? We didn’t just want to live with not being able to switch off that light from our phone or voice or based off of some convoluted automation :slight_smile:

Another question; is there a way to keep Homekit from seeing that it’s a battery thermostat? I don’t have batteries installed and so it always shows as low battery in Homekit.

Thank you!

1 Like

I might have figured out the fan part. Piecing a couple of things together, I used the list of climate supported features and this person’s bug report to come up with this:

# customize.yaml

climate.upstairs_thermostat:
  supported_features: 3

It appears to prevent the fan modes from hitting Homekit.

Now I just need to figure out the battery!

3 Likes

I probably don’t know enough about homekit to have realised why you didn’t want to just ignore it :slight_smile:

Thanks for posting this! I had a similar issue with a climate entity passing fan status to HomeKit that wasn’t working. It was driving me crazy!

1 Like

Wow. So first of all, that worked. Second, thank you! I had the same issue and it was driving me nuts. But can you explain how/why it works? Does the 3 mean keep only the first three supported features in the list?

1 Like

I’m definitely not very knowledgeable on this, but from what I understand, it works like this: using the screenshot you posted (which we might have to look at the source code for the climate domain to be sure), each feature is given a number as follows:

 1 = TARGET_TEMPERATURE
 2 = TARGET_TEMPERATURE_RANGE
 4 = TARGET_HUMIDITY
 8 = FAN_MODE
16 = PRESET_MODE
32 = SWING_MODE
64 = AUX_HEAT

You add the numbers for the features your device supports and put the sum as the supported_features number. Since I only cared about the first two features, I used 3.

Even though they’re talking about the media player domain, you can read here for more info as the concept is the same: How to read/interpret "supported_features"?

2 Likes

Exactly right, although you revelation is using customize.yaml to override it! Genius.

Thanks a ton for making this easy to find and solve quickly. And to OP for kicking the discussion off.

edit: solver is OP haha so take the double hit of gratitude!

3 Likes

Hey @scott.parmenter can you explain how you fixed this one? I have a ceiling fan going into Homekit and i see fan speed slider plus tow other random switches that don’t seem to do anything in Home kit.

Hi @chansearrington I added the following to my customize.yaml file:

climate.infinitive:
  supported_features: 3

Swap the climate entity above for the name of yours.

My understanding is that the number following supported_features is the sum of the values of the features you want included. So in my case, by using “3” it picks up target_temperature (value of 1) and target_temperature_range (value of 2). 1 + 2 = 3

You’ll need to figure out the values of your entity’s supported features. I believe they are unique to the component type.

Find your component type here and look for your component and search the files for supported features.

I ended up making a template as follows:

# Air Conditioner Temple
switch:
  - platform: template
    switches:
      climate_cool:
        friendly_name: "Cool"
        value_template: "{{ is_state('climate.thermostat', 'cool') }}"
        turn_on:
          service: climate.set_hvac_mode
          data:
            entity_id: climate.thermostat
            hvac_mode: "cool"
        turn_off:
          service: climate.set_hvac_mode
          data:
            entity_id: climate.thermostat
            hvac_mode: "off"

This creates two switches - one for Cool and one for Off. Not the prettiest, but it’s nice to have on the Dashboard.

Here is my solution. I have an Ecobee not connected to a furnace controlling a space heater plugged into a smart plug. The Ecobee is connected to Home Assistant using HomeKit Device. As such I only needed Heat and Off. No fan, no cooling. In my customize.yaml, I have this:

climate.basement:
  hvac_modes:
   - "off"
   - heat
  fan_modes:
   - "off"
  supported_features: 385

Works perfectly.