Skip to content

Thermostat: dry mode (SystemMode 0x08) not exposed as hvac_mode #739

@Arol450

Description

@Arol450

Thermostat: dry mode (SystemMode 0x08) not exposed as hvac_mode

Summary

ZHA does not expose HVACMode.DRY for Zigbee thermostats/HVAC devices that support SystemMode.Dry (0x08), even when the device explicitly advertises this capability.

Related

This is a companion issue to #226 and PR #708. That PR correctly fixes fan_only by detecting the presence of a Fan Control cluster (0x0202). The same gap exists for dry — it is a valid SystemMode value (0x08) with a corresponding HVACMode.DRY in Home Assistant, but it is never added to the hvac_modes list because controlSequenceOfOperation (per ZCL spec) only covers heating/cooling sequences and never includes dry mode.

Device context

I'm running a custom ESP32-C6 Zigbee bridge exposing a Midea split AC unit via standard clusters (Thermostat 0x0201, Fan Control 0x0202). The device supports SystemMode.Dry (0x08) as confirmed via direct ZCL attribute writes using zha.set_zigbee_cluster_attribute. The mode works correctly at the device level — ZHA simply never offers it as a valid choice.

The mappings HVAC_MODE_2_SYSTEM and SYSTEM_MODE_2_HVAC already handle DRY <-> Dry correctly, so the ZCL write path works. The only missing piece is adding HVACMode.DRY to the hvac_modes list.

Suggested fix

Similar to the fan_only approach in PR #708, HVACMode.DRY could be conditionally appended to hvac_modes when the device is known to support it — either via a capabilities attribute, a quirk flag, or by detecting SystemMode.Dry in the device's supported attribute values.

Expected behaviour

dry appears in the climate entity's hvac_modes list and is selectable from the HA UI for devices that support SystemMode.Dry.

Current behaviour

dry is absent from hvac_modes. Selecting it via climate.set_hvac_mode returns: "HVAC mode dry is not valid. Valid HVAC modes are: off, heat_cool, cool, heat."

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions