diff --git a/homeassistant/components/automation/numeric_state.py b/homeassistant/components/automation/numeric_state.py
index 9f0991000844fdc198dda0186b611a54c18c6b47..93fedcc8e3b7904139c9ca054e889d8c47b49936 100644
--- a/homeassistant/components/automation/numeric_state.py
+++ b/homeassistant/components/automation/numeric_state.py
@@ -8,13 +8,14 @@ at https://home-assistant.io/components/automation/#numeric-state-trigger
 """
 import logging
 
+from homeassistant.const import CONF_VALUE_TEMPLATE
 from homeassistant.helpers.event import track_state_change
+from homeassistant.util import template
 
 
 CONF_ENTITY_ID = "entity_id"
 CONF_BELOW = "below"
 CONF_ABOVE = "above"
-CONF_ATTRIBUTE = "attribute"
 
 _LOGGER = logging.getLogger(__name__)
 
@@ -29,7 +30,7 @@ def trigger(hass, config, action):
 
     below = config.get(CONF_BELOW)
     above = config.get(CONF_ABOVE)
-    attribute = config.get(CONF_ATTRIBUTE)
+    value_template = config.get(CONF_VALUE_TEMPLATE)
 
     if below is None and above is None:
         _LOGGER.error("Missing configuration key."
@@ -37,13 +38,18 @@ def trigger(hass, config, action):
                       CONF_BELOW, CONF_ABOVE)
         return False
 
+    if value_template is not None:
+        renderer = lambda value: template.render(hass, value_template, value)
+    else:
+        renderer = None
+
     # pylint: disable=unused-argument
     def state_automation_listener(entity, from_s, to_s):
         """ Listens for state changes and calls action. """
 
         # Fire action if we go from outside range into range
-        if _in_range(to_s, above, below, attribute) and \
-           (from_s is None or not _in_range(from_s, above, below, attribute)):
+        if _in_range(to_s, above, below, renderer) and \
+           (from_s is None or not _in_range(from_s, above, below, renderer)):
             action()
 
     track_state_change(
@@ -63,7 +69,7 @@ def if_action(hass, config):
 
     below = config.get(CONF_BELOW)
     above = config.get(CONF_ABOVE)
-    attribute = config.get(CONF_ATTRIBUTE)
+    value_template = config.get(CONF_VALUE_TEMPLATE)
 
     if below is None and above is None:
         _LOGGER.error("Missing configuration key."
@@ -71,18 +77,29 @@ def if_action(hass, config):
                       CONF_BELOW, CONF_ABOVE)
         return None
 
+    if value_template is not None:
+        renderer = lambda value: template.render(hass, value_template, value)
+    else:
+        renderer = None
+
     def if_numeric_state():
         """ Test numeric state condition. """
         state = hass.states.get(entity_id)
-        return state is not None and _in_range(state, above, below, attribute)
+        return state is not None and _in_range(state, above, below,
+                                               renderer)
 
     return if_numeric_state
 
 
-def _in_range(state, range_start, range_end, attribute):
+def _in_range(state, range_start, range_end, renderer):
     """ Checks if value is inside the range """
-    value = (state.state if attribute is None
-             else state.attributes.get(attribute))
+
+    if renderer is not None:
+        value = renderer({'value': state})
+    else:
+        # If no renderer is provided, just assume they want the state
+        value = state.state
+
     try:
         value = float(value)
     except ValueError: