To hold an HVAC device at a fixed mode, push an operation mode: heat, cool, or auto. The device’s own schedule is ignored until you release the hold. Use it for a manual override, a guest in the spare room, a skipped vacation week, or to drive the thermostat from your own logic.The companion command, follow_schedule, hands control back to the device’s native program. Together they form an open-and-close pair. The body is the canonical action envelope every device type shares: an action with a command and its parameters. See canonical actions.
Coming soon. Live control for HVAC devices. The sandbox environment runs the full thermostat command surface end to end, so the walkthrough below works against a sandbox device today. A live HVAC push returns 422 COMMAND_NOT_SUPPORTED until the live path opens.
Push auto with a comfort band. heatSetpoint and coolSetpoint are {value, unit} quantities in degrees Celsius, each bounded 10 to 35. The device heats below heatSetpoint and cools above coolSetpoint.
To pin a single temperature instead of a band, push heat or cool with a target. You get back 202 Accepted, wrapped in the standard envelope. Because this is an immediate push, the action begins life in acknowledged rather than scheduled.
When the override is no longer needed, hand control back to the device’s schedule. follow_schedule is a command in the same envelope and carries no parameters.
A follow-up read confirms the device is back on its own schedule.follow_schedule is immediate-only: its execution array is ["immediate"], so it takes neither start nor end. Releasing the schedule is something you do now, not something you defer. Supplying a start or end alongside it returns 422 EXECUTION_NOT_SUPPORTED.
Push another operation mode with new values to raise or lower the setpoints, or switch from a band to a single-temperature hold. The new write supersedes the previous one. No explicit cancel needed.
If a previous push is still being applied, you get 409 CONFLICT with the in-flight action ID. Add onConflict: "cancel_and_replace" to drop the in-flight action and run the new one. Thermostats declare only cancel_and_replace, so queue_after returns 422 STRATEGY_NOT_SUPPORTED. See the conflict cookbook page for resolution.
heat, cool, auto, and idle all map to one underlying operation: only one is active at a time, which is why pushing a new mode supersedes the old one and why onConflict governs an in-flight write. follow_schedule is a separate operation, so it cleanly relinquishes whatever mode was held. The whole flow is the canonical action model applied to a thermostat. The same read-pick-build-post loop drives a battery and an EV charger. See canonical actions and capabilities.