diff --git a/homeassistant/util/template.py b/homeassistant/util/template.py index 5ab3f149174..9fbbcff13b9 100644 --- a/homeassistant/util/template.py +++ b/homeassistant/util/template.py @@ -10,16 +10,25 @@ from jinja2.sandbox import SandboxedEnvironment ENV = SandboxedEnvironment() -def forgiving_round(value, precision): +def forgiving_round(value, precision=0): """ Rounding method that accepts strings. """ try: - return round(float(value), precision) + return int(value) if precision == 0 else round(float(value), precision) except ValueError: # If value can't be converted to float return value +def multiply(value, amount): + """ Converts to float and multiplies value. """ + try: + return float(value) * amount + except ValueError: + # If value can't be converted to float + return value + ENV.filters['round'] = forgiving_round +ENV.filters['multiply'] = multiply def render(hass, template): diff --git a/tests/util/test_template.py b/tests/util/test_template.py index 081a93ff867..4592e4549d4 100644 --- a/tests/util/test_template.py +++ b/tests/util/test_template.py @@ -55,3 +55,12 @@ class TestUtilTemplate(unittest.TestCase): template.render( self.hass, '{{ states.sensor.temperature.state | round(1) }}')) + + def test_rounding_value2(self): + self.hass.states.set('sensor.temperature', 12.34) + + self.assertEqual( + '123', + template.render( + self.hass, + '{{ states.sensor.temperature.state | multiply(10) | round }}'))