Skip to content

HomeKit Bridge: Control Center tap on a Heater Cooler toggles Swing Mode instead of power (HeaterCooler service lacks Name characteristic) #184153

Description

@blvosh2

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.

Activity

  1. home-assistant commented on Oct 3, 2026

    @home-assistant
    Contributor

    Hey there @bdraco, mind taking a look at this issue as it has been labeled with an integration (homekit) you are listed as a code owner for? Thanks!

    Code owner commands

    Code owners of homekit can trigger bot actions by commenting:

    • @home-assistant close Closes the issue.
    • @home-assistant rename Awesome new title Renames the issue.
    • @home-assistant reopen Reopen the issue.
    • @home-assistant unassign homekit Removes the current integration label and assignees on the issue, add the integration domain after the command.
    • @home-assistant add-label needs-more-information Add a label (needs-more-information, problem in dependency, problem in custom component, problem in config, problem in device, feature-request) to the issue.
    • @home-assistant remove-label needs-more-information Remove a label (needs-more-information, problem in dependency, problem in custom component, problem in config, problem in device, feature-request) on the issue.

    (message by CodeOwnersMention)


    @blvosh2 Thanks for reporting this issue!

    Before we dive in, please make sure this isn't a duplicate by searching through existing issues. Also check recently closed issues, as your problem might already be fixed but not yet released.

    https://github.com/home-assistant/core/issues?q=%20label%3A%22integration%3A%20homekit%22%20
    (message by IssueContext)


    homekit documentation
    homekit source
    (message by IssueLinks)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Fields

Priority

None yet

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions