{"record":{"id":"15343ccaeebcf394","repo":"home-assistant/core","slug":"mode-can-t-be-changed-on-slave-zone-self-entity-i","errorCode":null,"errorMessage":"Mode can't be changed on slave zone {self.entity_id}","messagePattern":"Mode can't be changed on slave zone (.+?)","errorType":"exception","errorClass":"HomeAssistantError","httpStatus":null,"severity":"warning","filePath":"homeassistant/components/airzone/climate.py","lineNumber":237,"sourceCode":"    async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:\n        \"\"\"Set hvac mode.\"\"\"\n        slave_raise = False\n\n        params = {}\n        if hvac_mode == HVACMode.OFF:\n            params[API_ON] = 0\n        else:\n            mode = HVAC_MODE_HASS_TO_LIB[hvac_mode]\n            if mode != self.get_airzone_value(AZD_MODE):\n                if self.get_airzone_value(AZD_MASTER):\n                    params[API_MODE] = mode\n                else:\n                    slave_raise = True\n            params[API_ON] = 1\n        await self._async_update_hvac_params(params)\n\n        if slave_raise:\n            raise HomeAssistantError(\n                f\"Mode can't be changed on slave zone {self.entity_id}\"\n            )\n\n    @override\n    async def async_set_temperature(self, **kwargs: Any) -> None:\n        \"\"\"Set new target temperature.\"\"\"\n        params = {}\n        if ATTR_TEMPERATURE in kwargs:\n            params[API_SET_POINT] = kwargs[ATTR_TEMPERATURE]\n        if ATTR_TARGET_TEMP_LOW in kwargs and ATTR_TARGET_TEMP_HIGH in kwargs:\n            params[API_COOL_SET_POINT] = kwargs[ATTR_TARGET_TEMP_HIGH]\n            params[API_HEAT_SET_POINT] = kwargs[ATTR_TARGET_TEMP_LOW]\n        await self._async_update_hvac_params(params)\n\n        if ATTR_HVAC_MODE in kwargs:\n            await self.async_set_hvac_mode(kwargs[ATTR_HVAC_MODE])\n\n    @callback","sourceCodeStart":219,"sourceCodeEnd":255,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/airzone/climate.py#L219-L255","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"# before\naction:\n  - service: climate.set_hvac_mode\n    target:\n      entity_id: all\n    data:\n      hvac_mode: \"heat\"\n\n# after\naction:\n  - service: climate.set_hvac_mode\n    target:\n      entity_id: climate.living_room_master\n    data:\n      hvac_mode: \"heat\"","handlingStrategy":"validation","validationCode":"# Skip slave zones before setting mode (local Airzone)\nif entity.get_airzone_value(AZD_MASTER):\n    await entity.async_set_hvac_mode(HVACMode.HEAT)","typeGuard":"def is_master_zone(entity) -> bool:\n    return bool(entity.get_airzone_value(AZD_MASTER))","tryCatchPattern":"try:\n    await entity.async_set_hvac_mode(mode)\nexcept HomeAssistantError as err:\n    if \"slave zone\" in str(err):\n        _LOGGER.debug(\"Skipping slave zone %s\", entity.entity_id)\n    else:\n        raise","preventionTips":["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."],"tags":["airzone","hvac","master-slave","climate","validation"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}