Help with data_template in Automation

- id: test
  alias: test
  trigger:
  - platform: state
    entity_id: binary_sensor.updater
    from: 'off'
    to: 'on'
  action:
  - service: notify.notify
    data_template:
      message: >
        {% 
          set device = 
            { 
              "name": state_attr("climate.midea", "friendly_name"),
              "state": {% if is_state("climate.midea", "off") %}
                         "turned off"
                       {% elif is_state("climate.midea", "unknown"}
                         "offline"
                       {% else %}
                         "turned on"
                       {% endif %}
            } 
        %}
        {{device.name}} {{device.state}}

Help, please. What I am doing wrong?

You are creating a template that contains nested {% %} which is not supported.

You can’t put an expression (or logic) within an expression (or logic) like this:
{% … {% … %} …%}

But this work fine

message: >
        {% 
          set device = 
            { 
              "name": state_attr("climate.midea", "friendly_name"),
              "state": "test"
            } 
        %}

How can I interpretate this part of code:

              "state": {% if is_state("climate.midea", "off") %}
                         "turned off"
                       {% elif is_state("climate.midea", "unknown"}
                         "offline"
                       {% else %}
                         "turned on"
                       {% endif %}

Yes because it doesn’t contain an expression within an expression. That is a single expression defining a variable whose value is a dictionary.

Try this:

      {% set values = {'on':'turned on', 'off':'turned off', 'unknown':'offline'} %}
      {% set value = states('climate.midea') %}
      {{state_attr('climate.midea', 'friendly_name')}} {{values[value] if value in values.keys() else 'unknown'}}

Thanks. It works fine!

1 Like