Clamp (constrain) a value: clamp
The clamp template function constrains a value to lie within a given range. If the value is below the minimum it returns the minimum; if it is above the maximum it returns the maximum; otherwise it returns the value unchanged. The range is inclusive on both ends.
This is useful whenever you need to ensure a sensorSensors return information about a thing, for instance the level of water in a tank. [Learn more] value stays within safe bounds before using it in an automationAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more]. For example, you could clamp a brightness percentage to a range your light supports, limit a thermostat setpoint to a safe temperature range, or ensure a volume level never exceeds a certain maximum.
Usage
Here’s how to use this template function. Copy any example and adjust it to your setup.
{{ clamp(150, 0, 100) }}
100.0
Function signature
The signature is a technical summary of this template function. It shows the name of the function, the values (called parameters) it accepts, and what type of data each parameter expects (for example, a piece of text or a number).
Function parameters that have a = with a value after them are optional. If you leave them out, the default value shown is used automatically. Function parameters without a default are required.
clamp(
value: Any,
min_value: Any,
max_value: Any,
) -> float
Function parameters
The following parameters can be provided to this function.
Good to know
- Both bounds are inclusive, so a value equal to the minimum or maximum is returned unchanged.
- The result is always a float, even when all inputs are integers.
- If
min_valueis greater thanmax_value, the result will always bemin_value.
Try it yourself
Ready to test this? Open Developer tools > Template, paste the example into the Template editor, and watch the result update on the right. Edit the values to see how the function adapts to your own entitiesAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more].
More examples
Real scenarios where this function comes up in automations and templates. Copy any example and adapt it to your setup.
Limiting a thermostat setpoint
Ensure a calculated setpoint stays within a safe range.
{% set desired = states("sensor.target_temperature") | float %}
{{ clamp(desired, 16, 28) }}
22.0
Clamping brightness
Keep a brightness value within the 0-255 range that a light expects.
{% set raw = states("sensor.ambient_light") | float * 2.5 %}
{{ clamp(raw, 0, 255) }}
255.0
Still stuck?
The Home Assistant community is quick to help: join Discord for real-time chat, post on the community forum with your template and expected result, or share on our subreddit /r/homeassistant.
AI assistants like ChatGPT or Claude can also explain or fix templates when you describe what you want in plain language.
Related template functions
These functions work well alongside this one:
-
Wrap a value cyclically: wrap - Wraps a value cyclically within a range.
-
Remap a value between ranges: remap - Remaps a value from one numeric range to another, with optional stepping and edge handling.
-
Minimum value: min - Returns the smallest value from a list of values.
-
Maximum value: max - Returns the largest value from a list of values.