Forcer des retours à la ligne dans le texte généré par les template jinja

Bonjour,
J’ai différents templates permettant de construire le texte de mes notifications telegram dans mes automatisations. Or je n’ai jamais trouvé comment forcer des retours à la lignes dans le texte généré par les templates. D’autant que l’automatisation lors de la sauvegarde reformate les templates en réduisant la longueur des lignes.
J’ai essayé de mettre 1 ou 2 lignes blanches, mais cela ne fonctionne pas.
Est ce que quelqu’un saurait comment faire ?

1 « J'aime »

il me semble qu’il faut ajouter \n lorsque l’on veux revenir à la ligne

Merci, je pensais aussi cela car courant dans de nombreux langage comme c++. Malheureusement ne semble pas marcher.

Oui :wink:

Voici quelques notions :

Pour taper du texte en Jinja2, il y a plusieurs façon de procéder :

  1. Les guillemets :
message: "Ceci est un test. L'apostrophe est bien géré."
  1. Les apostrophes
message: 'Ceci est un test. L''apostrophe est géré avec le caractère d''échappement apostrophe.'
  1. Le signe >
message: >
  Permet de ne pas se préoccuper de l'apostrophe ou du guillemet (") dans le texte.
  Ne gère pas les retours de ligne.

  Malheureusement. 
  1. Le signe |
message: |
  C'est le plus complet !
  Il permet de gérer les apostrophes (') et les guillemets (") sans caractères d'échapement.

  Et c'est lui qui gère les sauts de lignes et les lignes vides.

  Super ! 
  1. Le saut de ligne dans les guillemets:
message: "La 1ère ligne.\nLa seconde."

1 « J'aime »

Merci beaucoup pour ce récapitulatif très précis listant les alternatives. Bien compris quand \n peut être utilisé.
Bon je vais encore retester quand je serai de retour a la maison dans la semaine, et enverrai un cas type si le pb persiste. J’utilise le cas 3 (signe <) et vais donc essayer de changer par le cas 4 (signe vertical).

Mon problème est aussi que j’ai dans mes automatisations des notifications avec des messages générés par des templates avec des conditions et retours d’états, et qui font vite 10 lignes et plus. J’enregistre le template avec les bons retours a la ligne, formatage correcte si je teste avec l’outil développeur. Mais si je ré-édite l’automatisation, il me supprime les retours a la ligne et reformate le texte du template. Je perds alors mes retours a la ligne et le formatage initial.

Merci Clematex pour cette explication
Dans le cas 3 (>) à quoi sert l’ajout d’un - (tiret court) après le signe supérieur?

Je ne m’en rappelle plus… :innocent:

Et je n’arrive pas à retomber sur la documentation que j’avais rencontré à l’époque avec toutes les subtilités…

Je recherche ce soir pour voir…

retrouvé :heart: :

3 « J'aime »

Un immense merci @Clemalex !! Je ne connaissais pas la différence entre > et |. Je me demande toujours quand tu as du temps pour tes propres projets au regard du temps que tu passes à aider les autres :wink:

Par contre, comme je le craignais, il y a toujours un reformatage par HA dans le cadre d’une automatisation.
Je me suis aperçu que le reformatage n’est fait qui si une des lignes du template fait plus de 80 caractères (on se croirai dans les années 80, au temps des écrans verts :crazy_face:).

Exemple d’un de mes scripts saisi comme cela (et fonctionne alors bien en sortie d’édition):

alias: Boite aux lettres ouverture
description: ''
trigger:
  - platform: state
    entity_id: binary_sensor.aqara_boite_lettres_onoff
    from: 'off'
    to: 'on'
condition: []
action:
  - service: input_number.increment
    target:
      entity_id: input_number.boite_aux_lettres_nombre_ouvertures
  - service: notify.message_info_groupe
    data:
      message: |
        Ouverture de la boite aux lettres.
        {%if (states('input_number.boite_aux_lettres_nombre_ouvertures')|int == 1)%}première de la journée donc surement le facteur !
        {% else %}{{states('input_number.boite_aux_lettres_nombre_ouvertures')|int}}ième de la journée.{%- endif %}
mode: single

Et si je le sauve et le rouvre, HA le reformate comme cela, en revenant au > :

alias: Boite aux lettres ouverture
description: ''
trigger:
  - platform: state
    entity_id: binary_sensor.aqara_boite_lettres_onoff
    from: 'off'
    to: 'on'
condition: []
action:
  - service: input_number.increment
    target:
      entity_id: input_number.boite_aux_lettres_nombre_ouvertures
  - service: notify.message_info_groupe
    data:
      message: >
        Ouverture boite aux lettres.

        {%if (states('input_number.boite_aux_lettres_nombre_ouvertures')|int ==
        1)%}Première de la journée donc surement le facteur !

        {% else
        %}{{states('input_number.boite_aux_lettres_nombre_ouvertures')|int}}ième
        de la journée.{%- endif %}
mode: single

C’est au final la ligne blanche qui force le retour à la ligne et donc pourrait marcher. Mais le comportement change : un espace supplémentaire s’invite au début de la deuxième ligne. Le formatage initial a bien sauté.
Sur des templates avec des constructions plus complexes que celui-ci, c’est vite embêtant.

Bon il faudrait trouver pour ne pas dégouter des automatisations les afinados de node red… :scream:

Et si tu ne retourne pas dessus🙃 ?

Je sais que pendant un temps (lors de la mise en place du mode yaml par la GUI) dans certains cas, il ne fallait pas le RE-afficher… :innocent:

Ben heu… ça marche à priori oui, mais ce n’est pas top de ne plus pouvoir retoucher mes automatisations sans perdre les templates :face_with_head_bandage:
Je teste, quand il y a de grandes lignes, la possibilité de laisser dés le début le > et donc utiliser les lignes blanches pour forcer les retours à la ligne, et en maitrisant comment sont créés les espaces.

Et… cela ne marche pas : les saut de lignes sont virées avec >.
L’unique solution, peu satisfaisante, est d’utiliser | et la syntaxe jinja2 correcte, puis ne pas modifier ce que HA en aura fait… :zipper_mouth_face:

La seule solution est d’aller ouvrir une issue sur Home Assistant Core. :innocent: :blush:

Une alternative est de faire la quasi-totalité de ton automatisation en GUI et ensuite de la déporter dans un fichier dédié en incluant ce dit fichier. :

#configuration.yaml
[... ] 
automation gui: automations.yaml
automation templates: automations_templates.yaml

Merci pour le work-around. Très pertinent, même si cela ne fait que bloquer la possibilité de modifier via le GUI. Je viens de faire un petit test et ça marche. Par contre, j’ai testé avec un cas plus complexe et les retours à la lignes ne fonctionnent pas même avec | (oups)

Bon, au final tu as raison : l’unique solution sera de faire un ticket quand j’aurai un peu de temps, et je vais me passer des retours à la ligne dans mes notif. concernées (avec lignes > 80 c) tant que HA a ce comportement :see_no_evil: :hear_no_evil: :speak_no_evil:

Encore merci pour toute ton aide et temps consacré. C’est vraiment appréciable. Je ne connaissais en particulier pas la différence entre > et | ni la signification de >- :+1:

1 « J'aime »