home-assistant.io/source/_components/sensor.template.markdown
2016-08-14 22:07:03 +02:00

4.6 KiB

layout, title, description, date, sidebar, comments, sharing, footer, ha_category, ha_release, ha_iot_class, logo
layout title description date sidebar comments sharing footer ha_category ha_release ha_iot_class logo
page Template Sensor Instructions how to integrate Template sensors into Home Assistant. 2016-01-27 07:00 true false true true Sensor 0.12 Local Push home-assistant.png

The template platform supports sensors which breaks 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: {% raw %}'{{ states.sun.sun.attributes.elevation }}'{% endraw %}
        friendly_name: 'Sun angle'
        unit_of_measurement: 'degrees'
      sunrise:
        value_template: {% raw %}'{{ states.sun.sun.attributes.next_rising }}'{% endraw %}

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 (Optional): Defines a template to extract a value from the payload.
    • 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.

{% linkable_title Examples %}

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

{% linkable_title Sun angle %}

This example shows the sun angle in the frontend.

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

{% linkable_title 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: {% raw %}'{% if is_state("sun.sun", "above_horizon") %}up{% else %}down{% endif %}'{% endraw %}
        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: {% raw %}'{% if is_state("sensor.process_glances", "off") %}not running{% else %}running{% endif %}'{% endraw %}
        friendly_name: 'Glances'

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

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

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

{% linkable_title Multiline example with an if test %}

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

sensor:
  - platform: template
    sensors:
      kettle:
        friendly_name: 'Kettle'
        {% raw %}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 %}{% endraw %}

      next_sensor:
      [...]

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

{% linkable_title Change the unit of measurment %}

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

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