Template avec plusieur "si"

Bonjour,

j’essaie d’inclure plusieurs si dans un Template sensor mais j’ai une erreur de code que je ne comprend pas, après plusieurs heure a analyser les possibilité du problème sur internet avec le message d’erreur je fais appel a vous
Voici le code et l’erreur

# Transformation Tarif en Cours > Tranche Tarifaire
    - name: "Tranche Tarifaire"
      unique_id: tranche_tarifaire
      state: >
        {% if is_state('sensor.valeur_tarif', '0') %}
          Base
        {% else %}
        {% if is_state('sensor.valeur_tarif', '10') %}
          Heure Pleine ROUGE
        {% else %}
        {% if is_state('sensor.valeur_tarif', '9') %}
          Heure Pleine BLANC
        {% else %}
        {% if is_state('sensor.valeur_tarif', '8') %}
          Heure Pleine BLEU
        {% else %}
        {% if is_state('sensor.valeur_tarif', '7') %}
          Heure Creuse ROUGE
        {% else %}
        {% if is_state('sensor.valeur_tarif', '6') %}
          Heure Creuse BLANC
        {% else %}
        {% if is_state('sensor.valeur_tarif', '5') %}
          Heure Creuse BLEU
        {% else %}
        {% if is_state('sensor.valeur_tarif', '2') %}
          Heure Pleine
        {% else %}
        {% if is_state('sensor.valeur_tarif', '1') %}
          Heure Creuse 
        {% endif %}
  • Invalid config for ‹ template › at packages/Legrand/ecocompteur1.yaml, line 185: invalid template (TemplateSyntaxError: Unexpected end of template. Jinja was looking for the following tags: ‹ endif ›. The innermost block that needs to be closed is ‹ if ›.) for dictionary value ‹ sensor->12->state ›, got « {% if is_state(‹ sensor.valeur_tarif ›, ‹ 0 ›) %}\n Base\n{% else %} {% if is_state(‹ sensor.valeur_tarif ›, ‹ 10 ›) %}\n Heure Pleine ROUGE\n{% endif %}\n »

La ligne 185 correspond a : state: >


[center]## System Information

version core-2024.9.1
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.4
os_name Linux
os_version 6.6.46-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
HACS Data ok
GitHub API Calls Remaining 5000
Installed Version 2.0.1
Stage running
Available Repositories 1405
Downloaded Repositories 6
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 13.1
update_channel stable
supervisor_version supervisor-2024.09.1
agent_version 1.6.0
docker_version 26.1.4
disk_total 30.8 GB
disk_used 9.1 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization kvm
board ova
supervisor_api ok
version_api ok
installed_addons openWakeWord (1.10.0), Node-RED (18.0.5), Get HACS (1.3.1), Linky (1.5.0), Studio Code Server (5.15.0)
Dashboards
dashboards 9
resources 4
views 23
mode storage
Recorder
oldest_recorder_run 7 septembre 2024 à 07:42
current_recorder_run 16 septembre 2024 à 23:07
estimated_db_size 293.09 MiB
database_engine sqlite
database_version 3.45.3
[/center]

Bonjour,

un exemple

      state: >
        {% if is_state('sensor.valeur_tarif', '0') %}
          Base
        {% elif is_state('sensor.valeur_tarif', '10') %}
          Heure Pleine ROUGE
        {% elif is_state('sensor.valeur_tarif', '9') %}
          Heure Pleine BLANC
        {% elif is_state('sensor.valeur_tarif', '8') %}
          Heure Pleine BLEU
        {% elif is_state('sensor.valeur_tarif', '7') %}
          Heure Creuse ROUGE
        {% elif is_state('sensor.valeur_tarif', '6') %}
          Heure Creuse BLANC
        {% elif is_state('sensor.valeur_tarif', '5') %}
          Heure Creuse BLEU
        {% elif is_state('sensor.valeur_tarif', '2') %}
          Heure Pleine
        {% else %}
          Heure Creuse 
        {% endif %}
3 « J'aime »

Si tu lis bien l’erreur il te dit que tu n’as pas fermé les balises « if ».

un « if » doit toujours se terminer par un « endif »

la solution de @WarC0zes est bien sûr la bonne avec la balise « elif » (else-if) pour faire une seule boucle if / elif / else / endif :

 state: >
        {% if is_state('sensor.valeur_tarif', '0') %}
          Base
        {% elif is_state('sensor.valeur_tarif', '10') %}
          Heure Pleine ROUGE
        {% else %}
          Heure Creuse 
        {% endif %}

Tu aurais pu aussi en faisant juste if/else faire de multiples boucles if / else / endif imbriquées (c’est pour la science…) mais il fallait fermer tes if par des endif (il en manquait 8 dans ton code, ici avec une indentation qui décale toutes les boucles pour montrer l’imbrication on voit mieux):

  state: >
    {% if is_state('sensor.valeur_tarif', '0') %}
      Base
    {% else %}
      {% if is_state('sensor.valeur_tarif', '10') %}
        Heure Pleine ROUGE
      {% else %}
        {% if is_state('sensor.valeur_tarif', '9') %}
          Heure Pleine BLANC
        {% else %}
          {% if is_state('sensor.valeur_tarif', '8') %}
            Heure Pleine BLEU
          {% else %}
            {% if is_state('sensor.valeur_tarif', '7') %}
              Heure Creuse ROUGE
            {% else %}
              {% if is_state('sensor.valeur_tarif', '6') %}
                Heure Creuse BLANC
              {% else %}
                {% if is_state('sensor.valeur_tarif', '5') %}
                  Heure Creuse BLEU
                {% else %}
                  {% if is_state('sensor.valeur_tarif', '2') %}
                    Heure Pleine
                  {% else %}
                    {% if is_state('sensor.valeur_tarif', '1') %}
                      Heure Creuse 
                    {% endif %}
                  {% endif %}
                {% endif %}
              {% endif %}
            {% endif %}
          {% endif %}
        {% endif %}
      {% endif %}
    {% endif %}

Bref ton code de départ marchait presque, il « suffisait » de bien fermer tous tes if (tu en ouvres 9 mais tu n’en ferme qu’1 => erreur)

1 « J'aime »

Merci a vous effectivement sa fonctionne je pensai que 1 endif suffisait