mirror of
https://github.com/home-assistant/home-assistant.io.git
synced 2025-07-23 17:27:19 +00:00
Update style
This commit is contained in:
parent
3a0a54cf14
commit
fac9257908
@ -17,16 +17,9 @@ This is an advanced feature of Home Assistant. You'll need a basic understanding
|
|||||||
|
|
||||||
Templating is a powerful feature in Home Assistant that allows the user control over information that is going into and out of the system. It is used for:
|
Templating is a powerful feature in Home Assistant that allows the user control over information that is going into and out of the system. It is used for:
|
||||||
|
|
||||||
- Formatting outgoing messages in, for example, the [notify] and [alexa] components.
|
- Formatting outgoing messages in, for example, the [notify](/components/notify/) platforms and [alexa](/components/alexa/) component.
|
||||||
- Process incoming data from sources that provide raw data, like [MQTT], [REST sensor], or the [command line sensor].
|
- Process incoming data from sources that provide raw data, like [MQTT](/components/mqtt/), [`rest` sensor](/components/sensor.rest/) or the [`command_line` sensor](/components/sensor.command_line/).
|
||||||
- [Automation Templating].
|
- [Automation Templating](/docs/automation/templating/).
|
||||||
|
|
||||||
[notify]: /components/notify/
|
|
||||||
[alexa]: /components/alexa/
|
|
||||||
[MQTT]: /components/mqtt/
|
|
||||||
[REST sensor]: /components/sensor.rest/
|
|
||||||
[command line sensor]: /components/sensor.command_line/
|
|
||||||
[Automation Templating]: /docs/automation/templating/
|
|
||||||
|
|
||||||
## {% linkable_title Building templates %}
|
## {% linkable_title Building templates %}
|
||||||
|
|
||||||
@ -38,6 +31,7 @@ The frontend has a template editor developer tool to help develop and debug temp
|
|||||||
|
|
||||||
Templates can get big pretty fast. To keep a clear overview, consider using YAML multiline strings to define your templates:
|
Templates can get big pretty fast. To keep a clear overview, consider using YAML multiline strings to define your templates:
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```yaml
|
```yaml
|
||||||
script:
|
script:
|
||||||
msg_who_is_home:
|
msg_who_is_home:
|
||||||
@ -45,12 +39,13 @@ script:
|
|||||||
- service: notify.notify
|
- service: notify.notify
|
||||||
data_template:
|
data_template:
|
||||||
message: >
|
message: >
|
||||||
{% raw %}{% if is_state('device_tracker.paulus', 'home') %}
|
{% if is_state('device_tracker.paulus', 'home') %}
|
||||||
Ha, Paulus is home!
|
Ha, Paulus is home!
|
||||||
{% else %}
|
{% else %}
|
||||||
Paulus is at {{ states('device_tracker.paulus') }}.
|
Paulus is at {{ states('device_tracker.paulus') }}.
|
||||||
{% endif %}{% endraw %}
|
{% endif %}
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
[Jinja2](http://jinja.pocoo.org/) supports a wide variety of operations:
|
[Jinja2](http://jinja.pocoo.org/) supports a wide variety of operations:
|
||||||
|
|
||||||
@ -117,43 +112,51 @@ In templates, besides the normal [state object methods and properties](/topics/s
|
|||||||
## {% linkable_title Examples %}
|
## {% linkable_title Examples %}
|
||||||
|
|
||||||
### {% linkable_title States %}
|
### {% linkable_title States %}
|
||||||
|
|
||||||
The next two statements result in same value if state exists. The second one will result in an error if state does not exist.
|
The next two statements result in same value if state exists. The second one will result in an error if state does not exist.
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```text
|
```text
|
||||||
{% raw %}{{ states('device_tracker.paulus') }}
|
{{ states('device_tracker.paulus') }}
|
||||||
{{ states.device_tracker.paulus.state }}{% endraw %}
|
{{ states.device_tracker.paulus.state }}
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
### {% linkable_title Attributes %}
|
### {% linkable_title Attributes %}
|
||||||
|
|
||||||
Print an attribute if state is defined. Both will return the same thing but the last one you can specify entity_id from a variable.
|
Print an attribute if state is defined. Both will return the same thing but the last one you can specify entity_id from a variable.
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```text
|
```text
|
||||||
{% raw %}{% if states.device_tracker.paulus %}
|
{% if states.device_tracker.paulus %}
|
||||||
{{ states.device_tracker.paulus.attributes.battery }}
|
{{ states.device_tracker.paulus.attributes.battery }}
|
||||||
{% else %}
|
{% else %}
|
||||||
??
|
??
|
||||||
{% endif %}{% endraw %}
|
{% endif %}
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
With strings
|
With strings
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```text
|
```text
|
||||||
{% raw %}{% set tracker_name = "paulus"%}
|
{% set tracker_name = "paulus"%}
|
||||||
|
|
||||||
{% if states("device_tracker." + tracker_name) != "unknown" %}
|
{% if states("device_tracker." + tracker_name) != "unknown" %}
|
||||||
{{ state_attr("device_tracker." + tracker_name, "battery")}}
|
{{ state_attr("device_tracker." + tracker_name, "battery")}}
|
||||||
{% else %}
|
{% else %}
|
||||||
??
|
??
|
||||||
{% endif %}{% endraw %}
|
{% endif %}
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
### {% linkable_title Sensor states %}
|
### {% linkable_title Sensor states %}
|
||||||
|
|
||||||
Print out a list of all the sensor states.
|
Print out a list of all the sensor states.
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```text
|
```text
|
||||||
{% raw %}{% for state in states.sensor %}
|
{% for state in states.sensor %}
|
||||||
{{ state.entity_id }}={{ state.state }},
|
{{ state.entity_id }}={{ state.state }},
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
@ -173,48 +176,58 @@ Print out a list of all the sensor states.
|
|||||||
|
|
||||||
{{ as_timestamp(states.binary_sensor.garage_door.last_changed) }}
|
{{ as_timestamp(states.binary_sensor.garage_door.last_changed) }}
|
||||||
|
|
||||||
{{ as_timestamp(now()) - as_timestamp(states.binary_sensor.garage_door.last_changed) }}{% endraw %}
|
{{ as_timestamp(now()) - as_timestamp(states.binary_sensor.garage_door.last_changed) }}
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
### {% linkable_title Distance examples %}
|
### {% linkable_title Distance examples %}
|
||||||
|
|
||||||
If only 1 location is passed in, Home Assistant will measure the distance from home.
|
If only 1 location is passed in, Home Assistant will measure the distance from home.
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```text
|
```text
|
||||||
{% raw %}Using Lat Lng coordinates: {{ distance(123.45, 123.45) }}
|
Using Lat Lng coordinates: {{ distance(123.45, 123.45) }}
|
||||||
|
|
||||||
Using State: {{ distance(states.device_tracker.paulus) }}
|
Using State: {{ distance(states.device_tracker.paulus) }}
|
||||||
|
|
||||||
These can also be combined in any combination:
|
These can also be combined in any combination:
|
||||||
{{ distance(123.45, 123.45, 'device_tracker.paulus') }}
|
{{ distance(123.45, 123.45, 'device_tracker.paulus') }}
|
||||||
{{ distance('device_tracker.anne_therese', 'device_tracker.paulus') }}{% endraw %}
|
{{ distance('device_tracker.anne_therese', 'device_tracker.paulus') }}
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
### {% linkable_title Closest examples %}
|
### {% linkable_title Closest examples %}
|
||||||
|
|
||||||
Find entities closest to the Home Assistant location:
|
Find entities closest to the Home Assistant location:
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```text
|
```text
|
||||||
{% raw %}Query all entities: {{ closest(states) }}
|
Query all entities: {{ closest(states) }}
|
||||||
Query all entities of a specific domain: {{ closest('states.device_tracker') }}
|
Query all entities of a specific domain: {{ closest('states.device_tracker') }}
|
||||||
Query all entities in group.children: {{ closest('group.children') }}
|
Query all entities in group.children: {{ closest('group.children') }}
|
||||||
Query all entities in group.children: {{ closest(states.group.children) }}{% endraw %}
|
Query all entities in group.children: {{ closest(states.group.children) }}
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
Find entities closest to a coordinate or another entity. All previous arguments still apply for 2nd argument.
|
Find entities closest to a coordinate or another entity. All previous arguments still apply for 2nd argument.
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```text
|
```text
|
||||||
{% raw %}Closest to a coordinate: {{ closest(23.456, 23.456, 'group.children') }}
|
Closest to a coordinate: {{ closest(23.456, 23.456, 'group.children') }}
|
||||||
Closest to an entity: {{ closest('zone.school', 'group.children') }}
|
Closest to an entity: {{ closest('zone.school', 'group.children') }}
|
||||||
Closest to an entity: {{ closest(states.zone.school, 'group.children') }}{% endraw %}
|
Closest to an entity: {{ closest(states.zone.school, 'group.children') }}
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
### {% linkable_title Combined %}
|
### {% linkable_title Combined %}
|
||||||
|
|
||||||
Since closest returns a state, we can combine it with distance too.
|
Since closest returns a state, we can combine it with distance too.
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```text
|
```text
|
||||||
{% raw %}{{ closest(states).name }} is {{ distance(closest(states)) }} kilometers away.{% endraw %}
|
{{ closest(states).name }} is {{ distance(closest(states)) }} kilometers away.
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
## {% linkable_title Processing incoming data %}
|
## {% linkable_title Processing incoming data %}
|
||||||
|
|
||||||
@ -238,11 +251,13 @@ This means that if the incoming values looks like the sample below:
|
|||||||
|
|
||||||
The template for `on` would be:
|
The template for `on` would be:
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```yaml
|
```yaml
|
||||||
'{% raw %}{{value_json.on}}{% endraw %}'
|
'{{value_json.on}}'
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
Nested JSON in a response is supported as well
|
Nested JSON in a response is supported as well:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@ -259,10 +274,11 @@ Nested JSON in a response is supported as well
|
|||||||
|
|
||||||
Just use the "Square bracket notation" to get the value.
|
Just use the "Square bracket notation" to get the value.
|
||||||
|
|
||||||
|
{% raw %}
|
||||||
```yaml
|
```yaml
|
||||||
'{% raw %}{{ value_json["values"]["temp"] }}{% endraw %}'
|
'{{ value_json["values"]["temp"] }}'
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
|
||||||
The following overview contains a couple of options to get the needed values:
|
The following overview contains a couple of options to get the needed values:
|
||||||
|
|
||||||
@ -294,8 +310,8 @@ The following overview contains a couple of options to get the needed values:
|
|||||||
|
|
||||||
To evaluate a response, go to the <img src='/images/screenshots/developer-tool-templates-icon.png' alt='template developer tool icon' class="no-shadow" height="38" /> template developer tools, create your output into "Template", and check the result.
|
To evaluate a response, go to the <img src='/images/screenshots/developer-tool-templates-icon.png' alt='template developer tool icon' class="no-shadow" height="38" /> template developer tools, create your output into "Template", and check the result.
|
||||||
|
|
||||||
```yaml
|
|
||||||
{% raw %}
|
{% raw %}
|
||||||
|
```yaml
|
||||||
{% set value_json=
|
{% set value_json=
|
||||||
{"name":"Outside",
|
{"name":"Outside",
|
||||||
"device":"weather-ha",
|
"device":"weather-ha",
|
||||||
@ -304,5 +320,6 @@ To evaluate a response, go to the <img src='/images/screenshots/developer-tool-t
|
|||||||
"hum":"35%"
|
"hum":"35%"
|
||||||
} }%}
|
} }%}
|
||||||
|
|
||||||
{{value_json.data.hum[:-1]}}{% endraw %}
|
{{value_json.data.hum[:-1]}}
|
||||||
```
|
```
|
||||||
|
{% endraw %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user