Notify template problem

“Hi everyone,
I’m trying to create a notification template. When I test it in the developer tools, the template displays the correct information. However, when I use it in an automation, it doesn’t work as expected. Any ideas on what might be causing this?”

Automation:

action: >
  {% set aanwezigheid_sensor = states.sensor.aanwezigheid_zone_remo.state %}
  {% set opgewekt = states.sensor.gisteren_opgewekt_door_zonnepanelen_kwh_geformatteerd.state | float %}
  {% set teruggeleverd = states.sensor.gisteren_teruggeleverd_aan_het_net_kwh_geformatteerd.state | float %}
  {% set verbruikt = states.sensor.gisteren_verbruikt_van_het_net_kwh_geformatteerd.state | float %}
  {% set netto = opgewekt - verbruikt %}

  {% if netto > 0.5 %}
    {% set icon = 'mdi:solar-power' %}
    {% set bericht = "Je hebt gisteren {{ netto }} kWh meer opgewekt dan verbruikt! Goed bezig!" %}
    {% set color = 'green' %}
  {% elif netto < -0.5 %}
    {% set icon = 'mdi:alert' %}
    {% set bericht = "Je hebt gisteren {{ -netto }} kWh meer verbruikt dan opgewekt." %}
    {% set color = 'red' %}
  {% else %}
    {% set icon = 'mdi:home' %}
    {% set bericht = "Je hebt gisteren ongeveer net zoveel opgewekt als verbruikt!" %}
    {% set color = 'blue' %}
  {% endif %}

  {% if aanwezigheid_sensor == 'Fold 5' %}
    notify.mobile_app_sm_f946b
  {% elif aanwezigheid_sensor == 'S20 Ultra' %}
    notify.mobile_app_s20_remo
  {% elif aanwezigheid_sensor == 'Watch 6' %}
    notify.mobile_app_galaxy_watch6_classic_9qfv
  {% else %}
    notify.mobile_app_sm_f946b  
  {% endif %}
metadata: {}
data:
  title: Energiebalans gisteren
  message: {{bericht}}
  data:
    notification_icon: {{icon}}
    sticky: "true"
    clickAction: noAction
    channel: Smarthome
    color: "{{color}}"

Developer output: (-I deleted the empty lines-)

action: >
    notify.mobile_app_sm_f946b
metadata: {}
data:
  title: Energiebalans gisteren
  message: Je hebt gisteren ongeveer net zoveel opgewekt als verbruikt!
  data:
    notification_icon: mdi:home
    sticky: "true"
    clickAction: noAction
    channel: Smarthome
    color: "blue"

As of this output everthing seems fine

I also tried to put it in a different way thought maybe that would work

action:
  service: >-
    {% if states('sensor.aanwezigheid_zone_remo') == 'Fold 5' %}
      notify.mobile_app_sm_f946b
    {% elif states('sensor.aanwezigheid_zone_remo') == 'S20 Ultra' %}
      notify.mobile_app_s20_remo
    {% elif states('sensor.aanwezigheid_zone_remo') == 'Watch 6' %}
      notify.mobile_app_galaxy_watch6_classic_9qfv
    {% else %}
      notify.mobile_app_sm_f946b
    {% endif %}
  data:
    title: "Energiebalans gisteren"
    message: >-
      {% set opgewekt = states('sensor.gisteren_opgewekt_door_zonnepanelen_kwh_geformatteerd') | float %}
      {% set verbruikt = states('sensor.gisteren_verbruikt_van_het_net_kwh_geformatteerd') | float %}
      {% set netto = opgewekt - verbruikt %}
      
      {% if netto > 0.5 %}
        Je hebt gisteren {{ netto | round(2) }} kWh meer opgewekt dan verbruikt! Goed bezig!
      {% elif netto < -0.5 %}
        Je hebt gisteren {{ (-netto) | round(2) }} kWh meer verbruikt dan opgewekt.
      {% else %}
        Je hebt gisteren ongeveer net zoveel opgewekt als verbruikt!
      {% endif %}
    data:
      notification_icon: >-
        {% set opgewekt = states('sensor.gisteren_opgewekt_door_zonnepanelen_kwh_geformatteerd') | float %}
        {% set verbruikt = states('sensor.gisteren_verbruikt_van_het_net_kwh_geformatteerd') | float %}
        {% set netto = opgewekt - verbruikt %}
        {% if netto > 0.5 %}
          mdi:solar-power
        {% elif netto < -0.5 %}
          mdi:alert
        {% else %}
          mdi:home
        {% endif %}
      sticky: "true"
      clickAction: "noAction"
      channel: "Smarthome"
      color: >-
        {% set opgewekt = states('sensor.gisteren_opgewekt_door_zonnepanelen_kwh_geformatteerd') | float %}
        {% set verbruikt = states('sensor.gisteren_verbruikt_van_het_net_kwh_geformatteerd') | float %}
        {% set netto = opgewekt - verbruikt %}

        {% if netto > 0.5 %}
          green
        {% elif netto < -0.5 %}
          red
        {% else %}
          blue
        {% endif %}

Developer output: (-I deleted the empty lines-)

action:
  service: >-
      notify.mobile_app_sm_f946b
  data:
    title: "Energiebalans gisteren"
    message: >-
        Je hebt gisteren ongeveer net zoveel opgewekt als verbruikt!
    data:
      notification_icon: >-
          mdi:home
      sticky: "true"
      clickAction: "noAction"
      channel: "Smarthome"
      color: >-
          blue
  1. The Template tool only understands Jinja templating, it does not check the YAML configuration.
  2. The YAML interpreter requires templates to be surrounded by quotation marks or indicated by the use of a block scalar.
  3. If you want variables to be available under multiple configuration keys you need to set them as script variables. This can be accomplished a number of ways. For what you have posted you can just do it as a separate action.
...
actions:
  - variables:
      aanwezigheid_sensor: "{{states('sensor.aanwezigheid_zone_remo')}}"
      opgewekt: "{{ states('sensor.gisteren_opgewekt_door_zonnepanelen_kwh_geformatteerd') | float(0) }}"
      teruggeleverd: "{{ states('sensor.gisteren_teruggeleverd_aan_het_net_kwh_geformatteerd') | float(0) }}"
      verbruikt: "{{ states('sensor.gisteren_verbruikt_van_het_net_kwh_geformatteerd') | float(0) }}"
      netto: "{{ opgewekt - verbruikt }}"
      netto_index: |  
        {% if netto > 0.5 %} 0
        {% elif netto < -0.5 %} 1
        {% else %} 2
        {% endif %}
  - action: >
      {% if aanwezigheid_sensor == 'Fold 5' %}
        notify.mobile_app_sm_f946b
      {% elif aanwezigheid_sensor == 'S20 Ultra' %}
        notify.mobile_app_s20_remo
      {% elif aanwezigheid_sensor == 'Watch 6' %}
        notify.mobile_app_galaxy_watch6_classic_9qfv
      {% else %}
        notify.mobile_app_sm_f946b  
      {% endif %}
    metadata: {}
    data:
      title: Energiebalans gisteren
      message: |
        {% set bericht_list = [
          'Je hebt gisteren '~ netto ~' kWh meer opgewekt dan verbruikt! Goed bezig!',
          'Je hebt gisteren -'~ netto ~' kWh meer verbruikt dan opgewekt.',
          'Je hebt gisteren ongeveer net zoveel opgewekt als verbruikt!' ]%}
        {{ bericht_list[netto_index] }}"
      data:
        notification_icon: "{{ ['mdi:solar-power','mdi:alert','mdi:home'][netto_index] }}"
        sticky: "true"
        clickAction: noAction
        channel: Smarthome
        color: "{{ ['green','red','blue'][netto_index] }}"

Thanks for sharing the solution. It works perfectly! :pray:
Enjoy The Coffee!

1 Like