The problem
When a climate entity is exposed by the HomeKit Bridge as a Heater Cooler, a tap on its iOS Control Center control toggles Swing Mode instead of power (Active). The Home app tile works correctly; only Control Center is affected. The AC beeps (it receives set_swing_mode) but stays on.
Cause: the HeaterCooler service created in type_heater_coolers.py has no Name characteristic. When the service has Name, Control Center writes Active as expected. Homebridge adds Name to every service, which is why the same ACs worked from Control Center under Homebridge.
How this was isolated: I ran a HAP-python bridge with dummy Heater Cooler accessories that differed one property at a time, added each to Control Center on an iPhone, tapped it once, and logged the characteristic write:
| Dummy |
Name char on HeaterCooler |
Order at end |
Primary flag |
Control Center tap wrote |
| HA layout |
no |
RotationSpeed, SwingMode |
yes |
SwingMode ❌ |
| HA layout, order swapped |
no |
SwingMode, RotationSpeed |
yes |
SwingMode ❌ |
| HA layout, no primary flag |
no |
RotationSpeed, SwingMode |
no |
SwingMode ❌ |
| Homebridge layout without Name |
no |
SwingMode, RotationSpeed |
no |
SwingMode ❌ |
| HA layout + Name |
yes |
RotationSpeed, SwingMode |
yes |
Active ✅ |
| Homebridge layout |
yes |
SwingMode, RotationSpeed |
no |
Active ✅ |
Characteristic order and the primary-service flag make no difference; the Name characteristic alone decides it. Reproduced on the real bridge with 7 AUX ACs (aux_cloud): every Control Center tap is logged as "HomeKit send command set_swing_mode".
Suggested fix in homeassistant/components/homekit/type_heater_coolers.py: add CHAR_NAME to the HeaterCooler chars list and set it to the display name (as is already done for the linked humidity sensor):
chars = [
CHAR_ACTIVE,
CHAR_CURRENT_HEATER_COOLER_STATE,
CHAR_TARGET_HEATER_COOLER_STATE,
CHAR_CURRENT_TEMPERATURE,
CHAR_NAME,
]
...
serv = self.add_preload_service(SERV_HEATER_COOLER, chars)
serv.configure_char(CHAR_NAME, value=self.display_name)
What version of Home Assistant Core has the issue?
core-2026.9.4
What was the last working version of Home Assistant Core?
No response (never worked from Control Center with the HomeKit Bridge; worked under Homebridge)
What type of installation are you running?
Home Assistant OS
Integration causing the issue
HomeKit Bridge
Link to integration documentation on our website
https://www.home-assistant.io/integrations/homekit/
Diagnostics information
Relevant part of the accessory from the HomeKit Bridge diagnostics: one HeaterCooler service (primary) with Active, CurrentHeaterCoolerState, TargetHeaterCoolerState, CurrentTemperature, CoolingThresholdTemperature, HeatingThresholdTemperature, RotationSpeed, SwingMode; no Name characteristic.
Example YAML snippet
No response
Anything in the logs that might be useful for us?
HomeKit send command set_swing_mode for Living Room AC <- Control Center tap
HomeKit send command set_hvac_mode for Living Room AC <- Home app tile tap
Additional information
Tested on iOS Control Center with the climate exposed as heater_cooler. The test bridge used HAP-python, the same library the HomeKit Bridge uses.
The problem
When a climate entity is exposed by the HomeKit Bridge as a Heater Cooler, a tap on its iOS Control Center control toggles Swing Mode instead of power (
Active). The Home app tile works correctly; only Control Center is affected. The AC beeps (it receivesset_swing_mode) but stays on.Cause: the HeaterCooler service created in
type_heater_coolers.pyhas noNamecharacteristic. When the service hasName, Control Center writesActiveas expected. Homebridge addsNameto every service, which is why the same ACs worked from Control Center under Homebridge.How this was isolated: I ran a HAP-python bridge with dummy Heater Cooler accessories that differed one property at a time, added each to Control Center on an iPhone, tapped it once, and logged the characteristic write:
Namechar on HeaterCoolerSwingMode❌SwingMode❌SwingMode❌SwingMode❌Active✅Active✅Characteristic order and the primary-service flag make no difference; the
Namecharacteristic alone decides it. Reproduced on the real bridge with 7 AUX ACs (aux_cloud): every Control Center tap is logged as "HomeKit send command set_swing_mode".Suggested fix in
homeassistant/components/homekit/type_heater_coolers.py: addCHAR_NAMEto the HeaterCoolercharslist and set it to the display name (as is already done for the linked humidity sensor):What version of Home Assistant Core has the issue?
core-2026.9.4
What was the last working version of Home Assistant Core?
No response (never worked from Control Center with the HomeKit Bridge; worked under Homebridge)
What type of installation are you running?
Home Assistant OS
Integration causing the issue
HomeKit Bridge
Link to integration documentation on our website
https://www.home-assistant.io/integrations/homekit/
Diagnostics information
Relevant part of the accessory from the HomeKit Bridge diagnostics: one HeaterCooler service (primary) with Active, CurrentHeaterCoolerState, TargetHeaterCoolerState, CurrentTemperature, CoolingThresholdTemperature, HeatingThresholdTemperature, RotationSpeed, SwingMode; no Name characteristic.
Example YAML snippet
No response
Anything in the logs that might be useful for us?
Additional information
Tested on iOS Control Center with the climate exposed as
heater_cooler. The test bridge used HAP-python, the same library the HomeKit Bridge uses.