Template Sensor


The template platform supports sensors which break out state_attributes from other entities.

To enable Template sensors in your installation, add the following to your configuration.yaml file:

# Example configuration.yaml entry
sensor:
  - platform: template
    sensors:
      solar_angle:
        value_template: '{{ states.sun.sun.attributes.elevation }}'
        friendly_name: 'Sun angle'
        unit_of_measurement: 'degrees'
      sunrise:
        value_template: '{{ states.sun.sun.attributes.next_rising }}'

Configuration variables:

  • sensors array (Required): List of your sensors.
    • friendly_name (Optional): Name to use in the Frontend.
    • unit_of_measurement (Optional): Defines the units of measurement of the sensor, if any.
    • value_template (Required): Defines a template to extract a value from the event bus.
    • entity_id (Optional): Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update it’s state.

Examples

In this section you find some real life examples of how to use this sensor.

Sun angle

This example shows the sun angle in the frontend.

sensor:
  - platform: template
    sensors:
      solar_angle:
        value_template: '{{ "%+.1f"|format(states.sun.sun.attributes.elevation) }}'
        friendly_name: 'Sun Angle'
        unit_of_measurement: '°'

Renaming sensor output

If you don’t like the wording of a sensor output then the template sensor can help too. Let’s rename the output of the Sun component as a simple example:

sensor:
  - platform: template
    sensors:
      sun_state:
        value_template: '{% if is_state("sun.sun", "above_horizon") %}up{% else %}down{% endif %}'
        friendly_name: 'Sun state'

Processes monitored by the System Monitor sensor show on or off if they are running or not. This example shows how the output of a monitored glances process can be renamed.

sensor:
  - platform: template
    sensors:
      glances:
        value_template: '{% if is_state("sensor.process_glances", "off") %}not running{% else %}running{% endif %}'
        friendly_name: 'Glances'

By comparing the details published on the template page the same can be achieved with a different approach:

value_template: "{%if states.sensor.ENTITY_ID.state == 'on' %}running{%elif states.switch.ENTITY_ID.state == 'off' %}not running{% endif %}"

The Binary template sensor is the one in similar cases if you prefer to see an icon instead of text.

Multiline example with an if test

This example shows a multiple line template with an if test. It looks at a sensing switch and shows on/off in the frontend.

sensor:
  - platform: template
    sensors:
      kettle:
        friendly_name: 'Kettle'
        value_template: >-
            {%- if is_state("switch.kettle", "off") %}
                off
            {%  elif states.switch.kettle.attributes.kwh < 1000 %}
                standby
            {% elif is_state("switch.kettle", "on") %}
                on
            {% else %}
                failed
            {%- endif %}

      next_sensor:
      [...]

Please note the blank line to close the multi-line template.

Change the unit of measurement

With a template sensor it’s easy to convert given values into others if the unit of measurement doesn’t fit your needs.

sensor:
  - platform: template
    sensors:
      transmission_down_speed_kbps:
        value_template: '{{ states.sensor.transmission_down_speed.state | multiply(1024) }}'
        friendly_name: 'Transmission Down Speed'
        unit_of_measurement: 'kB/s'
      transmission_up_speed_kbps:
        value_template: '{{ states.sensor.transmission_up_speed.state | multiply(1024) }}'
        friendly_name: 'Transmission Up Speed'
        unit_of_measurement: 'kB/s'