From db4bf7319f716a146b25ba588bd3e2748878faa0 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Wed, 24 Feb 2016 10:41:49 -0800 Subject: [PATCH] Add float() operator to templates --- homeassistant/helpers/template.py | 9 +++++++++ tests/helpers/test_template.py | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/homeassistant/helpers/template.py b/homeassistant/helpers/template.py index bc80fd89a81..9c9ebd42913 100644 --- a/homeassistant/helpers/template.py +++ b/homeassistant/helpers/template.py @@ -52,6 +52,7 @@ def render(hass, template, variables=None, **kwargs): return ENV.from_string(template, { 'closest': location_methods.closest, 'distance': location_methods.distance, + 'float': forgiving_float, 'is_state': hass.states.is_state, 'is_state_attr': hass.states.is_state_attr, 'now': dt_util.as_local(utcnow), @@ -240,6 +241,14 @@ def multiply(value, amount): return value +def forgiving_float(value): + """Try to convert value to a float.""" + try: + return float(value) + except (ValueError, TypeError): + return value + + class TemplateEnvironment(ImmutableSandboxedEnvironment): """Home Assistant template environment.""" diff --git a/tests/helpers/test_template.py b/tests/helpers/test_template.py index 1420ac44b6b..4aefdcf4fc5 100644 --- a/tests/helpers/test_template.py +++ b/tests/helpers/test_template.py @@ -51,6 +51,21 @@ class TestUtilTemplate(unittest.TestCase): {% for state in states.sensor %}{{ state.state }}{% endfor %} """)) + def test_float(self): + self.hass.states.set('sensor.temperature', '12') + + self.assertEqual( + '12.0', + template.render( + self.hass, + '{{ float(states.sensor.temperature.state) }}')) + + self.assertEqual( + 'True', + template.render( + self.hass, + '{{ float(states.sensor.temperature.state) > 11 }}')) + def test_rounding_value(self): self.hass.states.set('sensor.temperature', 12.78)