home-assistant/core · warning · HomeAssistantError
Mode can't be changed on slave zone {self.entity_id}
Error message
Mode can't be changed on slave zone {self.entity_id} What it means
HomeAssistantError raised by the Airzone (local API) climate entity's async_set_hvac_mode when the user requests a mode change on a slave (non-master) zone. In an Airzone installation only the master zone of a system can change the operation mode (heat/cool/dry/fan/vent); slave zones must follow the master. The integration still sends the power-on parameter (API_ON=1) before raising, so the zone is turned on but its mode is left untouched.
Source
Thrown at homeassistant/components/airzone/climate.py:237
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set hvac mode."""
slave_raise = False
params = {}
if hvac_mode == HVACMode.OFF:
params[API_ON] = 0
else:
mode = HVAC_MODE_HASS_TO_LIB[hvac_mode]
if mode != self.get_airzone_value(AZD_MODE):
if self.get_airzone_value(AZD_MASTER):
params[API_MODE] = mode
else:
slave_raise = True
params[API_ON] = 1
await self._async_update_hvac_params(params)
if slave_raise:
raise HomeAssistantError(
f"Mode can't be changed on slave zone {self.entity_id}"
)
@override
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
params = {}
if ATTR_TEMPERATURE in kwargs:
params[API_SET_POINT] = kwargs[ATTR_TEMPERATURE]
if ATTR_TARGET_TEMP_LOW in kwargs and ATTR_TARGET_TEMP_HIGH in kwargs:
params[API_COOL_SET_POINT] = kwargs[ATTR_TARGET_TEMP_HIGH]
params[API_HEAT_SET_POINT] = kwargs[ATTR_TARGET_TEMP_LOW]
await self._async_update_hvac_params(params)
if ATTR_HVAC_MODE in kwargs:
await self.async_set_hvac_mode(kwargs[ATTR_HVAC_MODE])
@callbackView on GitHub (pinned to 58a3fdb3ea)
Solutions
- Target only the master zone of the Airzone system when changing hvac_mode; slave zones inherit the mode.
- In automations, filter zones via the zone's master/slave attribute before calling climate.set_hvac_mode.
- For slave zones, adjust temperature setpoints instead of mode — slave zones accept setpoint changes.
- Wrap the call in try/except HomeAssistantError if you intentionally broadcast to all zones and want to ignore slave failures.
Example fix
# before
action:
- service: climate.set_hvac_mode
target:
entity_id: all
data:
hvac_mode: "heat"
# after
action:
- service: climate.set_hvac_mode
target:
entity_id: climate.living_room_master
data:
hvac_mode: "heat" Defensive patterns
Strategy: validation
Validate before calling
# Skip slave zones before setting mode (local Airzone)
if entity.get_airzone_value(AZD_MASTER):
await entity.async_set_hvac_mode(HVACMode.HEAT) Type guard
def is_master_zone(entity) -> bool:
return bool(entity.get_airzone_value(AZD_MASTER)) Try / catch
try:
await entity.async_set_hvac_mode(mode)
except HomeAssistantError as err:
if "slave zone" in str(err):
_LOGGER.debug("Skipping slave zone %s", entity.entity_id)
else:
raise Prevention
- Build automations that target the master zone entity_id explicitly.
- Expose/label master vs slave zones in entity names or labels.
- Use set_temperature for per-zone control instead of mode.
When it happens
Trigger: Calling the climate.set_hvac_mode action on an Airzone zone whose AZD_MASTER value is false, while the requested HVACMode maps to a library mode different from the zone's current AZD_MODE. E.g. setting hvac_mode=heat on a slave zone currently reporting mode=cool.
Common situations: Automations or dashboard cards that loop over every climate entity in an Airzone system and set the same hvac_mode on all of them; voice assistants applying a mode to a whole area; a user assuming each zone thermostat is independent.
Related errors
- Mode can't be changed on slave zone {self.entity_id}
- Heat/Cool is not supported in this mode
- Failed to set zone {self.entity_id}: {error}
- failed_to_set_fan_mode
- username_not_normalized
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/15343ccaeebcf394.
Report an issue: GitHub.