Aide modèle - Concaténation

System Health

version 2021.1.4
installation_type Home Assistant OS
dev false
hassio true
docker true
virtualenv false
python_version 3.8.7
os_name Linux
os_version 5.4.86
arch x86_64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4896
Installed Version 1.10.0
Stage setup
Available Repositories 0
Installed Repositories 0
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Hass.io
host_os Home Assistant OS 5.10
update_channel stable
supervisor_version 2021.01.5
docker_version 19.03.13
disk_total 109.3 GB
disk_used 13.8 GB
healthy true
supported true
board intel-nuc
supervisor_api ok
version_api ok
installed_addons SSH & Web Terminal (7.8.0), Samba share (9.3.0), Visual Studio Code (3.0.0), File editor (5.2.0), MariaDB (2.2.1), Nginx Proxy Manager (0.8.2), Check Home Assistant configuration (3.6.0), ADB - Android Debug Bridge (0.6.3), Home Assistant Google Drive Backup (0.103.0), phpMyAdmin (0.1.4), Glances (0.9.1), Mosquitto broker (5.1), Node-RED (7.2.11), AdGuard Home (2.6.1), Grocy (0.9.2), Tuya Gateway (0.6)
Lovelace
dashboards 2
mode storage
views 5
resources 9

Mon problème

Bonsoir tout le monde ;-).

Dans l’eventualité d’un blueprint, je teste des templates. Et je buggue :wink:

Un peu de code vaut mieux qu’une longue explication :

{% set today = now().strftime('%A') | lower %}
{{ today }}

{% set saturday_morning_time = states('input_datetime.saturday_morning_time') %}
saturday morning time : {{ saturday_morning_time }}

{% set morningtime = {{ today~'_morning_time' }} %}
morningtime : {{ morningtime }}

Je souhaiterais que la variable morningtime contienne la valeur de la variable concaténee avec today

Je ne trouve pas la syntaxe adequate, j’ai tout tente, accolade, parentheses, simple quote, double quote…

L’idee dans le blueprint, un input par jour nommé comme ceci : jour_morning_time en selector time

Puis dans un template comparé comme ceci du genre :

{% set now = now().strftime('%H:%M:%S') %}
{% if now >= morningtime ...%}

Des idées svp ?

La première chose que je remarque c’est l’utilisation des {{}} (qui servent à l’impression/sortie à l’intérieur des {% %} (qui servent pour les déclarations, et ça ce n’est pas possible (d’ailleurs le rendu de l’expression dans Outils de développement l’indique (plus ou moins :wink: ).

Je n’ai pas trop compris ce que tu comptes faire (je suis fatigué, je relierais demain :+1: ) mais voici ton code avec un exemple de concaténation et d’extraction de l’état d’une entité à partie de cette concaténation (je préfère utiliser les + plutôt que les ~ car ces derniers ne me sautent pas au yeux dans je fais la mise au point :wink: ) :

{% set today = now().strftime('%A') | lower %}
{{ today }}

{% set saturday_morning_time = states('input_datetime.test') %}
saturday morning time : {{ saturday_morning_time }}

{% set morningtime =  today + '_morning_time'  %}
morningtime : {{ morningtime }}

{{ states('sensor.' + morningtime) }}

Ce qui donne (tu remarqueras que l’entité (le texte concaténé est bien compris et surveillé par l’interpréteur) :

Bonsoir,

Merci @Clemalex

Effectivement comme tu l’as fait la concaténation fonctionne, (string + variable) :wink: J’etais bon aussi dans ce cas.

Mon souci est a concatenation de variable + partie d’une variable :wink:

Je m’explique, enfin je vais essayer d’etre plus clair ;-).
Dans un blueprint que j’envisage j’ai créé pour tester des input selector time qui se nomme :

  • saturday_morning_time
  • sunday_morning_time
  • monday_morning_time
  • etc …
saturday_morning_time:
      name: 'Heure de début de la période : "SAMEDI MATIN"'
      description: Heure du début de la période du "SAMEDI matin".
      default: "06:00:00"
      selector:
        time:

Ensuite l’idée est de comparer dans le blueprint en reconstituant le nom de l’input avec la variable today ci-dessus.
Comme ceci par exemple

 {% set now = now().strftime('%H:%M:%S') %}
{{ now }}

{% if now > morningtime %} ...  

Avec morningtime qui est reconstituer/concatener avec today + _morning_time qui provient du nom de l’input « saturday_morning_time »
J’ai encore essaye auj, ca n’a pas l’air d’etre possible, en tout cas, je ne sais pas faire du tout.

Je comprends pas du coup, car tout ce que tu demande est dans la balise code que je te fournis :

équivaut à

{% set today = now().strftime('%A') | lower %}
{% set morningtime =  today + '_morning_time'  %}
{{ states('input_datetime.' + morningtime) }}

C’est que ce code ne fonctionne pas dans le blueprint ?

Bonjour,

En fait ce n’est pas encore très clair le fonctionnement des blueprints. De ce que je comprends, ensuite pour manipuler les input, il est nécessaire des les variabiliser

variables:
  saturday_morning_time: !input saturday_morning_time

Je ne crois pas pouvoir appeler/comparer l’‹ input selector time › avec son nom (input_datetime.qqch) qui dans ce cas est effectivement la concatenation de « string » plus la variable ‹ morningtime › (puisque le selector time laisse peut de doute sur le fait que cela soit un input_datetime derriere)
Je n’ai pas essaye, mais je pensais bêtement qu’on ne pouvait pas.

Une fois donc que c’est variabilisé, c’est la que ca se complique, reconcatener la variable avec today :wink: pour comparer en une fois.

Sinon, j’ai lm’impression que la solution de contournement serait de comparer le jour avec…mystere lo

Si des pros du dev ont des idées :wink: pour mon 1er blueprint lol