I recently got air conditioning installed in my house and since it doesn't support any smart features on its own, I'm developing a custom ESP32-H2 based interface to integrate it into my Home Assistant via the already existing Zigbee mesh running ZHA. This isn't my first rodeo developing Zigbee devices, but it's the first time they're complex enough that the HA entities ZHA creates by default don't cut it, but no matter how much I try with changing the cluster configs or writing quirks, I can't seem to find a way to let ZHA know which features my AC supports.
The setup
The AC supports the following:
- switching on/off
- louver swing on/off
- cool/heat/fan only/auto system modes
- low/medium/high/auto fan speed modes
- setting temperature
I've modeled this using the following Zigbee clusters on the same endpoint:
- On/Off (used for louver swing)
- Thermostat
- control sequence of operation = SEQ_OF_OPERATION_COOLING_ONLY (since I don't really need heating)
- Fan Control
- fan mode sequence = FAN_MODE_SEQUENCE_LOW_MED_HIGH_AUTO
The results
With the above setup, upon connecting the device to ZHA, a thermostat does show up in the UI, but the only AC operation modes it shows are Cool and Off. If I change the control sequence of operation to heating and cooling, Heat mode does show up, but the Fan Only or Auto modes are still nowhere to be seen.
Fan speed has a similar issue, the thermostat only allows me to set it to Auto or Off, completely ignoring what fan mode sequence have I specified in the Fan Control cluster.
Louver swing does seem to work with the On/Off cluster, but if there's a way to integrate it with the rest of fan controls in the thermostat UI, I'd like to know of it.
I tried to find an example of a quirk that would be doing something similar to use as an example, but couldn't really find any, is an AC really this uncommon of a device to be connecting via Zigbee?
Environment
HAOS 17.3 running HA 2026.5.4 on a Raspberry Pi 3B.
ZHA running via a Sonoff USB dongle.
TL;DR: HA thermostat UI won't pick up correct modes just from the Zigbee device's cluster layout, how can I specify them manually?
