@Nyco :
En lisant la documentation du delay, on s’aperçoit qu’il y a plusieurs façon de l’utiliser :
- Seulement un nombre représentant des secondes (donc on peut utiliser un
input_number
)
# Seconds
# Waits 5 seconds
- delay: 5
est équivalent à :
#Déclaration de l'entité
# Example configuration.yaml entry
input_number:
temporisation:
name: "Temporisation modifiable dans Lovelace et par automatisations/scripts"
min: 0
max: 60
step: 1
#Utilisation de l'entité pour l'action delay
# X secondes
- delay: {{ states('input_number.temporisation') | int }}
L’utilisation de la fonction states()
renvoie un texte (string) alors que l’action delay
dans ce cas attend un nombre (integer). On obtient un nombre en convertissant l’état renvoyé à l’aide de l’utilisation d’un filtre (filter) Jinja en l’occurrence int
.
Dans l’exemple ci dessus, la temporisation ne pourra pas dépasser 1 minute (max: 60
).
- Avec un format
HH:MM
(ouHH:MM:SS)
(donc on peut utiliser uninput_datetime)
# HH:MM
# Waits 1 hour
- delay: '01:00'
est équivalent à :
#Déclaration de l'entité
input_datetime:
temporisation:
name: "Temporisation modifiable dans Lovelace et par automatisations/scripts"
has_date: false
has_time: true
#Utilisation de l'entité pour l'action délay
# HH:MM:SS
- delay: "{{ states('input_datetime.temporisation') }}"
Ici, l’action attends un texte donc pas de conversion à faire. Il faut simplement englober la formule et ne pas utiliser les mêmes que dans la formules : on englobe avec des guillemets "
car la formule utilise déjà des apostrophes '
.
- Avec toutes les clés définies :
#Temporisation de 1 minute et 30 secondes
- delay:
days: 0
hours: 0
minutes: 1
seconds: 30
milliseconds: 0
est équivalent à :
#Déclaration de l'entité
input_number:
temporisation_heures:
name: "Temporisation (H)"
min: 0
max: 24
step: 1
input_number:
temporisation_minutes:
name: "Temporisation (m)"
min: 0
max: 59
step: 1
input_number:
temporisation_secondes:
name: "Temporisation (s)"
min: 0
max: 59
step: 1
#Utilisation de l'entité pour l'action délay
# HH:MM:SS
- delay:
hours: {{ states('input_number.temporisation_heures') | int }}
minutes: {{ states('input_number.temporisation_minutes') | int }}
seconds: {{ states('input_number.temporisation_secondes') | int }}
Du coup, pour ton code :
position: {{(states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int)}}
Tu récupère l’état de l’entité input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree
:
position: {{ states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") }}
Mais comme la clé position
attend un nombre, il faut convertir l’état en nombre d’où | int
:
position: {{ states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int }}
Et donc pour reprendre ton code du premier post :
position: {{ 100 - ( states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int ) }}`
Pour pouvoir retourner une valeur calculée, il faut indiquer à l’interpréteur où se trouve ton calcul d’où les accolades {{ }}
(qui manquent dans ton premier post pour la position).
Elles indiquent à l’interpréteur que le texte à l’intérieur est du code :
- {{ le code ici }} : fait le traitement du code et renvoie la valeur dans la clé
- {% %} : fait le traitement du code mais ne renvoie pas de valeur (utilisé pour les affectations)
-
: >
ou: |
: indique à l’interpréteur que le code se trouve sur plusieurs ligne. C’est l’indentation qui fixe le début et la fin du code (généralement 2 espaces après le début de la clé)
Un exemple concret avec ton code serait :
position: >
{% set Position_Ouverte = 100 %}
{% set Position_Pre_Fermeture = states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int %}
{{ Position_Ouverte - Position_Pre_Fermeture }}
Des questions ? Attention ! Car tu auras des réponses !