Can not change KNX HVAC modes in Apple Home Thermostat

Hi All,

I have a KNX thermostat that I can control in Home Assistant including being able to switch HVAC modes between comfort, away, sleep and eco, with the following code:

    - name: "Thermostat"
      on_off_address: "2/3/10"
      on_off_state_address: "2/3/11"
      temperature_address: "2/3/0"
      target_temperature_address: "2/3/1"
      target_temperature_state_address: "2/3/2"
      operation_mode_address: "2/3/12"
      - Frost
      - Night
      - Standby
      - Comfort
      operation_mode_state_address: "2/3/13"
      command_value_state_address: "2/3/16"
      min_temp: 16.0
      max_temp: 28.0

I was also able to add the Thermostat to Apple HomeKit, where I can:
See the current temperature, set the temperature, turn it on and off.

However in Apple Home there is no mode switch in the Thermostat.

What am I doing wrong?

Thanks a lot for the help in advance!

Hi eelyaa,

did you have any luck solving this? I facing the same issue, everything works as expected in HA but no mode switch in Apple Home…


Same here. Am wondering whether that’s somehow related to the controller_mode?

In addition to KNX heating actuators I am using ZigBee Thermostats for heating where KNX can’t be used. For these, not only do they integrate equally well into Home Assistant. Also they expose their modes to HomeKit allowing them to be read and set from e.g. the Home app. So, I assume it must be something internal to the KNX integration.

Hi :wave:!
Can you post the states of a Knx climate entity where this doesn’t work and the states of a different where it works?
Open your Home Assistant instance and show your state developer tools.

And also the Knx yaml config for that entity.


Bosch Zigbee Thermostat:

KNX floor heating

And, last but not least, an excerpt from my knx.yaml relevant to the aforementioned device and room:

    - name: "Gästebad"
      temperature_address: "3/3/7" # Ist-Temperatur
      temperature_step: 0.5 
      # target_temperature_address: "3/3/8" # Soll-Temperatur
      target_temperature_state_address: "3/3/9" # Soll-Temperatur Status
      operation_mode_address: "3/3/10"  # Betriebsart
      operation_mode_state_address: "3/3/11" # Betriebsart Status
      setpoint_shift_address: "3/3/12" # Sollwertverschiebung
      setpoint_shift_state_address: "3/3/13" # Sollwertverschiebung Status
      setpoint_shift_mode: DPT9002 # Sollwertverschiebung Datentyp
      setpoint_shift_min: -5 # Sollwertverschiebung Untergrenze
      setpoint_shift_max: 5 # Sollwertverschiebung Obergrenze
      operation_modes: ["Comfort", "Standby", "Night", "Frost Protection"] # Betriebsarten
      command_value_state_address: "3/3/14" # Stellwert des Ventils

Your Zigbee device doesn’t seem to even support presets.

The KNX config looks fine, so do the states. :person_shrugging:

Not sure whether You’re trying to mock me, @farmio , but all I can say for now is that the thermostat exposes those modes to Home Assistant via ZigBee2MQTT and Home Assistant then to HomeKit. If I set values in Home-App those get updated in ZigBee2MQTT. That’s probably enough to safely say: Home Assistant supports configuring the bridge such that the values get properly communicated.

All the opener of this thread and I am saying is that modes of KNX heating actuators when used in Home Assistant are not exposed to HomeKit.

Not at all, why would I? :person_shrugging:

Have a look at the images you posted. The KNX one says preset_modes: comfort, away, sleep, eco. The Zigbee one doesn’t have any preset modes, supported_features: 1 indicates it doesn’t support it.

After all the backend / integration providing the entity doesn’t have any direct comunication with the HomeKit integration.
The way this works is:

Integration (KNX / Zigbee) -> HA states 
HA states -> HomeKit Bridge

so if the states are correct (eg. supported_features) there is no reason for this not to work from a backend side.
I don’t know if HomeKit Bridge even supports presets though.

Ok, thanks for the explanation and clarifying how to read Your comment.

What I can share at the moment is that HA <=> ZigBee2MQTT states are communicated correctly, so are HomeKit <=> HA. Setting them works in all directions. I don’t yet know whether the Thermostat actually acts differently when different settings are made. But that’s something I will find out when I get the chance to fiddle around with this. And, even if it doesn’t, the integrations seem to do the right thing.

In that sense I would deduct that the preset modes are not being mapped from the underlying HomeKit integration for the KNX devices, but the HVAC modes are:
Below shows the HomeKit appearance of one KNX heating actuator. It only knows of ‚heating‘ mode.

The ZigBee-Thermostat on the other hand shows the three modes: Off, heating, automatic.

If I may ask You directly would You consider this a bug, a ‚works as designed‘ or feature request? If any of that in which component - HomeKit, KNX, Home Assistant?

Preset and mode are different things. My Knx climate entities use modes (heat / cool / off) but no presets (comfort, night, etc). The modes are properly mapped to HomeKit.

I don’t know if the HomeKit thermostat model even supports such presets. If not, there is not much anyone (but Apple) can do. If it does support those, then I guess it would be a feature request for the HomeKit Bridge integration.

I know that this has been a while, but something that kept circling around in my head. As I do actually have interest in changing presets in HomeKit: What would be the recommended / possible way of doing that? Connecting Modes GA to Presets?