Test if value is numeric: is_number
The is_number template function tests whether a value can be converted to a valid, finite floating-point number. It returns true if the value is numeric and false otherwise. Values like infinity and NaN are not considered numbers and return false.
This is a safety check you should use before performing math on values that might not be numeric. EntityAn 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] states in Home Assistant can be unavailable, unknown, or other non-numeric strings at any time. Trying to do math on these values without checking first causes errors. By testing with is_number first, you can branch your logic to handle numeric and non-numeric cases separately. It is also useful as a template test in {% if %} blocks.
Usage
Here’s how to use this template function. Copy any example and adjust it to your setup.
{{ is_number("21.5") }}
true
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.
is_number(
value: Any,
) -> bool
Function parameters
The following parameters can be provided to this function.
What counts as a number
The function attempts to convert the value to a float. If the conversion succeeds and the result is a finite number (not infinity or NaN), it returns true.
{{ is_number(42) }}
{{ is_number("21.5") }}
{{ is_number("unavailable") }}
{{ is_number("inf") }}
true
true
false
false
Good to know
- Returns
falseforunavailable,unknown,infinity, andNaN, which catches common unsafe cases for math. - Booleans pass this test because Python treats
TrueandFalseas1and0. - Numeric strings like
"21.5"pass. This checks convertibility, not the current type.
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.
Guard a calculation
Only perform math if the sensor value is actually a number.
{% if states("sensor.power_usage") | is_number %}
{{ states("sensor.power_usage") | float * 0.25 }}
{% else %}
Sensor is not reporting a number
{% endif %}
62.5
Filter a list to only numeric values
When working with multiple sensorsSensors return information about a thing, for instance the level of water in a tank. [Learn more], filter out any that are not reporting numbers before calculating an average.
{{
["21.5", "unavailable", "19.8", "unknown"]
| select("is_number")
| map("float")
| list
| average
}}
20.65
Use in an automation condition
Only proceed if the sensor is reporting a valid number.
condition:
- condition: template
value_template: >
{{ states("sensor.wind_speed") | is_number }}
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:
-
Convert to float: float - Converts a value to a floating-point number, with an optional default if conversion fails.
-
Convert to integer: int - Converts a value to an integer, with an optional default if conversion fails.
-
Check if entity has a value: has_value - Tests if an entity exists and has a valid state (not unavailable or unknown).
-
Get the type of a value: typeof - Returns the type name of a value as a string.